【分享】自定义渲染合批之自定义顶点格式(附 Demo 和引擎源码解读)

mark!!

mark!!

遇到个手机端web的渲染时间问题,切换到后台再回来 ,游戏内的逻辑时间与渲染时间不一致了,我尝试用时间补偿机制也不行,在电脑端就能正常补偿时间[苦涩]

把cc_time替换为你自己的变量,每帧更新,和业务逻辑保持时间同步

我也用的自定义渲染,传的顶点着色器属性数据批量做shader效果,里面的一个效果是要用cc_time.x 所以要再顶点传入一个开始时间来做,电脑端传入时间和切换暂停恢复能补偿中间缺失的时间,手机web端就无法补时间,只有切后台暂停恢复时有这个问题,我使用逻辑时间和渲染时间做的差值,这个情况怎么能把时间正常补时呢?

如果每帧传时间就会打断合批,我shader里在顶点传不同的数据就会渲染不同的效果

可以确认下cc_time具体是怎么算的
https://github.com/search?q=repo%3Acocos%2Fcocos-engine%20cc_time&type=code

如果多端效果不一致,可以不用cc_time,自己在材质里加一个uniform变量作为准确的时间。

那在顶点传入固定时间的话shader运行时按照时间累计去变化这个效果要怎么实现呢?哪个变量是固定累加的呢

你可以在顶点属性里传入特效开始时间t0,再每帧更新材质的一个uniform变量表示当前时间t,shader里用t-t0就是特效经过的时间了。只不过之前t是用cc_time.x,现在用你自己定义的时间,这样来绕过平台不一致问题。

如果每帧执行setProperty去改时间的话就会打断合批,所以我才用的这个自定义渲染合批通过顶点传数据的

没其他方法保证这个时间么,目前测得就是手机端web有这个问题,不切换后台回来就没事

我理解你应该共享材质才能合批,在这个基础上给共享材质设置uniform不会断合批。

图片一样,材质一样,不一样的是在顶点传入不同类型,渲染的形状不一样,再设置uniform的话就会断合批了

确实不会打断合批了,感谢大佬:pray:

好像还是不行,只要传入的时间不一致合批就会断了。。:open_mouth::dash:

为什么时间会不一致,这个是全局的时间。另外材质用的同一个共享材质还是复制了几份?材质属性都一样用同一个就好了。

显示这个shader效果不是同一时间一起显示的,这样,传入的时间就会导致无法合批了,数量一多dc也就上去了