我构建了一个无头网格QA工具,并将其应用于2,307个生成的3D资产(3D竞技场数据集,MIT许可证)来分析几何健康。基于资产验证反馈,这里是指标的完整分解,指标对每个技能水平的开发人员意味着什么,什么时候可以安全地忽略某些缺陷,以及如何修复损坏的模型。
原始数据基线
- 40.1% 不是密封的
- 39.7% 没有UV
- 79.8% 超出了Unity移动的30k三角形预算
- 14.9% 只有顶点颜色,没有纹理
- 9.7% 有非多面体边缘
- 中位数面数:77,402个三角形
每个指标对开发人员的含义(以及缺陷的边缘情况)
不每个标记指标都是一个项目杀手的bug。这里是每个缺陷对开发人员的影响以及其技能水平和目标平台的关系:
1. 非密封几何(开放边界)
- 初级影响:您拖入一个网格,编辑器中看起来很好,但复杂的碰撞体会失败或物理对象会穿过它。
- 高级影响:破坏3D打印、布尔网格操作、体积渲染和有符号距离场(SDF)生成。
- 当它边缘化时:静态背景道具、背景建筑和遥远的环境装饰,如果玩家从外部看到这些模型,单边 rasterization 处理开放边界没有视觉问题。约有一半的标记模型落入“技术上破坏,实际上可用”的等级。
2. 缺失的UV通道
- 初级影响:应用材料会将整个网格转换为平坦的实色,因为引擎没有纹理坐标映射。
- 高级影响:防止标准PBR材料管道集成、法线映射和静态光照贴图烘焙。
- 当它边缘化时:使用自定义顶点颜色着色器、未lit颜色调色板或三维投影着色器的风格化游戏。如果您的管道完全依赖于顶点颜色或自定义三维投影材料,缺失的UV就无关紧要。
3. 多边形数量和三角形预算
- 初级影响:游戏在开发机上运行平滑,但在低端硬件或移动设备上测试时会立即卡顿或崩溃。
- 高级影响:高多边形数量会膨胀VRAM使用、增加顶点着色器处理开销,并防止有效的绘制调度。
- 当它边缘化时:主角道具在现代PC或console发布中、动画场景资产或使用Unreal Engine 5 Nanite(它自动流式传输几何)的项目。然而,对于移动、VR或标准LOD管道,高面数仍然是硬性阻塞。
4. 非多面体边缘
- 初级影响:会导致奇怪的着色艺术、暗点或无法通过翻转法线修复的光照错误。
- 高级影响:会破坏网格细分、网格减少算法、细分表面和凸壳生成。
- 当它边缘化时:内部非多面体几何在非模拟、非变形的静态道具中很少会导致渲染通行,但仍然是一种坏习惯。
5. 浮动碎片
- 初级影响:会导致远离可见模型的隐形碰撞盒。
- 高级影响:会膨胀对象的边界盒,破坏裁剪盒、遮挡裁剪和阴影贴图计算。
- 当它边缘化时:小的内部浮动几何,如果严格内嵌在主外部几何壳中,不会扩展外部边界盒。
如何修复损坏的3D模型
如果您在第三方或生成的模型中遇到这些问题,请按照以下标准方法进行修复:
- 修复密封性:使用 voxel 网格重建工具(如Blender的Voxel Remesh工具)或自动四边形重顶层来重建密封的几何壳。
- 修复UV:运行自动UV展开工具,如xatlas、Blender的智能UV展开或Unreal Engine的内置UV生成。
- 修复多边形数量:应用四边形误差度量(Blender的Decimate修改器或Simplygon)来减少面数,同时保留关键视觉轮廓。
- 修复非多面体几何:通过距离合并邻近顶点、删除内部面交点和计算共享边缘的正常向量来修复。
我做了什么来回应这些发现
运行此规模测试迫使我更新QA工具并解决内部代码问题:
- 实现自动修复程序:在QA脚本中直接构建了洞填充、空间顶点焊接和减少路径。
- 解决修复回归:初始修复逻辑在616个资产上创建了新错误。修复一个缺乏多面体检查的洞填充程序以及一个修复反转法线的修复程序,减少了回归到454(其中237个剩余的失败与复杂的减少边缘案例相关)。
- 正确边缘计数逻辑:边界计数器在glTF文件上双重计数了 seam-splitted 边缘,导致每个资产原始计数膨胀。现在, seams 在世界位置上被焊接之前被顶点分析。
- 修复崩溃恢复:批处理过程在恢复崩溃时会损坏JSON状态文件,这导致了静默重新计算。
评论 (0)