Unity灯光与渲染

Unity灯光类型

平行光源

在这里插入图片描述
可以理解为太阳光,位置在哪都一样,可以通过调整角度修改光源的方向。

点光源

在这里插入图片描述
从一个点像周围发出光,可以通过Range的值更改范围,可以用来放在灯泡上。

Spot Light

可以理解为锥形光源,可以用在台灯的环境下。
在这里插入图片描述

Area Light

范围光,只能在Bake模式(后续会讲)下用。
在这里插入图片描述
可以提前将光照效果烘焙好,给物体增加一层贴图,实际运行时减少性能消耗。

光照模式

实时全局光照模式

在这里插入图片描述
选中任意光源,模式选为Realtime。
LightSetting编辑面板也选上。
在这里插入图片描述
这是最逼真也是最消耗性能的一种模式,但是通常不用。
在这里插入图片描述
性能消耗太大,基本上运行不起来。

Baked 模式

竟然全局实时渲染模式不能用,那么我们又想要良好的画面效果,此时应该怎么办呢?
此时就可以用Baked模式,将需要预渲染的物体改为静态。
然后光源与LightingSetting都设置为Baked即可。
那么此时问题又来了,如果有动态物体那怎么办呢?
此时我们可用mixed模式。

Mied 模式

即,混合模式,既有提前预渲染静态物体的贴图,也能对动态物体进行实时光照。
有三种模式

Subtractive

最不消耗性能也是效果最差的模式,场景中只支持单光源。一般不用。

Shadowmask

可以支持多光源,但是不支持与静态物体的交互。
例如有一堵墙,人物在墙后身上应该有阴影,但是在此模式下不会有,因为阴影只是贴图,如果想需要真实效果,此时就需要用到。
在这里插入图片描述
projectsetting面板下Quality中的Shadowmask Mode,将模式改为Distance Shadowmask 。
修改shadow distance参数。在这里插入图片描述
这个参数表示观察到的距离,在这个距离范围内就会正常的与静态物体的阴影交互,超出则不渲染。

Baked Indirect

混合模式下表现最好的模式,性能消耗也最高,如果在shadowmask下无法达到想到的效果可以采用这个模式。

灯光探针

在这里插入图片描述

上面说道,在Distance shadowmask情况下可以实现在静态物体贴图下实现阴影,如下图。
在这里插入图片描述
这个墙是静态的,阴影只是贴图,但是还是可以产生实际效果。原因就是因为用了灯光探针。
在实际运行场景中查看。
在这里插入图片描述
我们发现,任何时刻都会有四个灯光探针渲染着物体,其中有一个是在泰阳光下,其他几个在阴影下,就形成了当前的效果。
即想实现最好的阴影效果,就应该在阴影交界处添加上灯光探针。
在这里插入图片描述
这种操作起来较为麻烦,但是性能上来说要比distance shadowmask好。

反射探针

在这里插入图片描述
正常情况下,物体的材质反射一般是反射skybox,如果希望物体反射周围的物体,此时就需要用到反射探针。
给需要反射的物体添加上反射探针,然后生成贴图。
在这里插入图片描述
此时发现物体可以正常反射周围的物体。

优化

上面讲了那么多内容,说白了都是希望降低性能的消耗,达到优化的效果。
除了以上的优化方法,还有以下几种:

动态批处理

如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。
动态批处理操作是自动完成的,并不需要你进行额外的操作。
批处理动态物体需要在每个顶点上进行一定的开销,所以动态批处理仅支持小于900顶点的网格物体。

静态批处理

相对而言,静态批处理操作允许引擎对任意大小的几何物体进行批处理操作来降低绘制调用(只要这些物体不移动,并且拥有相同的材质)。因此,静态批处理比动态批处理更加有效,你应该尽量使用它,因为它需要更少的CPU开销。
为了更好地使用静态批处理,你需要明确指出哪些物体是静止的,并且在游戏中永远不会移动、旋转和缩放。想完成这一步,你只需要在检测器(Inspector)中将Static复选框打勾即可

猜你喜欢

转载自blog.csdn.net/qq_40629631/article/details/111189317