洗衣机"半截入土"根因定位 + 修复 + 与官方 HSSD 无损 parity 验证 · 2026-06-17 · e区
Rx(-90°)(Z-up→Y-up),
之后与官方 HSSD 资产逐项同构、无损导入。
| 资产 | Blender 导入后 ext (x,y,z) | 高轴 | 底面 zmin | 判定 |
|---|---|---|---|---|
| 官方 HSSD wardrobe(金标准) | [1.21, 0.58, 2.00] | Z 站立 | −0.00 坐地 | ✓ 正确 |
| 我们 Articraft 原始 Z-up | [0.64, 0.85, 0.60] | Y 躺倒 | −0.30 下沉 | ✗ 入土 |
| 我们 Articraft 修正 Y-up | [0.64, 0.60, 0.85] | Z 站立 | −0.00 坐地 | ✓ 与官方同构 |
修正后高轴=Z、底 z≈0,与官方 HSSD 逐项一致 → 经 finalize_imported_authored_object 路径无损落位。
scene_ir@0.4 是 Z-up;资产 payload 约定 glTF 标准 Y-up 内容。blender_rebuild_render.py::import_mesh_file 用 bpy.ops.import_scene.gltf 导入,Blender 默认做 Y-up→Z-up(绕 X +90°)。官方 HSSD .glb 本就 Y-up → 导入后正确。asset_cache.py::_bake_gltf_mesh 对 .gltf 烘焙施加 Rx(+90°),注释原文 "Match Blender glTF import's Z-up orientation" = 官方假定源是 Y-up。source=="scenesmith" 走 finalize_imported_authored_object(只施加 pose 平移、零矫正),完全信任 GLB 已正立 → 错位被原样保留。适配器 converter/datasets/articraft_yup_adapter.py,源头施加 Rx(-90°)(官方 bake 的逆)把 Z-up 内容转成标准 Y-up + 底贴原点:
from datasets.articraft_yup_adapter import normalize_articraft_mesh_to_yup, local_bounds_zup
normalize_articraft_mesh_to_yup("in_zup.glb", "out_yup.glb") # Z-up -> 标准 Y-up + 底贴原点
lb = local_bounds_zup("out_yup.glb") # 统一场景(Z-up)系 local_bounds
已集成进 yz-week25 分支(基于同学 week/25 主线)并推送 origin/yz:
含 schema 扩展(articulation/clearance 可选字段)+ 关节/净空标注两种挂载模式。
回归全绿:week25 test_asset_annotation_rendering 13 passed、test_demo_scene_regressions 10 passed。