From cf237ffbf3d03ff7a3d2f047a42575d61ee76ec9 Mon Sep 17 00:00:00 2001 From: ud18010 Date: Thu, 16 Jul 2026 11:05:19 +0800 Subject: [PATCH] =?UTF-8?q?ModelTranslator:=20=E5=AE=A1=E6=9F=A5=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E2=80=94=E2=80=94=E5=AF=BC=E5=87=BA=E4=BB=85=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=AF=B9=E8=B1=A1=E3=80=81=E5=B8=B8=E9=87=8F=E9=80=9A?= =?UTF-8?q?=E9=81=93=E6=97=A5=E5=BF=97=E3=80=81--tris=20=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E3=80=81=E8=B6=85=E5=B7=AE=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tools/ModelTranslator/bl_bake.py | 5 +++++ Tools/ModelTranslator/bl_decimate.py | 7 ++++++- Tools/ModelTranslator/model_decimate.py | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Tools/ModelTranslator/bl_bake.py b/Tools/ModelTranslator/bl_bake.py index 5ee7743b..4d3ff185 100644 --- a/Tools/ModelTranslator/bl_bake.py +++ b/Tools/ModelTranslator/bl_bake.py @@ -103,8 +103,13 @@ def _rewire_emit(mat, input_name, warnings): else: v = sock.default_value if isinstance(v, float): + # 该通道无贴图,把常量值直接烘入 + warnings.append("%s.%s 无贴图,(常量) %.3f 烘入" % (mat.name, input_name, v)) emit.inputs['Color'].default_value = (v, v, v, 1.0) else: # Base Color 是 4 分量 + # 该通道无贴图,把常量色直接烘入 + warnings.append("%s.%s 无贴图,(常量色 %.3f/%.3f/%.3f) 烘入" + % (mat.name, input_name, v[0], v[1], v[2])) emit.inputs['Color'].default_value = (v[0], v[1], v[2], 1.0) for l in list(out.inputs['Surface'].links): nt.links.remove(l) diff --git a/Tools/ModelTranslator/bl_decimate.py b/Tools/ModelTranslator/bl_decimate.py index f1a68209..afc4259e 100644 --- a/Tools/ModelTranslator/bl_decimate.py +++ b/Tools/ModelTranslator/bl_decimate.py @@ -104,11 +104,16 @@ def main(): cur = len(obj.data.polygons) if within_tolerance(target, cur) or cur <= target: break + # 重试用尽仍超差且偏多:记录警告,交由上层决定是否可接受 + if not within_tolerance(target, cur) and cur > target: + warnings.append("修正 %d 轮后仍超差:%d 面(目标 %d ±3%%)" % (MAX_RETRY, cur, target)) _smart_unwrap(obj) out_dir = os.path.dirname(os.path.abspath(out_fbx)) os.makedirs(out_dir, exist_ok=True) - bpy.ops.export_scene.fbx(filepath=out_fbx, path_mode='STRIP', embed_textures=False) + # 仅导出合并后的对象;整场景导出会把 armature/empty 等非 mesh 带进 _low.fbx + bpy.ops.export_scene.fbx(filepath=out_fbx, use_selection=True, + path_mode='STRIP', embed_textures=False) print("MT_SUMMARY " + json.dumps( {"src": os.path.basename(src), "fbx": os.path.basename(out_fbx), diff --git a/Tools/ModelTranslator/model_decimate.py b/Tools/ModelTranslator/model_decimate.py index 4c3d9d1c..71d7ae3b 100644 --- a/Tools/ModelTranslator/model_decimate.py +++ b/Tools/ModelTranslator/model_decimate.py @@ -13,6 +13,8 @@ def main(): ap.add_argument("-o", "--out", default=None, help="输出目录(默认源文件同目录)") ap.add_argument("--blender", default=None) args = ap.parse_args() + if args.tris <= 0: + ap.error("--tris 必须为正整数") blender = find_blender(args.blender) name = os.path.splitext(os.path.basename(args.input))[0]