Unity技术之Unity中的阴影疑难解答
本页列出了常见阴影问题的解决方案,以下将针对不同的阴影问题进行详细分析并给出解决办法。
完全没看到阴影!
版本因素
阴影是Unity专业版的独有功能,非Unity专业版默认不带阴影。不过,仍可使用一些简单的阴影方法,例如使用投影仪(Projector)来模拟阴影效果。
硬件支持
阴影效果的实现需要一定的图形硬件支持。若要了解详细的硬件要求信息,请参阅阴影页面。
设置检查
检查阴影是否在质量设置(Quality Settings)中被完全禁用。若该选项被禁用,场景中将不会显示阴影。
某些对象不投射或接收阴影
对象渲染器属性
渲染器(Renderer)自身具有两个重要的阴影属性,分别是接收阴影(Receive Shadows)和投射阴影(Cast Shadows),这两项属性默认均为开启状态。若发现某些对象不投射或接收阴影,可检查这两个属性是否被意外关闭。
着色器类型
- 不透明对象:只有不透明的对象才能投射和接收阴影。如果使用内置的透明(Transparent)或粒子(Particle)着色器,对象将不会产生阴影。在大部分情况下,对于栅栏、植物等对象,使用透明抠图(Transparent Cutout)着色器是可行的,它可以让对象在保持一定透明效果的同时投射和接收阴影。
- 自定义着色器:如果使用自定义编写的着色器(Shaders),则必须满足像素光照条件,并使用几何渲染队列(Geometry render queue)。使用顶点光照(VertexLit)着色器的对象无法接收阴影,但可以投射阴影。
渲染路径
在正向渲染路径(Forward rendering path)中,只有最亮的方向灯可投射阴影。如果想要场景中有多个灯光投射阴影,必须使用延迟光照(Deferred Lighting)渲染路径。