ModelTranslator: QR watertightness gate + quad default

根因(真机排查):QuadRemesher 引擎在激进减面下非确定性地从封闭流形
输入打出孔洞/非流形边(实测同一输入约 85% 次数破碎),即"破碎面"。

修复:QR 导回后比对输入拓扑,若比输入新增开边(孔洞)/非流形边即判破损、
弃用 QR 回退 collapse(topology_acceptable 纯策略+单测;_edge_defects 计数)。
顺带修复水密门在导入后拒绝时未恢复 obj 选中态,导致 collapse 回退时
export use_selection 选不到对象、只导出 4KB 空 FBX 的 bug。

含用户改动:--reducer 默认改为 quad(配合水密门,破碎自动回退,安全),
及其 CLI 默认值测试。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ud18010
2026-07-23 10:10:45 +08:00
co-authored by Claude Opus 4.8
parent 44060ac3cb
commit 0481f10b8c
6 changed files with 103 additions and 6 deletions
+8
View File
@@ -62,3 +62,11 @@ def parse_progress(text):
if v < 0:
return ("error", lines[1] if len(lines) > 1 else "")
return ("running", "")
def topology_acceptable(src_boundary, src_nonmanifold,
out_boundary, out_nonmanifold):
"""QR 输出拓扑是否可接受:不比输入引入更多开边(孔洞)/非流形边。
QR 引擎在激进减面下会非确定性地打出孔洞——封闭输入(0/0)时要求输出也 0/0,
输入本身开放(壳)时按其基线放行;否则判破损,交上层回退 collapse。"""
return out_boundary <= src_boundary and out_nonmanifold <= src_nonmanifold