
如截图,有不少这类游戏,地表上有一些信息,角色上去可以累计资源这种玩法。我这边叫它地贴。
然而它使用传统的2D显示方案(就是加上RenderRoot2D),会非常方便,可以轻松的使用label,sprite,progressbar这类component的特性。为了解决3d物体踩上去的深度遮挡关系,建立材质使用builtin-sprite,勾选Depth Test就行了。但问题是,它挡不住上方出现的3d粒子。我试着修改3d粒子的材质,但始终无法解决。另外,3d粒子在空间中的深度关系和3d场景之间又是正常的。唯独3d粒子会被renderroot2d上的各种ui遮挡(粒子总是在后面)
我总觉得应该通过修改对应的builtin-sprite.effect或者它的材质来解决这个问题,但我一直没找到办法。
虽然比较着急的项目里面使用了另一个同步屏幕的更高优先级摄像机去解决。但毕竟还是希望最上层的粒子能在正确的空间中有正确的遮挡关系才是最好的。
我觉得应该还是两个透明层叠在一起,无法很好的控制渲染深度一样。
尝试粒子使用 3 - add-smooth,
尝试粒子使用 depth write,但是表现并不稳定。
也能遮挡下面的ui了。虽然粒子都成了一个个的小方块,如果能进一步找到alpha-test就好了

因为cocos的 RenderRoot2D组件 并不完善,问题如下:
RenderRoot2D下的UI渲染顺序都是 在 透明物体后面,大概顺序如下:
不透明物渲染–》透明物体渲染 --》 RenderRoot2D的UI
这样固定的顺序存在一个问题, RenderRoot2D 上的物体 永远会覆盖 透明物体之上,因为透明物体渲染不能写入深度
对比unity, RenderRoot2D组件应该提供两种模式,你需要的是 WorldSpace模式, 与透明物一起参与顺序排序渲染,而不是这样固定,我个人有改造渲染管线来实现,但改动较大就不分享了
开启hdr开启tonemaping,renderRoot2d下的sprite纹理颜色发生褪色,可能是由于2d纹理都ldr颜色空间的经过一次tonemapping后褪色了,大佬如果定制过渲染管线有没有思路怎么处理这个问题
虽然我没用过cocos的 tonemaping,但是一看你的渲染过程大概如下(你可以抓帧验证)
不透明物渲染–》透明物体渲染 --》 RenderRoot2D的UI --》后处理
要解决这个问题,2个不同的方案,你自己衡量改动成本:
1:把RenderRoot2D的渲染 移到 后处理 之后,改成这样:
不透明物渲染–》透明物体渲染–》后处理 --》 RenderRoot2D的UI
就可以解决了
2:不改顺序, RenderRoot2D的UI 的所有材质, 自己额外 手动加上 tonemapping的反向处理, 这样 一反一正 得到 正确效果
看起来第二种方案改动最小
第一种方案最后渲染和场景内3d物体就没有遮挡关系了,第二中tonemaping是后处理阶段改ui材质应该不会生效我可以验证一下!其实这两种方案我之前也问过ai
你说的第一种方案估计是深度被清理之后才画 RenderRoot2D的,才出问题。你应该这样尝试,RenderRoot2D的所有节点 额外用另外一个相机来渲染,前一个相机渲染场景其他节点,渲染后不清理深度,然后应用后处理, 这样估计就对了
第二种方案是 改RenderRoot2D下的 shader哦,应该是片元着色阶段 通过 后处理参数,反向处理,你问问AI吧
用两个相机那么renderroot2d下的ui就无法和3d物体穿插了,那就失去使用的意义了,第二种方案后处理应用应该在rootrender2d下的ui的shader之后