Unity 前向渲染与延迟渲染

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里)
  • 可想而知《原神》的延迟渲染绝对被改的面目全非了,不然根本不能用啊🤣

基本就这么多了,知道的还是很浅,但是算是比以前有进步了吧,嘿嘿~~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值