[抖音小游戏] 将3D摄像机渲染到 RenderTexture 时, 层次关系错乱.
Cocos Creator version
3.8.3
System information
android
Issue description
在 各种浏览器 微信小游戏 下都没有问题 . 此bug仅在 抖音(安卓版)小游戏内出现, 且必现. 抖音App, 抖音开发工具 手机操作系统都已经升级到最新版本.
正常情况下 如下图所示 : (直接渲染3D摄像机的内容到屏幕)
当渲染到 RenderTexture 时, 效果如下:
我渲染的内容分属于两个模型, 多个cc.Node . 一个模型是 "走廊末端", 如图
另外一个模型是 一段 "侧墙和地面", 如图
场景中, 将 "侧墙和地面"重复拼接出一个走廊, 走廊尽头是"走廊末端". z轴数值离镜头越远越小, 但是均为负数. 从-0.5开始, 逐步递减, "走廊末端"是 -6.5.
我已经正确的设置了 关于 alpha test , z-test , shader 材质 等一类的参数 . 否则不可能只有 抖音小游戏下 渲染到RT时有问题
Relevant error log output
No response
Steps to reproduce
如上
Minimal reproduction project
No response
补充: 第一眼看起来 好像是 alpha处理的问题. 但是其实不是. 错乱图中 左上角灰色部分 和右上角 黑色部分, 本来也是要绘制的(原始纹理中这部分也不是透明的,模型中也不是) 只是应该先绘制, 然后 再被前面的"侧墙"覆盖.
现在的情况是 "走廊末端" 绘制的迟了, 但是也不是最后绘制的. 先绘制了若干端的四壁, 然后绘制了"走廊末端", 最后 又单独绘制了一个四壁. 见左上角 灰色部分右下角 又出现了一段"侧墙".
补充: iOS 没有问题, 安卓下有问题. 感觉大概率是抖音的bug了....
两个星期了有没有下文?兄弟有解决办法吗
跟下projection的矩阵跟浏览器预览的输出结果有什么不一致么?看上去是projection的z值被反转了,不好意思哈,这阵子比较忙
跟下projection的矩阵跟浏览器预览的输出结果有什么不一致么?看上去是projection的z值被反转了,不好意思哈,这阵子比较忙
不知道如何 "跟下projection的矩阵跟浏览器预览的输出结果有什么不一致" ....
原因跟方案已经在论坛回复:https://forum.cocos.org/t/topic/159664/18
这个issue关闭了
@GengineJS @minggo
抖音那边估计一时半会也解决不了这个问题. 希望 cocos 3.8.4 能把 这个函数
function getExtension (gl: WebGLRenderingContext, ext: string): any {
const prefixes = ['', 'WEBKIT_', 'MOZ_'];
for (let i = 0; i < prefixes.length; ++i) {
const _ext = gl.getExtension(prefixes[i] + ext);
if (_ext) {
return _ext;
}
}
return null;
}
暴露出来 . 让开发者可以自己在项目里重写, 这样会更便于解决这个问题. 按照你们论坛里 给的方法 ( https://forum.cocos.org/t/topic/159664/19 )这个做法 要自定义引擎才行, 太麻烦了.
或者 在 3.8.4 里 直接 改一下这个 ? 不判断 IOS了, 只要是 字节的 , 都设置为 null
// bytedance ios depth texture implementation doesn't work
if (BYTEDANCE && systemInfo.os === OS.IOS) {
res.WEBGL_depth_texture = null;
}
引擎内部解决了。 @GengineJS 把 PR 关联一下。