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,且与场景复杂度无关,即只要该光源影响到屏幕结果就会产生一个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

时间: 2024-10-17 01:24:20

Unity RenderPath与Drawcall的相关文章

如何降低Unity程序的Drawcall

[如何降低Unity程序的Drawcall] Unity can combine a number of objects at runtime and draws them together with a single draw call. This operation is called “batching” 每帧能够有多少batch依赖于cpu.每个drawcall提交多少个三角形,对cpu压力变化不大,但是每帧有多少个drawcall则影响很明显. 一.Dynamic Batching.

Unity性能优化-DrawCall

1. DrawCall是啥?其实就是对底层图形程序(比如:OpenGL ES)接口的调用,以在屏幕上画出东西.所以,是谁去调用这些接口呢?CPU.比如有上千个物体,每一个的渲染都需要去调用一次底层接口,而每一次的调用CPU都需要做很多工作,那么CPU必然不堪重负.但是对于GPU来说,图形处理的工作量是一样的.所以对DrawCall的优化,主要就是为了尽量解放CPU在调用图形接口上的开销.所以针对drawcall我们主要的思路就是每个物体尽量减少渲染次数,多个物体最好一起渲染. 2. 优化方式 (

unity panel删除drawcall失败导致的残留影像

ngui panel 被隐藏或者删除的时候调用ondisable,清空drawcall,如果这个操作是在ontriggerenter等物理操作中就会删除不掉导致留下残影 解决方式 : 讲这些操转移到协程中处理,比如这样 void OnTriggerEnter(Collider other) { // Destroy(gameObject); StartCoroutine(Dest()); } IEnumerator Dest() { yield return new WaitForSeconds

【Unity NGUI游戏开发之四】NGUI的DrawCall数量

看了很多关于NGUI drawCall的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall. 但其实NGUI内部有自己的一套对DrawCall的处理规则.相关的规则有: 1.Atlas图集数量有关 2.Atlas图集的调用顺序(绘制顺序)有关 3.和UIPanel的数量有关 一.减少NGUI 3的DrawCall数量 升级到NGUI3, DrawCall数由5个增长到了十七八个,想想应该不会是NGUI的问题吧.后来整理了一下,发现有两点: 1)对于同一Atlas,DrawC

NGUI DrawCall

Unity中的drawcall定义:每次引擎准备数据并通知GPU的过程称为一次Draw Call.引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),(顶点如何组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API——或者就简单地看作是通知GPU——开始绘制,GPU基于这些数据,经过一系列运算,在屏幕上画出成千上万的三角形,最终构成一幅图像.

NGUI 减少drawcall

前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置.法线.UV等),(顶点如何组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API--或者就简单地看作是通知GPU-

NGUI 降低drawcall

前置说明一: Unity中的drawcall定义: 每次引擎准备数据并通知GPU的过程称为一次Draw Call. Unity(或者说基本全部图形引擎)生成一帧画面的处理过程大致能够这样简化描写叙述:引擎首先经过简单的可见性測试.确定摄像机能够看到的物体,然后把这些物体的顶点(包含本地位置.法线.UV等),(顶点怎样组成三角形),变换(就是物体的位置.旋转.缩放.以及摄像机位置等).相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API--或者就简单地看作是通知GP

【Unity3D游戏开发】NGUI之DrawCall数量 (四)

看了非常多关于NGUI drawCall的文章.见得比較多的一个观点是:一个 Atlas 相应一个Drawcall. 但事实上NGUI内部有自己的一套对DrawCall的处理规则. 相关的规则有: 1.Atlas图集数量有关 2.Atlas图集的调用顺序(绘制顺序)有关 3.和UIPanel的数量有关 一.降低NGUI 3的DrawCall数量 升级到NGUI3. DrawCall数由5个增长到了十七八个.想想应该不会是NGUI的问题吧.后来整理了一下.发现有两点: 1)对于同一Atlas.Dr

[Unity优化] Unity CPU性能优化 (难度3 推荐4)

原文地址: http://www.cnblogs.com/chwen/p/4396515.html 前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件因素,以及网络等条件限制,对移动游戏开发的优化带来更大的挑战. 这里就以unity4.5x版本为例,对Unity的优化方案做一个总结,有些是项目遇到的,也有些是看到别人写的不错拿来分享,算作一个整理,