版本记录
| 日期 | 版本 | 说明 | 作者 |
|---|---|---|---|
| 2020-1-2 | 0.1 | 文档初始版本 | 李俊 |
- 加速场景加载,减少loading时间
- 提升场景渲染效率
概念
- 动态合批
- 接口
public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes, bool useMatrices); - 核心代码
- 接口
)
{
();
;
;
;
;
++;
)
{
;
}
);
)
{
;
}
}
();
);
;
- 静态合批
- 接口
static public void Combine (UnityEngine.GameObject staticBatchRoot, bool combineOnlyStatic) - 静态合批源代码 CombineForStaticBatching.cs MeshSubsetCombineUtility.cs
- 核心代码
- 接口
)
{
);
>();
)
{
>();
>();
);
++)
{
;
)
{
>();
>();
)
);
}
}
);
}
else
);
}
原理
- 把场景节点分成必需部分和分块
- 必需部分加载完成,即认为场景加载完成
- 必需部分保存成1个prefab,每个块保存成prefab
- 加载场景时,低优先级加载块prefab,只加载不卸载
制作细节
- _min 表示该节点下不再拆分,即所有子节点只会在同一个块prefab下
- 默认都是可以分块的,必需部分需要在always节点下
合批方案
-
无
完全依赖运行时instance合批,- 缺点:
- 默认instance合批,不支持lightmap, 需要额外开发instance合批,并且需要大量修改配套的shader
- 相同材质,不同模型的,无法合批
- 优点:
- 不需要生成额外的模型资源,加载友好
- 跨块的也可以提升性能
- 缺点:
-
动态合批
bake时,把所有材质球一样的模型合并- 缺点:
- 需要重新烘焙,耗时比较长
- 生成新的模型资源,加载不友好
- 烘焙效果可能和原来有差异,因为烘焙参数
- 跨块无法合批
- 优点
- 效率最优
- 可以处理不同模型,相同材质
- 兼容性好
- 开发量相对instance方式小很多
- 缺点:
-
静态合批
bake时,把每个块内静态合批,必需部分静态合批- 缺点:
- 需要生成大的mesh,对加载最不友好
- 无法处理跨块的合批
- 多场景模式下,会有额外的问题
- 优点:
- 不需要重新烘焙
- 可以处理不同模型,相同材质
- 开发量相对instance小很多
- 缺点: