3D模型在安卓上出现黑色撕列黑线,有大佬帮看看吗?


版本:cocos creator:3.8.8
在安卓会出现这种黑色线条,一会过后模型都消失。是什么原因呢,有大佬帮看看吗?deepseek已经花费20了,还没能解决。真付费上班了。

只有这个模型有这个问题?换个模型试试看还有没有?
有可能是顶点数据/索引数据有问题。
如果确定是某个模型的问题,用blender等软件重新导出试试能不能修复

不是,是所有的模型都有问题,我使用了 GPU instance

image 模型有开启网格压缩这些东西吗

没有开的,h5 和 微信小游戏上正常

换个高级工程师终于解决了,在自己不擅长的领域,有AI帮手是真的好。

1. Android 出现黑色长线/三角形

原因:

Cocos Creator 3.8.8 原生端 createMesh 在处理 customAttributes 时存在顶点步长计算问题。合并特效的自定义属性 a_animData0
使用 RGBA32F,但原生端错误地参考了前一个普通属性的格式,造成顶点数据错位。

GPU 随后读取到错误的顶点位置或索引数据,三角形被拉伸到屏幕远处,于是出现黑色长线。Web/编辑器路径没有触发同样的问题。

解决:

  • 在自定义属性前增加同为 RGBA32F 的 colors 普通属性。
  • 为每个顶点写入完整的 [1, 1, 1, 1] 颜色。
  • 使原生端即使错误引用前一个属性格式,得到的步长仍与 a_animData0 一致。

这样消除了顶点数据错位,黑线不再出现。

2. 运行一段时间后头部、身体依次消失

原因:

角色的真实位置没有写入 node.position,而是通过实例化属性:

a_transData1
a_transPos
a_transRot

在 Shader 中计算。

因此存在两个位置:

  • GPU 看到的角色:位于不断向前移动的逻辑位置。
  • CPU 看到的模型包围盒:仍停留在角色出生点附近。

随着相机向前移动,出生点附近的包围盒离开相机视锥,原生端便认为模型不可见并停止提交渲染。头部和身体是不同的
MeshRenderer/SkinnedMeshRenderer,包围盒大小不同,所以表现为头先消失、身体随后消失。

解决:

  • 仅在原生平台让角色根节点低频跟随逻辑位置。
  • CPU 包围盒因此始终位于角色附近,视锥裁剪结果恢复正确。
  • GPU 依然通过实例属性计算精确位置,没有破坏原有实例化合批。
  • 使用距离阈值更新,而不是每帧更新所有节点 Transform。

最终效果是:GPU 实例化位置、CPU 包围盒和相机裁剪重新保持一致,同时保留原有合批性能。

1赞

https://github.com/cocos/cocos-engine/pull/19224 引擎侧在v3.8.9版本也做了修复,感谢反馈。

3赞

版本打算什么时候放出来