Chapter9 更复杂的光照
渲染路径
- 前向渲染路径(Forward Rendering Path):默认
- 延迟渲染路径(Deferred Rendering Path)
- 顶点照明渲染路径(Vertex Lit Rendering Path):已被抛弃
前向渲染路径的原理
计算两个缓冲区:颜色缓冲区、深度缓冲区(是否可见?更新颜色值 : 抛弃)
如果场景中有N个物体,每个物体受到M个光源的影响,那么渲染整个场景一共需要N M*个Pass。
Unity的前向渲染路径有3种处理光照的方式:
- 逐顶点处理
- 逐像素处理:处理被设置成 Not Important 的光源
- 球谐函数(Spherical Harmonics)处理
一个Unity Shader通常会定义一个Base Pass(需要双面渲染可以定义多次)和一个Additional Pass。一个Base Pass仅会执行一次(定义多个除外),而一个Additional Pass会根据影响该物体的其他逐像素光源的数目被多次调用。即每个逐像素光源执行一次Additional Pass。
延迟渲染路径的原理
主要包含两个Pass:
- 第一个Pass:不进行任何光照计算,仅仅计算片元可见,把相关信息存储到G-buffer中。(漫反射颜色,高光反射颜色、平滑度、法线、自发光、深度信息)
- 第二个Pass:进行真正的光照计算。
延迟渲染的效率不依赖场景的复杂度,而是和我们使用的屏幕空间的大小有关。
(个人理解:前向渲染是从虚拟到现实,延迟渲染是从现实看虚拟)
缺点:
- 不支持抗锯齿功能
- 不能处理半透明物体