https://docs.unity3d.com/cn/current/Manual/RenderTech-ForwardRendering.html
前向渲染 Forward Render Path
只要在摄像机设置下就可以了
由于我设置了9盏灯光,而Unity buildin只支持4盏,所以显示的灯光是错误的
由上图可见 Unity前向渲染的顺序是
- 深度图
- 不透明物体
- 天空盒
- 透明物体
- 后效
先做深度图,我猜是为了做深度剔除,深度测试,避免重复绘制,然后在renderloop里对每个物体进行光照法线计算
延迟渲染 Deferred Render Path
-
把看到的物体渲染成屏幕上的几张张图像,放在G-buffer里
-
然后一张一张的合成
延迟渲染原则上支持海量灯光,所以多余4盏也没事儿
顺序基本和前向渲染一样,这里是renderloop是遍历各个光照,去计算光照 -
不透明物体
- GBuffer (只是绘制一次物体)
- 深度
- 反射
- 光照 (全部绘制到Gbuffer)
- 大shader统一计算 (Hidden/Internal-DeferredShading)
-
天空盒
-
透明物体
-
后效
貌似延迟渲染最后只能写一个shader
然后shader比forward要简单多了,就两个Pass
如果我们在deferred render模式下,使用了fwdbase shader的话,那么,还是会单独对这个物体进行前向渲染,当然这种做法是不对的,但是我做了个实验验证了下
总结
- Unity的内置渲染管线 延迟渲染和前向渲染 大的渲染顺序是一样的,不透明-天空-透明
- shadowmap绘制顺序不一样,forward是在渲染物体之前,deferred是在渲染物体和光照之后
- 明显看出forward是逐物体*光照,deferred是逐光照 (都在renderloop里)
- 可想而知《原神》的延迟渲染绝对被改的面目全非了,不然根本不能用啊🤣
基本就这么多了,知道的还是很浅,但是算是比以前有进步了吧,嘿嘿~~