Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照

本篇博客主要对实时、烘焙和混合光照进行介绍。
传送门:
Unity3D灯光与渲染学习之(二):全局、烘焙以及混合光照

4.全局和烘焙关照

全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算。
没有照明(左)、只有直接光源(中)、 有间接光源的全局光照(右)
以烘焙光照为例,物体在经过光照之后,还会对其它物体产生光照影响。当烘焙全局光照打开后(下图左),暗的部分也会因为别的物体的反射而变亮。将场景中的物体设置为静态(勾选Static),将灯光模式改为烘培(Baked)即可看到效果(下右图)。
 
改变模式为Baked,当烘焙完成后,灯光就可以删除了,已经将光照贴图赋给了游戏物体,灯光的作用已经消失了。

作为静态物体,这么做是可以的,但是如果场景中新增了一个动态物体,就应该要使用混合型灯光了。

5.混合光照模式(Mixed Lighting)

Unity里每盏灯光默认的烘焙模式都是”Realtime”,这代表这些灯光仍然会照亮你的场景,Unity的realtime GI系统会处理间接光。但如果默认的烘焙模式是”Baked”,那么这些灯光将会透过Unity的烘焙GI系统处理直接光源和间接光源,产生出来的光照贴图一旦贴到场景上在执行期间是不能改变的。选择烘焙模式为”Mixed”的话,场景内的静态对象会被烘焙GI拿去做计算,然而,不像”Baked”模式,混合模式的灯光仍会继续运算即时光源到非静态对象上,这对于你想把静态环境烘成光照贴图,但同时又希望同样一盏灯能为会动的角色计算阴影很有帮助。

接下来考虑在混合光照下的灯光模式( 只有在混合灯光情况下才有效),三种:

先从subtractive说起,在这种模式下的光照对于 动态物体只显示一个灯光阴影效果(下图左立方体,右边立方体为静态,有两个阴影)。

第二个灯光模式ShaderMask,对于动态和静态物体能都能显示完整的阴影效果。

,并且在Edit>Projection Setting>Quality之中,将Shadow Mask设置为Distance Shadowmask即可使物体受其他物体的阴影影响。效果如下。

当然可以用更高级的办法,动态物体在与静态物体阴影区域发生碰撞的时候,可以通过代码动态修改Shadow Mask,实现调整。通过简单的代码实现
            void OnTriggerEnter(Collider other)
            {
                        if(QualitySettings.shadowmaskMode == ShadowmaskMode.Shadowmask)
                        { 
                                    QualitySettings.shadowmaskMode = ShadowmaskMode.DistanceShadowmask;
                        }
                        else
                        { 
                                    QualitySettings.shadowmaskMode = ShadowmaskMode.Shadowmask;
                        } 
            }
第三种Baked Indirect,只烘焙间接光,其余情况均为RealTime,是最高级的模式,但当场景中距离大于Quality界面中的Shadow Distance时,所有阴影都不予显示。

6.烘焙光照的参数详解

这部分主要介绍Lighting界面中的Lightmapping Setting,即下图中的参数信息

  • Lightingmap:分为Enlighten和Progressive两种,视频中介绍是差距不大,不过Progressive的烘焙速度会快一些。
  • Indirect Resolution:间接光照的精度,间接光即物体之间反射形成的光照。
  • Lightmap Resolution:一个单位烘多少个像素点,会影响灯光贴图的大小。例如默认40时贴图大小是8M,如果改成20,仅为2M.值越小,烘焙速度越快,但烘焙效果也会越低。
  • Lightingmap Padding:最终生成的uv信息图间距,一般不需要修改,只有在光照贴图的阴影部分出现问题时才需要进行调整。
  • Lightmap Size:光照贴图的大小,如果改成256,则Global Map中会出现多张光照贴图。
  • Ambient Occlusion:环境光遮蔽,开启时场景中的边角处会更贴近实际。
  • Find Gather:即物体之间的光线影响。靠近红色墙壁的白球会显示出一部分红色,使场景更加真实,一般在场景制作完毕后勾选。
  • Indirect Intensity:间接光强度
  • Albedo Boost:控制光线对物体材质的影响,一般要与物体的Material结合使用。
ps:在物体的Inspector面板之中的Lightmap Setting之中,我们可以修改Scale in Lighting的值,范围是0~1之间,值越小,对于这个物体的烘焙速度也越快,相对应地,会减小烘焙的效果。

猜你喜欢

转载自blog.csdn.net/s1314_jhc/article/details/80619312