性能优化——合批原理

合批类型: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:集合信息不同   

     

 

上一篇:下一代微服务架构Service Mesh


下一篇:落地三年,两次架构升级,网易的Service Mesh实践之路