目前正在使用cocos creator 3.8.6. 做了一个草地使用了大量的quad,大约500多个。开启了GPU Instance。但是大规模操控和生成都需要instance,这样效率有点低。想问有类似Unity的DrawMeshInstance的命令吗?可以不需要node,直接画出大量的instance。并且可以批量修改。
可以参考这个帖子的方法
谢谢!我学习一下!
之前做过一个打砖块游戏就和你这个情况很像。
格子有上万个,如果使用节点去绘制,直接爆炸。
特殊做法是直接去改写纹理数据,直接去操作Texture中的data即可,这样看似有上万个节点的场景,其实只需要一个用于绘制的精灵
请问是一个开始就生成了大量面片,然后每个面片读取texture的data吗?
操控texture中的data使用的是shader?如果直接修改texture会不会也会很耗性能?
我现在不太清楚怎么直接添加pass。之前有大佬分享director.root.pipeline as RenderPipeline;用 pipeline.on(), 但是我写发现网页运行,WebPipeline没有这个函数……
谢谢大佬

可以这么说,相当于你人工去操作了渲染器,只有纹理发生变化的时候才会去改写纹理的数据,平时就不会去动。cocos只需要渲染你绘制的这张纹理就行了,而不需要每一帧都会对所有节点进行渲染了。
直接改写texture性能反而会更好,因为是直接操作内存。只是通常来说,这个操作都会比较容易出错,所以一般只会对一些图图像简单相对简单,但节点很多的场景去这么用(比如我所说的,弹球打砖块)
具体使用应该是Texture的一个叫drawTextureAt的方法
哇,这个想法太秀了!我脑子里webgl没法用compute shader。这个方法做草地,我想一下,得把草地想办法做到texture里面,然后运行的时候读取特定区域地顶点。倒是没有打算做动画,但是需要做大量的面片。
想了一下,应该可以划分chunk,每块区域有自己的texture。不过写起来应该挺复杂的。
不好意思,本职工作最近爆炸,才回复。
哇,这个想法太秀了!我脑子里webgl没法用compute shader。这个方法做草地,我想一下,得把草地想办法做到texture里面,然后运行的时候读取特定区域地顶点。想起来有电脑。倒是没有打算做动画,大师需要做大量的面片。
想了一下,应该可以划分chunk,每块区域有自己的texture。不过写起来应该挺复杂的。
不好意思,本职工作卷生卷死,才回复。
哎,不做牛马又不知道能干什么。
这个接口是cocos2d的吗?cocos creator好像没找到
是creator的,但Texture可能没有在creator.d.ts里声明。查一下源码就可以看到了