【关于cocos creator的渲染的提议】

举个最简单的例子,我用OpenGL自己写demo的时候,比如上图的层级, a,e,f是球,b,c,d,g是立方体。如果,按照场景树的层级提交绘制,岂不就打断了合批。

那这个排序开销呢?

所以问题在于,排序开销大,还是打断合批的代价大。。。

zIndex不就是干这个事的吗?

不是。zindex只是改变了父节点对于子节点们层级排序的依据,原理还是一样的。

问题在于·····
你可以自己去手动用图集,
这样,又能合批,又能省下排序~
你觉得怎么样?

如图

假设a,c,e属于图集1,
b,d,g属于图集2
f属于图集3;
如果按照传统的渲染提交模式,是不是合批全部断掉了。:grin:

无法实现的, 这样做之后, program无法灵活定制.
只希望官方能降低耦合度.

比如自己写一个programA, 比如自己100个物体用programA,渲染对象提交顺序恰当的话,还是可以合批的。

问题是2d引擎只有xy,没有z,层级关系都是靠渲染顺序决定了,如果你改了渲染顺序是可以达到完美的和批渲染效果,但是最后可能和预计的表现出入很大,节点与节点之间的层级就乱了。

其实排序的开销并不大,你可以自己维护一个渲染队列。

节点层级不会乱呀。:joy:

你看完这个帖子自然就会懂了

1赞

看了一下大神的帖子。不过我还是没有找到想要的答案。我再自己琢磨琢磨,然后再组织一下语言:laughing:

感觉你描述的不是很清晰。
你描述的东东似乎不能解决透明混合的情况吧

被你们说的我都不敢随意定制shader了. 我很多情况下, 能用sprite解决的问题, 往往刻意用shader…

开启深度检测来让 GPU 帮助我们剔除不需要的面片确实是一个很好的思路,然而它的限制就像上面的回复说的,无法解决半透明混合问题。深度检测是面片级的,GPU 的深度检测只能决定在渲染的时候剔除被前景遮住的像素,它并不能告诉你前景像素是透明的、半透明的还是不透明的,只会简单粗暴得剔除像素,让其不进入后续的 fragment shader 着色。所以在常规的 2D UI 渲染过程中或者在 3D 半透明渲染流程中,都需要将被渲染物体按照从后向前的顺序排序后逐个渲染,这样前后物体之间的半透明混合才是正常的

可以先渲染不透明物体,然后对透明物体排序。

透明混合的问题是可以解决的

实际上 2D UI 贴图基本都是带半透明或者透明像素的,所以额外去剥离那可以被深度检测剔除的节点,增加排序逻辑,然后对不同材质开启或关闭深度检测,对于大多数 UI 界面来说,这一系列操作带来的开销反而得不偿失

明白了,谢谢解答。两种方式的开销的对比,有相应的实验数据可参考不?