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]