ModelTranslator: expose --qr-input-cap, adapt CLI test to new argv
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
5fda5d6bef
commit
b84dd1c53e
@@ -5,6 +5,7 @@ import argparse
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from mt_run import find_blender, run_blender_script
|
from mt_run import find_blender, run_blender_script
|
||||||
|
from qr_bridge import QR_INPUT_CAP
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@@ -16,6 +17,8 @@ def main():
|
|||||||
help="UV 展开:seam=锐边接缝整岛展开(默认),smart=Smart UV Project")
|
help="UV 展开:seam=锐边接缝整岛展开(默认),smart=Smart UV Project")
|
||||||
ap.add_argument("--reducer", choices=("collapse", "quad"), default="quad",
|
ap.add_argument("--reducer", choices=("collapse", "quad"), default="quad",
|
||||||
help="减面后端:quad=Quad Remesher 四边重拓扑(默认,失败自动回退 collapse),collapse=Decimate 塌陷")
|
help="减面后端:quad=Quad Remesher 四边重拓扑(默认,失败自动回退 collapse),collapse=Decimate 塌陷")
|
||||||
|
ap.add_argument("--qr-input-cap", type=int, default=QR_INPUT_CAP,
|
||||||
|
help="quad 后端 QR 前预 collapse 的中等密度目标面数(默认 50000);高密度模型直接 QR 会破洞")
|
||||||
ap.add_argument("--max-overlap", type=float, default=None,
|
ap.add_argument("--max-overlap", type=float, default=None,
|
||||||
help="UV 重叠容忍上限(0-1,默认内置 0.08);调高可让更高 seam 角度过门、减少碎岛")
|
help="UV 重叠容忍上限(0-1,默认内置 0.08);调高可让更高 seam 角度过门、减少碎岛")
|
||||||
ap.add_argument("--blender", default=None)
|
ap.add_argument("--blender", default=None)
|
||||||
@@ -24,6 +27,8 @@ def main():
|
|||||||
ap.error("--tris 必须为正整数")
|
ap.error("--tris 必须为正整数")
|
||||||
if args.max_overlap is not None and not (0.0 < args.max_overlap <= 1.0):
|
if args.max_overlap is not None and not (0.0 < args.max_overlap <= 1.0):
|
||||||
ap.error("--max-overlap 必须在 (0, 1] 内")
|
ap.error("--max-overlap 必须在 (0, 1] 内")
|
||||||
|
if args.qr_input_cap <= 0:
|
||||||
|
ap.error("--qr-input-cap 必须为正整数")
|
||||||
|
|
||||||
blender = find_blender(args.blender)
|
blender = find_blender(args.blender)
|
||||||
name = os.path.splitext(os.path.basename(args.input))[0]
|
name = os.path.splitext(os.path.basename(args.input))[0]
|
||||||
@@ -33,7 +38,7 @@ def main():
|
|||||||
s = run_blender_script(blender, "bl_decimate.py",
|
s = run_blender_script(blender, "bl_decimate.py",
|
||||||
[args.input, out_fbx, str(args.tris), args.unwrap,
|
[args.input, out_fbx, str(args.tris), args.unwrap,
|
||||||
"" if args.max_overlap is None else str(args.max_overlap),
|
"" if args.max_overlap is None else str(args.max_overlap),
|
||||||
args.reducer])
|
args.reducer, str(args.qr_input_cap)])
|
||||||
|
|
||||||
print("== %s: %d -> %d 面(目标 %d)-> %s" %
|
print("== %s: %d -> %d 面(目标 %d)-> %s" %
|
||||||
(s["src"], s["tris_before"], s["tris_after"], s["target"], out_fbx))
|
(s["src"], s["tris_before"], s["tris_after"], s["target"], out_fbx))
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ class TestModelDecimateCli(unittest.TestCase):
|
|||||||
model_decimate.main()
|
model_decimate.main()
|
||||||
|
|
||||||
args = run.call_args.args[2]
|
args = run.call_args.args[2]
|
||||||
self.assertEqual(args[-1], "quad")
|
# argv 顺序:input, out, tris, unwrap, overlap, reducer, qr_input_cap
|
||||||
|
self.assertEqual(args[5], "quad") # reducer 默认 quad
|
||||||
|
self.assertEqual(args[6], "50000") # qr_input_cap 默认 50000
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user