1.1什么是BatchRendering
问题:
渲染时性能的瓶颈主要在提交渲染数据(Mesh),每次提交Mesh数据时还需要对描画State的状态进行一次设置,设置每次都会消耗大量的CPU时间.
对策:
减少提交次数。把具有相同State状态的数据合并到一起,一次性提交描画的Mesh的数据给GPU
1.1.1 合批的类型
StaticBatch 静态合批
DynamicBatch 动态合批
InstancingBatch
SRP Batch
1.2 优势
将需要描画的Mesh的数据一次性提交给GPU
减少DrawCall。DrawCall:一次完整的对描画的Content上下文的State的设置及其对Draw指令的调用。
1.3 合批发挥作用的阶段
渲染管线:
ShadowMapJob-渲染阴影
RenderLoop-显示物体
静态合批的工作流
在GameObject上面勾选Static。然后在BuildTarget时会对Mesh进行Combine的操作(MakeBatch)。合并成一个总的Mesh。每个单的Mesh为SubMesh。
运行时Load Mesh数据时调用AwakeFromLoadThreaded,读取完毕之后调用AsyncVertexDataReadCompleteCallBack的回调执行ProcessRawVertexJOB进行一些数据的初始化包括分配VertexBuff等buff。动态合批和静态合批都是对buff上面的数据进行合并。之后调用AsyncVertexDataProcessingCompleteCallBack进行对Mesh数据对象的初始化(引擎层逻辑).