灯光阴影

一、渲染路径

Unity支持不同的渲染路径,不同的渲染路径在光照和阴影方面会有不同的特点。

1.延迟着色渲染路径

定义:将着色步骤推迟处理的渲染方式,是实现最逼真光影效果的渲染路径,但对硬件要求较高。

使用延迟着色时,灯光Pass基于G-Buffer和深度信息计算光照,因此计算量与场景复杂程度无关,可以减少性能浪费。

延迟着色不支持真正的抗锯齿,也不能处理半透明物体,这些会自动使用前向渲染处理。

延迟着色只能在有多重渲染目标、Shader Model3.0或以上,并且支持深度渲染贴图的显卡上运行。

2.前向渲染路径

前向渲染是传统的渲染路径,支持所有Unity的图形功能。

前向渲染路径渲染使用一个或者火哥Pass渲染每一个物体,取决于影响到物体的灯光。

一个灯光是逐像素光照还是其他方式渲染取决于这四点:

(1)渲染模式设置为Not Important的灯光总是以逐顶点或者SH的方式渲染。

(2)渲染模式设置为Important的灯光总是逐像素渲染。

(3)最亮的平行光总是逐像素渲染。

(4)如果逐像素光照的灯光数量少于项目质量设置中Pixel Light的数量,那么其余较亮的灯光会被逐像素渲染。

其中,SH(Spherical Harmonics,球谐)光照渲染,几乎不消耗CPU性能。

灯光的渲染模式可以在每个灯光的属性面板中进行设置:

Light设置

如果想要设置当前项目中逐像素灯光的限制数量,依次点击Edit->Project->Setting,左侧选择Quality,设置Pixel Light Count数量即可。

逐像素光数量

3.两种渲染路径的特性对比

前向渲染与延迟渲染的特性对比
特性 前向渲染 延迟渲染
功能 逐像素光照(法线贴图、灯光cookie) 支持 支持
实时阴影 需要满足某些条件 支持
反射探针 支持 支持
深度和发现缓存 需要添加额外的Pass 支持
软粒子 不支持 支持
半透明物体 支持 不支持
抗锯齿 支持 不支持
灯光剔除蒙版 支持 部分功能被限
光照的细节程度 部分灯光逐像素渲染 所有灯光逐像素渲染
性能 单个逐像素照明所耗性能 取决于像素数量乘以灯光照亮的物体数量 取决于照亮的像素数量
物体被正常渲染需要的次数 取决于逐像素光照的灯光数量 1次
对于简单场景的开销
平台支持 PC(Windows/Mac) 支持 Shader Model3.0以上
移动(IOS/Android) 支持 OpenGL ES3.0、MRT,Metal(A8或以上的设备)
Console 支持 XB1,PS4