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

大牛,小弟想不透,为啥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有什么优势或者好处吗

今天仔细看了看meshRenderer,对于一般场景,我觉得assembler没有优势 :rofl:

- 自定义assembler meshRenderer
易用性 理解成本高,容易写错 通过setVertices()直接修改属性很直观
性能 直接组装顶点数据,性能较好 1. 外部组装顶点数据后传入mesh
外部需要分配空间,并且多一次复制
如果破坏封装性直接操作内部数组,可以和assembler持平
2. 功能较多,如果仅用来当做sprite+自定义attribute有点重
但是很难成为性能瓶颈,可以不管
其他 - 支持文件形式mesh

感谢大佬解惑

不支持原生

没事别定制,搞不好,要维护两套

大佬, 我把Scripts/Shader下的GTA2D系列挪到自己的2.4.5工程里, 拷贝了creatorInternal.d.ts文件到自己工程, 使用Avatar后 编辑器无法正常显示 报错 null : Failed to set property [texture], property not found.怎么处理

试试Texture目录的图和对应的meta文件一起拷贝过去

可以了, 是我这边Avatar.effect没有做设置的问题 谢谢

有一个很疑惑的问题,渲染一张图只需要四个顶点坐标uv等属性,以及六个三角形的顺序,那图片中间的颜色都是插值得来的吗?还是说图片每一个像素都会传入对应的属性值

是的,顶点着色器传递给片元着色器的属性,会被插值。
如果4个顶点的颜色不一样,在片元着色器里输出颜色可以看到渐变色。

那么插值出来的效果是如何跟我们用照片查看png的效果是一样的,这个有点疑惑

照片查看器显示的是图片(纹理)的颜色啊,跟顶点属性没关系。
默认的cc.Sprite shader如下。