# 3D动态合批
# 功能介绍
小游戏框架绘制场景的过程中,每有一个MeshRenderer,便会为其中每一个SubMesh生成一次DrawCall。在场景中物体过多的情况下,渲染开销会变得很大。
如果场景中有许多材质相同的小物体,可以考虑开启3D动态合批来加速渲染。
开启3D动态合批后,会消耗CPU性能,来减轻GPU负担,将材质相同的物体合成一个DrawCall。
# 使用限制与潜在使用场景
并不是任何场景下使用3D动态合批都能达到优化的效果。事实上,大部分情况下打开3D动态合批都只会产生负优化。
首先请确保场景中有许多物体使用了同一个材质,并且这些物体都是一些不太复杂的物体(顶点数很少)。
其次请确保这些物体并不都使用同一个模型,如果3D动态合批的物体都使用同一个模型,那么请使用GPU实例化来代替,会得到更好的性能。
最后,使用3D动态合批的最佳场景是,合批的物体都是动态物体,每帧可能会变更位置。如果合批的物体全都是静态物体,那么将场景物体进行**静态合批会获得更好的效果。由于小游戏框架现在尚未提供静态合批辅助工具,开发者可以选择使用3D动态合批来代替,或者寻找第三方静态合批工具。
# 使用方法
# 一、打开动态合批开关
在所有想要进行动态合批的MeshRenderer
组件上,勾选dynamicBatch
选项。
# 二、控制合批的物体的渲染顺序
需要手动确保3D合批的物体,是在一个批次渲染的,批次内不能有其他无法合批的物体插入。
场景内物体的渲染顺序是靠材质上的renderQueue
来控制的,相同renderQueue
的物体会放在一个批次绘制。所以想让3D合批的物体在一个批次渲染,需要手动修改他们的材质(应该都是同一个),把renderQueue
设置为不同于场景中任何其他物体的值。
# ▌多SubMesh的情况
就算MeshRenderer
上有多个SubMesh,也可以进行3D动态合批。只要确保使用不同的材质的SubMesh,具有不同的renderQueue
即可。
# 与GPU实例化的区别
GPU实例化要求模型相同,性能也高于3D动态合批。