Unity 动态合批---Dynamic batch

最近研究自身项目发现,场景中DrawCall出奇的高,结果发现项目中的草模型Unity自动进行了批处理,而花模型却没能批处理。也就是一个花,就增加了一个Drawcall.于是有了下面对DC的研究。先附上能动态合批的条件:

1.动态批处理仅支持顶点数小于900的网格物体。
2.如果Shader使用了顶点位置、法线、UV值三种属性,则只能动态批处理300个顶点以下的物体。如果Shader使用了顶点位置、法线、UV0、UV1 和切向量,那么只能动态批处理180个顶点以下的物体。
3.不要使用缩放,分别有缩放(1,1,1)和(2,2,2)的两个物体将不会进行批处理。
4.统一缩放的物体不会与非统一缩放的物体进行批处理。
5.使用缩放比例(1,1,1)和(1,2,1)的两个物体将不会进行批处理,但使用缩放尺度(1,2,1)和(1,3,1)的两个物体可以进行批处理。
6.使用不同材质的实例化物体将会导致批处理失败。
7.拥有lightmap的物体不会进行批处理,除非他们指向lightmap的同一部分。
8.多通道的Shader会妨碍批处理。因为几乎Unity中所有的着色器都在前向渲染中支持多个光源,并为其有效开辟多个通道。
9.预制体的实例化会自动使用相同的网格模型和材质

而我项目中花模型之所以没能合批处理,是因为使用了UV,且顶点数大于了300.这里uv2就忽略吧,可能是美术的原因,不需要uv2的。

那解决的办法,就是把这个600左右顶点的模型,拆分成两个顶点数小于300的模型,然后把它做成一个和原来一样的Prefab去使用。当然这里拆分模型就需要美术在3DMAX里去做一下处理,保证拆分成的单个模型可以做到批处理。拆分后的图如下:

 

这样就可以把花做动态合批了。看效果:

但这样做适用于比较大规模量化的模型,比如花草之类的。如果只是少数几个,应该来说是得不偿失。数据如下:

在未拆分前,每添加一个模型,添加了两个Batches。(本身虽然是一个模型,但)

拆分之后,每添加一个,Saved by batching增加了四个。Batches不变。

通过这种方式成功将DC从原来的100多降低到了60.但可悲的是,发现项目影响帧率的因素并不在这里。而是阴影。。。。后续继续做进一步分析。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值