ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

性能优化——合批原理

2021-05-18 21:31:49  阅读:525  来源: 互联网

标签:index 合批 -- 探针 Mesh 原理 材质 优化


合批类型:StaticBatch 静态合批      DynamicBatch 动态合批   InstancingBatch   SRP Batch

DrawCall就是对完整描画的上下文的state的设置及其对Draw指令的调用

Unity渲染管线分为两个大的阶段:ShadowMapJob渲染阴影         RenderLoopJob正常描画

静态合批工作流:

1.勾选static选项,在BuildTarget时预先对Mesh进行Combine     对网格进行合并,合并成一个大的网格 MakeBatch

2.描画时向GPU提交Combine Mesh   

           AwakeFromLoadThreaded

          AsyncVertexDataReadCompleteCallBack-ProcessRawVertexJob

          AsyncVertexDataProcessingCompleteCallBack

3.Mesh数据一旦上传到GPU后,立即释放:ReleaseUploadInstruction

排序因素的顺序  Render Data的排序

 -- Global Sort Layers

 -- Render queue index 材质上面的渲染队列

 -- Renderer priority  代码设置

 -- Distance  从后向前排序

 -- Sort Order  每个render都有这个属性

 -- Material index  分配的ID,用途这俩个材质是不是同一个材质

 -- 静态合批对象  :1.Material Sortkey    2.Geometry key  submesh的数量值,按0-n顺序画    先判断是不是同一个材质,同一个材质合并在一起,再判断是不是同一个mesh,同一个mesh  排序

 -- LightMap   根据lightMap的index大小进行排序

合批过程:

1.从queue中先获取第一个node

2.和队列中剩余的node依次进行比较处理

3.知道找到第一个不能和进行合批的node

4.提交Mesh数据给GPU,进行一次合批描画

5.更新循环index为找到的该node点

6.以此新的index作为起点开始下一次循环迭代的查找

 

Shadow Batch Failed :StartOfShadowCascade  不同的阴影设置    投射物体使用的shader或属性或变体不同    OddNegativeScaling  和非OddNegativeScaling 不会合批

ForwardRenderLoopJob:(不合批原因)

         1.被不同光照探针影响不合批,光照探针在烘焙的时候会烘焙球谐系数到光照探针设置数据里,不同光照探针势必会造成数据不同所以不合批

         2.多个光源,Base光源和Add光源

         3.不同材质或者同一材质不同属性

         4.MutilPassShader  未合批,shader有多个pass

         5.OddNegativeScaling 

         6.DifferentShadowReceiving  不同的阴影设置选项

         7.Lightmapped

indices count 32K 一个批次 如果超过这个数量则拆到下一个批次

vertex count 65535 数量不能超过

如果对象大于4000个但是每个都很小,满足indices count<32 并且vertex count<65535 但是引擎内部会分两个批次

动态合批限制: render不要太小,太小太多引擎会打断合批   

vertex number :300     针对submesh而言

vertex arrbutes number:900   针对submesh而言

renderer number: 88 最大88个Render

动态合批的时候还需要判定的是送动态合批处理顶点的数据是否兼容引擎内部动态合批处理的程序:

     --通道信息的数据格式是否一致,并且数据连续: Vertex,Normal,Tangent

     -- Foat32 & (3,3,4)

     -- Colors,texture coords   数据大小必须能被4整除

     -- 位于Stream0

     -- 数据必须是连续的

Deferred Batch Failed:不同的反射探针不能合批

Instancing Batcher:集合信息不同   

     

 

标签:index,合批,--,探针,Mesh,原理,材质,优化
来源: https://blog.csdn.net/qq_43761888/article/details/116999119

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有