From e78bd04ba82306a867a9e0fd399a9d79e080cbe5 Mon Sep 17 00:00:00 2001 From: ud18010 Date: Mon, 20 Jul 2026 09:41:07 +0800 Subject: [PATCH] =?UTF-8?q?ModelTranslator:=20=E7=BC=96=E6=8E=92=E5=B1=82?= =?UTF-8?q?=E5=85=9C=E5=BA=95=E6=84=8F=E5=A4=96=E5=BC=82=E5=B8=B8=20+=20?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E6=B6=88=E6=81=AF=E6=94=B6=E6=95=9B=EF=BC=88?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5=E4=BF=AE=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- Tools/ModelTranslator/model_decimate.py | 3 +++ Tools/ModelTranslator/rizom_unwrap.py | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Tools/ModelTranslator/model_decimate.py b/Tools/ModelTranslator/model_decimate.py index f38b0596..7703db77 100644 --- a/Tools/ModelTranslator/model_decimate.py +++ b/Tools/ModelTranslator/model_decimate.py @@ -31,11 +31,14 @@ def main(): s = run_blender_script(blender, "bl_decimate.py", [args.input, out_fbx, str(args.tris), "none"]) warnings = list(s["warnings"]) + # 惰性导入:seam/smart 路径不依赖 rizom 模块 from rizom_unwrap import RizomError, find_rizomuv, rizom_unwrap try: rizom_unwrap(out_fbx, find_rizomuv(args.rizom)) except RizomError as e: warnings.append("RizomUV 不可用:%s" % e) + except Exception as e: # 意外异常也不中断管线:记警告,交 bl_uvgate 回退 seam + warnings.append("RizomUV 异常:%r" % e) g = run_blender_script(blender, "bl_uvgate.py", [out_fbx, "rizom"]) s["uv"] = g["uv"] s["warnings"] = warnings + g["warnings"] diff --git a/Tools/ModelTranslator/rizom_unwrap.py b/Tools/ModelTranslator/rizom_unwrap.py index 1a4b694a..9bcbef0f 100644 --- a/Tools/ModelTranslator/rizom_unwrap.py +++ b/Tools/ModelTranslator/rizom_unwrap.py @@ -16,7 +16,7 @@ class RizomError(Exception): def candidate_paths(cli_arg=None, env_val=None, reg_val=None, default=DEFAULT_RIZOM): - """rizomuv.exe 候选路径,优先级:CLI 参数 > 环境变量 > 注册表 > 默认安装位置。""" + """rizomuv.exe 自动发现候选:环境变量 > 注册表 > 默认安装位置(显式 CLI 路径走独占分支不进此链)。""" return [p for p in (cli_arg, env_val, reg_val, default) if p] @@ -115,7 +115,7 @@ def rizom_unwrap(fbx_path, exe, map_res=MAP_RES, padding_px=PADDING_PX): last = None for attempt in range(1 + RETRY): if attempt: - print("[警告] RizomUV 第 %d 次失败(%s),换新实例重试" % (attempt, last)) + print("[警告] RizomUV 第 %d 次失败,换新实例重试" % attempt) try: return _unwrap_once(mod, exe, fbx_abs, map_res, pad_uv) except RizomError as e: @@ -124,7 +124,10 @@ def rizom_unwrap(fbx_path, exe, map_res=MAP_RES, padding_px=PADDING_PX): def _unwrap_once(mod, exe, fbx_abs, map_res, pad_uv): - link = mod.CRizomUVLink() + try: + link = mod.CRizomUVLink() + except Exception as e: # 构造失败也归一为 RizomError,维持"失败只抛 RizomError"契约 + raise RizomError("RizomUVLink 实例创建失败:%s" % e) try: _call("RunRizomUV", lambda _p: link.RunRizomUV(exePath=exe), None, timeout=60) except RizomError as e: