LayaAir 2.0.2, 2.1.0自定义shader使用动态批处理

本文介绍了在LayaAir 2.0.2和2.1.0中如何解决自定义着色器与动态批处理的冲突问题。通过设置enableinstancing参数,调整顶点着色器,并处理WebGLContext._angleInstancedArrays,实现了自定义shader在微信环境下使用动态批处理。同时,文章提到了这一优化可能与粒子系统产生的冲突及其解决方案。
摘要由CSDN通过智能技术生成

许多3D引擎都对动态批处理进行了较好的支持,使得使用相同材质的多个模型可以合并为同一个批次提交到 渲染,从而降低drawcall,充分利用GPU流水线,提升渲染效率。

垃圾box在2.0.0开始也尝试对此进行了支持,最开始的版本限制10顶点以内,2.0.2开始则移除了此限制,但不愧是垃圾box,2.0.2版本的动态合批与粒子系统产生了冲突,导致打包到微信的粒子位置修改无效,因此他们在2.1.0做了 反向优化,屏蔽掉了微信包的动态批处理,从而使得粒子能够正常使用,且与shader/批处理相关的一切优化,官方声明不在服务范围内(不充钱还想优化?)——不愧是你们啊。

回到文题,首先是自定义shader。一旦官方提供的基础材质达不到项目使用要求,就需要自定义材质和着色器。与此相关的部分在官网3d示例中有完整例子。

但完全拷贝这个自定义材质后就会发现,合并批处理并没有生效,但基础材质是可以合并的。检查源码后发现,需要在add函数中设置enableinstancing参数为true,才能使材质执行动态合批操作。

完成上述设置后,会发现原本能正常渲染的模型不见了,但统计数据显示savedRanderBatch计数有明显增加——合批生效了。

为什么模型不见了?原因在于使用批处理后,会提供一个GPU_INSTANCE的宏定义,使得着色器跳过重复计算,直接使用已经实例化过的材质的数据(目测指的就是第一个顶点),如果我们的自定义shader中并不使用这个宏,以及实例化后的数据,那么顶点的位置就无法计算了,自然也就渲染不出模型了。

因此需要在 自定义shader的顶点着色器脚本中加入

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值