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

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如下。

mark!!!

hula. good work!

战略MARK啊

不知作者还能不能看到.
根据教程修改了一下, 为了灰度显示. 原来的灰度显示图片是无法合批的.
最后是成功了. 但是在浏览器运行时打开cocos的fps信息. 会显示drawcall在抖动.
比如原ui需要灰度和正常的混合显示. drawcall 100. 使用了你的办法修改后应该是整个合批 ui界面还剩20.
此时运行时的状态是一秒钟drawcall就先20后100 差不多1秒内一次 反复抖动.
这问题应该怎么解决?
creator版本2.4.6

先mark一下 这个这么重要的功能不知道官方什么时候能提供呢

你好,Creator3.7 的自定义顶点格式,应该怎么操作呢

MarkMarkMark

牛逼,V587!