验收 Triverse AI 生成的 3D 资产,关键不在“看着像不像”,而在于把“高精度”拆成能落到文件上的检查项:轮廓与拓扑、面数与用途的匹配、UV 与贴图通道、以及不合格项该走重生成还是手动修。判断尽量靠网格属性、材质节点和导入引擎后的实际表现,肉眼只负责定位“哪里需要看数据”。这套顺序适合放在资产入库前跑一遍,具体阈值要结合目标引擎、平台和项目预算确认,不要照搬别人的数字。
验收顺序建议固定:先看轮廓和拓扑走向排除结构性问题,再核对面数与目标用途是否匹配,接着检查 UV 展开与贴图通道是否完整,最后把不合格项分成重生成和手动修两类。面数、UV、贴图通道都能通过网格属性、材质节点或脚本输出核对,不依赖主观感觉;阈值和精度要求需要结合目标引擎与渲染管线确认,能写成规则的就不要留在口头判断里。
在预览里先看轮廓与拓扑走向
结构性问题越早拦下越省事。资产刚导进预览器时先别看贴图细节,把视角固定成一组:正面、正侧面、背面、45 度斜视,再加一个俯视和一个略仰视。斜视角最容易暴露剪影问题,正交视图更适合判断比例和对称,透视视图则更接近玩家或客户实际看到的观感。
拓扑异常通常有比较具体的表现,看到任意一条就该停下来记录:
- 非流形边、内部残留面、游离碎片,表现为线框下出现不该存在的连线或独立小面片。
- 法线翻转,表现为同一物体在光照下出现黑块或内外明暗相反。
- 布线密度突变,局部三角面被拉成细长条,后续减面或形变会先崩在这里。
- 部件穿插、悬空、对称件错位,多出现在角色配件和硬表面拼接处。
截图记录建议固定相机位和线框叠加状态,文件名带上资产 ID 和视角,方便返工时比对:
# 截图命名约定(示例)
TRV_prop_crate_A_v1_topology_front.png
TRV_prop_crate_A_v1_topology_side_45.png
TRV_prop_crate_A_v1_wireframe_ortho.png
同一资产至少留一张带线框的正交图,一张不带线框的斜视图。只凭一张好看的渲染图,后续没法判断问题出在拓扑还是贴图。
核对面数与目标用途的匹配度
AI 生成的“高精度”资产默认按高模思路做,直接进实时场景很容易出问题。面数判断不要只看总数,要结合用途看三角面数、顶点数和材质槽数量三件事。可以先参考项目里同类已上线资产的面数区间,作为基准对比,而不是套一个通用数字。
| 目标用途 | 判断依据 | 处理动作 |
|---|---|---|
| 移动端实时道具/角色 | 与项目内同类资产对比,若明显高于基准且无可见收益 | 先减面,再判断是否需要重生成 |
| 桌面端实时场景 | 看导入引擎后的帧开销和材质槽数量 | 可保留较高面数,但需拆分 LOD |
| 静态渲染/展示图 | 以出图质量和渲染耗时为准 | 一般不需要减面 |
| 3D 打印/实物输出 | 看是否闭合、是否单一流形 | 重点不是减面而是修补 |
减面之前必须先记录当前状态,否则回退时找不到原始版本:原始三角面数、顶点数、是否已展开 UV、贴图分辨率。用脚本把这三个值打出来,比在界面里数更可靠:
# 验收检查骨架(库和字段名按你本地环境确认)
import trimesh
m = trimesh.load(path, force="mesh")
print("triangles:", len(m.faces))
print("vertices:", len(m.vertices))
print("has_uv:", getattr(m.visual, "uv", None) is not None)
print("watertight:", m.is_watertight)
检查 UV 展开与贴图通道完整性
模型看着还行但贴图错位,多半出在 UV 或通道上。这一步可以按三个方向查:
- UV 重叠:在 UV 编辑器里贴一张棋盘格,重叠区域会出现图案打架或密度不一致;也可以用脚本统计 UV 面片面积总和与 0~1 空间的关系,明显超出说明有叠 UV。
- UV 拉伸:棋盘格在模型上呈网格均匀分布说明正常,出现拉长、挤压成条的地方就是拉伸区,通常藏在曲面转折和衔接处。
- 通道缺失:逐个确认基础色、法线、粗糙度、金属度、AO 是否齐全,贴图是否真的接到了材质槽上,法线贴图的颜色空间是否设为线性/非颜色数据,带透明需求的资产是否保留了 alpha。
还要看贴图分辨率和 UV 实际占用面积是否匹配:一张大图只覆盖很小一块 UV 区域,说明分辨率用错了地方。贴图文件缺失或路径失效,在预览器里通常表现为纯色或粉紫色块,这属于硬性不合格,必须先在本地确认资源引用关系,再讨论画质。
把不合格项分成重生成与手动修两类
不分类就直接重跑,往往把本来能救的资产也一起丢掉。可以按“问题是否伤及几何语义”来分:几何结构错了、部件缺失、比例明显不对,这类手动修成本高于重生成;表面质量类问题,比如接缝、局部噪点、贴图轻微模糊、命名和轴心不规范,手动修通常更快。
| 不合格类型 | 典型表现 | 处理动作 |
|---|---|---|
| 结构错误 | 部件缺失、拓扑断裂、比例失调、朝向混乱 | 调整提示词后重生成,保留失败样本做对比 |
| 拓扑瑕疵 | 局部非流形、碎面、法线翻转 | 小范围手动修,范围大则重生成 |
| UV 严重错乱 | 大面积重叠或未展开 | 视资产复用价值决定重展 UV 或重生成 |
| 贴图缺失/接错 | 通道缺失、路径失效、颜色空间错误 | 手动修,成本低 |
| 规范类问题 | 命名、单位、轴心、层级不规范 | 手动修,不进入重生成流程 |
重生成前把上一次的输入提示词、参数和失败截图存下来,避免同一类问题反复出现却说不清原因。
把验收结论写进资产命名与备注
验收结果如果只留在聊天记录里,下游拿到文件仍然要重新判断一遍。建议用命名和备注两个位置承载状态信息。命名可以按“项目_类别_语义名_精度档_版本_状态”组织,例如:
TRV_prop_crate_A_mid_v2_approved
TRV_char_guard_high_v1_rework_uv
状态词控制在少量固定值里,比如 approved、rework_uv、rework_topo、regen,避免每个人写法不同。备注字段则用来补充肉眼看不出的信息,随文件一起交付:
{
"asset_id": "TRV_prop_crate_A_mid_v2",
"triangles": 0,
"vertices": 0,
"uv_status": "ok | overlap | missing",
"texture_channels": ["basecolor", "normal", "roughness", "ao"],
"target_use": "mobile_realtime",
"checklist": "topology_pass, budget_pass, uv_pass",
"blocker": "",
"owner": "",
"checked_at": ""
}
面数和通道列表建议由脚本写入,不要手填;状态词和 blocker 字段用于让下游快速判断能否直接使用,checked_at 记录验收轮次。这样即使资产被反复重跑,也能一眼看出当前版本卡在哪一步。