• Unity3D 中的灯光与渲染


    最近仔细研究了Unity3D中的灯光以及渲染,有了全新的认识,在这里整理记录下来。博主所使用的是Unity3D 2017.3.1f1这个版本。

    一、Unity3D中的灯光

    1. Directional Light:平行光,用来模拟太阳发射的光。

    2. Point Light:点光源,用于模拟场景中的灯和其他本地光源。

    3. Spot Light:聚光灯,通常用于人造光源,如手电筒,汽车前灯和探照灯。

    4. Area Light:区域光,只能用于烘焙中。

    5. Reflection Group:反射探针,用于准确反射周围环境。

    6. Light Probe Group:灯光探针组,用于记录场景中光照信息,实时影响物体。

    7. Environment Lighting:环境光。场景的整体外观和亮度的主要依靠于环境光,环境光是从各个方面来影响对象的。

    8. Emissive Materials:自发光材质,类似于区域光,只能使用在静态物体中,并且只能照明静态物。

    二、Unity3D中虚拟环境的组成

    Unity3D中虚拟环境由天空盒、环境光、环境反射以及场景中的光源共同构成。我们按照下面的步骤,可以将场景还原到最原始的状态:

      1、关闭场景中的所有灯光。

      2、进入Window->Lighting->Setting->Scene窗口。

      3、设置Environment->Skybox Material参数为None,取消天空盒。

      4、设置Environment->Environment Lighting->Ambient Color为黑色,将环境光设置为黑色。这里需要注意的是,当我们将天空盒取消后,环境光的来源将会变为颜色,如果我们设置了天空盒,并将环境光的来源设置为天空盒(Environment -> Environment Lighting -> Source -> Skybox),Ambient Color参数将会变为Intensity Multiplier(环境光强度),如果我们将强度调为0,会发现场景明显变暗。

      5、设置Environment->Environment Reflections->Intensity Multiplier0,将环境反射强度设置为0。环境反射也受来源的影响,当天空盒为空时,反射来源也为空,这时我们调这个参数其实是看不到效果的。如果我们设置一个天空盒,将环境光关闭,打开场景中的光源,我们在调节这个参数,会发现场景中的模型,接受不到光照的地方将会显示纯黑色。

    按照上面的步骤做完,我们将会得到一个纯黑的场景,什么也看不到,如果我们反向操作,场景又会慢慢亮起来,这也就证明了Unity3D中虚拟环境由天空盒、环境光、环境反射以及场景中的光源共同构成这一结论。

    三、Unity3D中打光与渲染必备知识

      1、Unity3D中的光分为直接光照和间接光照,间接光照就是反射光。 

      2、Unity3D中光的渲染模式有三种:

        ① Realtime:实时渲染。每帧都会计算光照,实时光照是不会反射的,所以它的光影显得单调。

        ② Mixed:混合渲染。提供烘焙和实时功能的混合模式,例如对灯光的间接照明进行烘焙,同时对直接照明进行实时计算。

        ③ Baked:烘焙渲染。过烘培光照贴图的方式获得很好的光照效果,无法实时的改变光照

      3、Unity3D中的阴影类型:

        ① No Shadows:没有阴影。无性能损耗。

        ② Hard Shadows:硬阴影。阴影边缘清晰,效果一般,性能损耗一般。

        ③ Soft Shadow:软阴影。阴影边缘柔和,有过渡效果,效果最好,性能损耗最严重。

      4、Unity3D中分全局设置和局部设置。例如我们对场景中某一盏灯光的参数进行修改,只会影响这一盏灯,如果对全局参数进行修改,将会影响所有的灯光效果。

      5、Unity3D中的物体分为动态物体和静态物体。烘焙技术、自发光材质、预先全局光照技术等只对静态物体生效。

    四、效果优化常用全局参数介绍

    1、颜色空间(Color Space

    参数设置位置:Edit -> Project Setting -> Player -> Player Settings -> Other Settings -> Rendering -> Color Space

    两种模式:GammaLinearLinear效果更好,同时也对性能消耗比较大。下面是两种模式在不同光照强度下效果对比图:

     

    2、最终聚集(Final Gather)

    参数设置位置:Window -> Lighting -> Setting -> Scene -> Lightmapping Settings -> Final Gather

    作用:一种模拟全局照明的计算技术。反向搜集物体表面特定点的受光照强度来模拟现实照明效果,来使场景更贴近于自然。由于该计算技术计算量很大,建议在场景最后出效果时勾选,并进行烘焙,平时不要开启。

    五、没有阴影的原因

    1、光源没有开阴影。

    2、全局设置中关闭了阴影。(Edit -> Project Setting -> Quality -> QualitySettings -> Shadows -> Shadows

     

    3、模型。Mesh Renderer组件中的Cast Shadows属性为关。

     

    4、Shader问题,Shader本身不接受阴影。

    六、灯光常用参数介绍

    Type:灯光类型

    Color:灯光颜色

    Mode:渲染模式

      Realtime:实时

      Mixed:混合

      Baked:烘焙

    Intensity:灯光强度

    Indirect Multiplier:间接照明强度

    Shadow Type:阴影类型。No Shadows(无阴影)、Hard Shadows(硬阴影)、Soft Shadows(软阴影)

      Baked Shadow Angle:这个设置用来改变间接光的亮度。间接光是指从一个物体反射到另一个物体的光线。Indirect Multiplier定义了GI系统计算的反射光亮度。Indirect Multiplier小于1时,光线每次反射后会变暗。大于1时光线每次反射后会变 亮。 这个功能可以用来调亮阴影中的表面(比如洞穴内部)以清晰地观察细节。或者在使用Realtime Global Illumination时,想让某个real-time光源只有直接光时,可以将Indirect Multiplier设置为0。

      Realtime Shadows:实时阴影

        Strength:阴影浓度,即阴影的黑暗程度。

        Resolution:阴影分辨率,即质量。

        Bias:通过滚动条控制阴影被推离光线的距离,范围为0到2,默认值为0.5。用来避免人工物体自阴影的错误。

        Normal Bias:通过滚动条控制投射阴影的表面相对于周围正常表面的下沉效果,范围为0到3,默认值为0.4。用来避免人工物体自阴影的错误。

        Near Plane:通过滚动条控制渲染阴影时的最近裁切面。范围为0.1到10,默认值时0.2。这个值会从0.1 units和光线的Range的1%中取最小值。

    Cookie:为投射的阴影指定一个纹理(替换真实的灰色阴影)。比如制造剪影,或者照明图案。

    Cookie Size:阴影纹理尺寸

    Draw Halo:绘制光晕

    Flare:光斑

    Render Mode:渲染优先级。这会影响光照的保真度和渲染性能。

      Auto:渲染方式在运行时根据周围光照的亮度和当前Quality Settings来决定。

      Important:光照总是按照逐像素的质量渲染。一般只对最醒目的视觉效果使用Important模式,比如玩家车辆的车灯。

      Not Important:光照总是以更快的顶点/角色光照模式渲染。

    Culling Mask:光照剔除

    各种灯光的参数都大致一致,我这里就不一一介绍了,就以平行光为例介绍。

    七、Lighting窗口参数介绍

    Unity3D 中渲染效果肯定是离不开 Lighting 窗口的参数设置的。Lighting 窗口的参数看着很多,其实只要理解了,也没多少。而且Realtime、Mixed、Baked这三种渲染模式是分别与 Lighting 窗口中的 Realtime Lighting、Mixed Lighting、Lightmapping Settings 三大块一一对应的,只要理解了这个,整个 Lighting 窗口的参数就好理解很多了。

    1、Environment(环境设置)

      Skybox Material:天空盒

      Sun Source:当使用程序天空盒时,使用它来指定带有方向光的游戏对象,如果设置为none,场景中最亮的方向光则被指定为太阳光。

      Environment Lighting:环境光

        Source:来源

          Skybox:天空盒

          Gradient:梯度

          Color:颜色

        Intensity Multipl:环境光强度

        Ambient Mode:环境渲染模式

          Realtime:实时渲染

          Baked:烘焙

      Environment Reflections:环境反射

        Source:来源

        Resolution:反射成像的分辨率

        Compression:压缩

        Intensity Multipl:反射强度

        Bounces:弹跳;反射

    2、Realtime Lighting(实时灯光)

      Realtime Global Illumination:实时全局光照

    3、Mixed Lighting(混合灯光)

      Baked Global Illumination:烘焙全局光照

      Lighting Mode:只在光源模式为 Mixed 时生效。

        Baked Indirect:只烘焙间接光。使用此模式,光影效果最好,并且静态物体和动态物体的光影可以混合,但是很消耗性能。该模式受Shadow DistanceQualitySettings -> Shadows -> Shadowmask Mode ->Shadow Distance)参数的影响,当视野距离超过这个值时,不显示影 子。

        Shadowmask:效果比Subtractive效果要好,缺点就是动态物体无法接受静态物体已经烘焙好的阴影。如果我们想动态物体能够和烘焙好的光影 信息进行混合,我们可以将模式改为Distance Shadowmask,这样就可以实现在一定视野范围内进行混合,但是相对来说会损耗性能。Distance Shadowmask模式受Shadow DistanceQualitySettings -> Shadows -> Shadowmask Mode ->Shadow Distance)参数的影响,这个距离 指的是视野距离,即物体距离相机的距离。Distance Shadowmask模式是在质量设置里面进行设置的(QualitySettings -> Shadows -> Shadowmask Mode -> Distance Shadowmask)。

        Subtractive:效果最差,性能最好。只允许有一个主光源,当动态物体,被两个光源照射时,只会产生一个阴影,静态物体依然会有两个阴影。

    4.Lightmapping Settings

      Lightmapper:光线映射器。

      Indirect Resolution:间接光质量。

      Lightmap Resolution:光照贴图质量。

      Lightmap Padding:光照贴图间距。防止光照信息贴错位置。

      Lightmap Size:光照贴图尺寸。

      Compress Lightmaps:是否压缩。

      Ambient Occlusion:环境剔除。可以优化墙角等地方光影效果。环境光遮蔽是一种光照模型,它会计算像素亮度与场景中附近物体之间的关 系。它将确定何时阻止特定像素接收附近的几何光的环境光,这样使其亮度便会降低。当两个均匀明亮的物体相互靠近时,它会产生基本的 变光效果。

        MaxDistance:设置一个值控制射线的射程,以确定对象是否被遮挡。

        Indirect Contribution:控制间接光在lightmap的强度。

        DirectContribution:控制直接光在lightmap的强度。

      Final Gather:最终聚焦。

        RayCount每个最终聚焦的点发出的射线的数目。默认是256。

        Denoising:是否在最后的聚焦输出应用去噪过滤。

      Directional Mode:是否生成光照方向贴图来辅助计算。

      IndirectIntensity:间接光强度。

      Albedo Boost:反照率增强。可以用来处理曝光现象。将模型材质的Albedo贴图颜色调暗,将反照率加大。

      Lightmap Parameters:光照贴图参数。质量设置。

  • 相关阅读:
    360抢票王验证码自动识别真的那么牛吗?
    wpf 的各个template
    HTML/CSS实现的一个列表页
    泛型约束和利用反射修改对象属性的值
    KindEditor富文本编辑器, 从客户端中检测到有潜在危险的 Request.Form 值
    检查对象是否为NULL或者为Empty
    【笔记】WPF实现ViewPager引导界面效果及问题汇总
    【笔记】WPF之模板控件应用
    【笔记】W3C CSS关键属性
    【转】Web标准中的常见问题
  • 原文地址:https://www.cnblogs.com/xiaoyulong/p/11549922.html
Copyright © 2020-2023  润新知