Unity--复杂光照渲染

时间:2024-04-04 14:09:10

前向渲染路径

使用深度缓冲区判断一个片元是否可见,如果可见,就更新颜色缓冲区中的颜色值。
Unity中的前向渲染:Base Pass + Additional Pass。Base Pass只调用一次,Additional Pass根据影响该物体的光源数调用多次。

顶点照明渲染路径

前向渲染路径的子集。所有可以在顶点照明中实现的,前向渲染都可以实现。

延迟渲染路径

使用G-buffer存储我们所关心的表面信息。
两个Pass组成,一个Pass如果深度缓冲区可见,则在G-buffer中存储表面信息。在另一个Pass中间进行光照计算。
如果游戏中使用了大量的光照,应该使用延迟渲染。

Unity--复杂光照渲染

Shadow Map

把摄像机的位置与光源重合,摄像机看不到的位置就是需要显示阴影的区域。
Unity使用LightMode为ShadowCaster的Pass单独计算shadow map,输出阴影映射纹理。如果没有ShadowCaster的Pass,无法接收其他物体的阴影。
Unity使用屏幕控件的阴影映射技术:

  1. 调用LightMode=ShadowCaster的Pass来得到可投射阴影的【光源的阴影映射纹理】和【摄像机的深度纹理】。
  2. 如果摄像机记录的深度大于转换到光源的阴影映射深度,说明该表面是【可见但有阴影】的。

Inspector面板:
Cast Shadows: 加入shadowmap计算
Receive Shadows: 接收来自其他物体的阴影

###阴影三剑客
SHADOW_COORDS 阴影纹理坐标变量
TRANSFER_SHADOW 把坐标从模型空间变换到光源空间后存储到SHADOW_COORDS
SHADOW_ATTENUATION 负责使用SHADOW_COORDS对相关的纹理进行采样,得到阴影信息。