码迷,mamicode.com
首页 > 其他好文 > 详细

Unity RenderPath与Drawcall

时间:2014-08-21 13:04:24      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:使用   io   for   ar   cti   ad   on   sp   

考察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,且与场景复杂度无关,即只要该光源影响到屏幕结果就会产生一个drawcall,drawcall=光源数+物体数*2+1。其中2为base pass的NORMAL+SPECULAR 和 depth,depth pass是否单独执行与显卡和设置的环境有关,每个光源执行light pass,最后一个全屏的final pass得到最终结果。

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

3.Vertex Lit Path.

一个物体一个drawcall。

4.Shadow.

待续。

Unity RenderPath与Drawcall,布布扣,bubuko.com

Unity RenderPath与Drawcall

标签:使用   io   for   ar   cti   ad   on   sp   

原文地址:http://www.cnblogs.com/nihil/p/3926684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!