cocos-engine icon indicating copy to clipboard operation
cocos-engine copied to clipboard

[抖音小游戏] 将3D摄像机渲染到 RenderTexture 时, 层次关系错乱.

Open finscn opened this issue 1 year ago • 1 comments

Cocos Creator version

3.8.3

System information

android

Issue description

在 各种浏览器 微信小游戏 下都没有问题 . 此bug仅在 抖音(安卓版)小游戏内出现, 且必现. 抖音App, 抖音开发工具 手机操作系统都已经升级到最新版本.

正常情况下 如下图所示 : (直接渲染3D摄像机的内容到屏幕) 15551719836081_ pic

当渲染到 RenderTexture 时, 效果如下: 15561719836082_ pic

我渲染的内容分属于两个模型, 多个cc.Node . 一个模型是 "走廊末端", 如图 image

另外一个模型是 一段 "侧墙和地面", 如图 image

场景中, 将 "侧墙和地面"重复拼接出一个走廊, 走廊尽头是"走廊末端". 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

finscn avatar Jul 01 '24 12:07 finscn

补充: 第一眼看起来 好像是 alpha处理的问题. 但是其实不是. 错乱图中 左上角灰色部分 和右上角 黑色部分, 本来也是要绘制的(原始纹理中这部分也不是透明的,模型中也不是) 只是应该先绘制, 然后 再被前面的"侧墙"覆盖.

现在的情况是 "走廊末端" 绘制的迟了, 但是也不是最后绘制的. 先绘制了若干端的四壁, 然后绘制了"走廊末端", 最后 又单独绘制了一个四壁. 见左上角 灰色部分右下角 又出现了一段"侧墙".

finscn avatar Jul 01 '24 12:07 finscn

补充: iOS 没有问题, 安卓下有问题. 感觉大概率是抖音的bug了....

finscn avatar Jul 04 '24 09:07 finscn

两个星期了有没有下文?兄弟有解决办法吗

wardehuang avatar Jul 13 '24 13:07 wardehuang

跟下projection的矩阵跟浏览器预览的输出结果有什么不一致么?看上去是projection的z值被反转了,不好意思哈,这阵子比较忙

GengineJS avatar Jul 17 '24 07:07 GengineJS

跟下projection的矩阵跟浏览器预览的输出结果有什么不一致么?看上去是projection的z值被反转了,不好意思哈,这阵子比较忙

不知道如何 "跟下projection的矩阵跟浏览器预览的输出结果有什么不一致" ....

finscn avatar Jul 18 '24 03:07 finscn

原因跟方案已经在论坛回复:https://forum.cocos.org/t/topic/159664/18

GengineJS avatar Jul 20 '24 02:07 GengineJS

这个issue关闭了

GengineJS avatar Jul 23 '24 02:07 GengineJS

@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;
        }

finscn avatar Sep 08 '24 13:09 finscn

引擎内部解决了。 @GengineJS 把 PR 关联一下。

minggo avatar Sep 09 '24 01:09 minggo