1. 延迟渲染路径处理光照的方式
延迟渲染路径对光照的数量没有任何限制,并且所有灯光都可以采用逐像素渲染。理论上来说,即
使场景中有成百上千个实时灯光,依然可以保持比较流畅的渲染帧率。
它支持法线纹理、阴影等等效果的处理;但是它不能处理半透明物体,并且不支持真正的抗锯齿。
这些会自动使用前向渲染路径。
延迟渲染的效率不依赖于场景的复杂度,而是和我们使用的屏幕空间的大小有关。
这是因为延迟渲染路径中除了使用颜色缓冲和深度缓冲外,还会利用一个叫做G缓存的额外缓存区
它会存储我们关心的表面(通常是离摄像机最近的表面)的其他信息,比如表面的法线、位置、材
质属性等等。总之我们需要的信息都存储到缓冲区中,而这些缓冲区可以理解为一张张的2D图片,
我们实际上是在这些图像空间中进行处理的。
2. 延迟渲染路径在哪里进行光照计算
要进行光照计算,那肯定是在Shader当中的Pass渲染通道中进行计算。
延迟渲染路径中主要包含两个Pass:
第一个Pass(对于每个物体,该Pass只会执行一次,通常无需我们自己实现)
主要判断哪些片元可见,并且将可见片元的相关信息存储到G缓冲区中
比如:表面法线、视角方向、漫反射系数等等数据
第二个Pass
利用G缓冲区中各个片元的相关信息进行真正的相关计算,最终将颜色写入颜色缓冲区
3. 延迟渲染路径的内置光照变量
常用内置光照变量
Unity会自动填充自定义变量 sampler2D _CameraGBufferTexture0~4 ,其中存储的就是G缓冲区中的数据,可以通过他们获取数据来进行逻辑处理