延迟渲染管线

1.前情提要

unity在2021.2bate版本中添加了延迟渲染管线

将ForwardRenderer换成了UniversalRenderer

UniversalRenderer下可以切换是使用前向渲染还是延迟渲染。

2.延迟渲染新增内容

延迟渲染最主要就是添加了这两个pass

GBufferPass用来渲染多张纹理

DeferredPass用Gbuffer纹理绘制光影

如果是延迟渲染则进入延迟渲染的方法

如果是前向渲染就用DrawObjectsPass的方法绘制不透明物体

EnqueueDeferred方法中主要添加了四种pass

1.m_GBufferPass 渲染Gbuffer

2.m_GBufferCopyDepthPass 渲染深度图

3.m_DeferredPass 根据Gbuffer渲染光影

4.m_RenderOpaqueForwardOnlyPass 提供DrawObjectsPass方法可在延迟渲染不透明物体后用前向渲染shader中“”LightMode =” UniversalForwardOnly“的物体

"SRPDefaultUnlit"和"LightweightForward"

传统着色器(没有gbuffer过程)被视为仅向前兼容,以便向后兼容

3.GBufferPass

GBufferPass的运行流程大致分为三步

1.Deferred Light提供渲染目标给Pass

2.GBufferPass生成多张RT给shader赋值

3.shader渲染目标不再是一个half4的SV_Target,而是输出一个结构体里面多个Target

4.生成的Gbuffer纹理将作为临时纹理为后面的DeferredPass中渲染的Mesh中的shader所调用

4.DeferredPass

DeferredPass主要是负责设置渲染目标,而执行的pass写在了DeferredLights里面。

ExecuteDeferredPass的大致步骤

1.更新材质球的变量

2.渲染方向光

3.渲染点光源

4.渲染聚光灯

5.渲染雾

方向光的渲染方法

1.根据_gbuffer2纹理求得世界空间法线方向

2.使用深度信息得到世界空间位置

3.法线方向点乘光向得lembert,相机位置减去世界空间位置得视方向求高光

4.根据BRDF算法求光照信息