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


这种效果,一直想不通是怎样做。背景的通道是一张张图拼的动画效果。左右两边的墙和地面要上另外的图片,但在creator上图片不能搞到梯形

感谢GT分享

感谢楼主
正好碰到类似的问题

最近陆续看到有人问关于粒子系统合批的问题,感觉还是有需求。
Demo工程里新增了粒子系统的合批实现。

目前引擎的实现是每个粒子系统保存自己的粒子属性,有自己的InputAssembler (IA),在渲染时直接提交自己IA里的数据。
Demo的做法是将IA里的数据拷贝到公共buffer里统一提交。

能够合批的前提

  1. 粒子系统之间不穿插其他的渲染组件,如果粒子系统挂在其他节点下面,需要考虑给粒子单独分层
  2. 粒子系统使用相同的纹理、PositionType、Blend Mode

注意事项

  1. 该实现增加了IA数据拷贝次数
  2. 粒子系统合批需要将多个粒子系统的数据集中存放,一起提交,所以会增加内存峰值

综上,对于粒子数量比较多的场合,是否合批需要权宜考虑。

3赞

战术性插眼

看了大佬的注释,上手容易多了

Mark very much!

终于看完了,怎么说呢。简单来说就是大佬nb!!!

用宏定义的方式也可以?是不是可以少重写或者修改一些类?

https://gitee.com/nomat/lcc-render#2如何传递数据到shader中

看起来还是要通过楼主的步骤。宏只是多了个开关

mark mark

大牛,小弟想不透,为啥demo 里要把顶点的color数据去掉? 能不能在保留同时额外加其他自定义参数?

可以保留,只不过演示的shader里用不到color数据。

我保留了color 后,但整个变黑图了, 我把floatsPerVert = 9 , 前五个跟原来设置一样,但后面4个就是a_q 和a_p

可能是偏移量算错或者属性写入顺序和格式声明顺序对不上。

粒子合批在模拟器中无效吗?我版本是2.4.4或2.4.5

不好意思没实现:)
ts层没法解决模拟器/native的粒子合批问题

大佬有办法解决native下的粒子合批问题吗?

native渲染流没研究过:)

GT大佬,冒昧问个问题,assembler和meshRenderer都可以自定义顶点,那相比之下用assembler比meshRenderer有什么优势或者好处吗