Unity RenderPath与Drawcall

考察render path与drawcall的关系,每个camera可以单独设置render path。以计算光照,不考虑batching,且只有一个PASS的材质为样本,比如Diffuse;如果材质不受光照影响,则跳过光照相关的PASS,比如Unlit/Texture。

1.Forward Path.

最亮的directional light(自动成为pixel light)与其他的非pixel light一起被forward base PASS一次性绘制。其余的important light(强制PIXEL LIGHT),每个都会产生一次forward add PASS的drawcall,且是该光源影响的物体个数每个产生一次drawcall;如果不足3个(可设置)important light则按亮度选出前3个执行forward add PASS。当PIXEL LIGHT与物体较多的场合,会产生迅猛的drawcall增长。假设所有IMPORTANT光源影响所有物体,那么多出的drawcall=光源数*物体数。自写的shader会依据是否使用光照和pass个数对drawcall产生影响。pixel light才能对normal map specular map等基于纹理图像的效果产生作用,光源多场景复杂的情况下,需要考虑deferred path。

2.Deferred Path.

Deferred Path在UNITY中没有实现透明物体渲染和全屏抗锯齿功能(MSAA),透明物体渲染会在非透明物体完成deferred的final pass后使用forward path来渲染。所有的光源全为pixel light(默认只提供blinn-phone),一个光源产生一个drawcall(2个,如果有lightmap),且与场景复杂度无关,即只要该光源影响到屏幕结果就会产生一个drawcall,drawcall=光源数(*2,如果有lightmap)+物体数*2+1。其中2为base pass的NORMAL+SPECULAR 和 depth,depth pass是否单独执行与显卡和设置的环境有关,每个光源执行light pass,最后一个全屏的final pass得到最终结果。

换句话说,forward把几何与光照放在一个PASS里执行了,而deferred对几何信息与光照分别执行,产生了解耦的作用。

3.Vertex Lit Path.

一个物体一个drawcall。

4.Shadow.

待续。

转载于:https://www.cnblogs.com/nihil/p/3926684.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值