diff --git a/Tools/ModelTranslator/model_bake.py b/Tools/ModelTranslator/model_bake.py new file mode 100644 index 00000000..8007ffa5 --- /dev/null +++ b/Tools/ModelTranslator/model_bake.py @@ -0,0 +1,40 @@ +"""高低模烘焙 CLI:在低模 UV 上烘出 normal/ao/color/metallic/roughness 五张贴图。 +产物命名对齐 model_translator.py 纯网格约定,可直接作为其输入。 +用法:python model_bake.py <高模.fbx> <低模.fbx> [-o out_bake] [--size 2048] + [--ray-distance N] [--samples 64] [--blender exe]""" +import argparse +import os + +from bl_bake import output_stem +from mt_run import HERE, find_blender, run_blender_script + + +def main(): + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("high", help="高模 FBX(带材质/贴图)") + ap.add_argument("low", help="低模 FBX(须有 UV,见 model_decimate.py)") + ap.add_argument("-o", "--out", default=os.path.join(HERE, "out_bake")) + ap.add_argument("--size", type=int, default=2048, help="烘焙贴图边长") + ap.add_argument("--ray-distance", type=float, default=None, + help="射线距离(场景单位),默认低模包围盒对角线 2%%") + ap.add_argument("--samples", type=int, default=64, help="AO 采样数") + ap.add_argument("--blender", default=None) + args = ap.parse_args() + + blender = find_blender(args.blender) + stem = output_stem(os.path.splitext(os.path.basename(args.low))[0]) + outdir = os.path.join(args.out, stem) + ray = "auto" if args.ray_distance is None else str(args.ray_distance) + s = run_blender_script(blender, "bl_bake.py", + [args.high, args.low, outdir, str(args.size), + ray, str(args.samples)]) + print("== %s(高 %d 面 / 低 %d 面,射线距离 %.4f)-> %s" % + (s["stem"], s["high_tris"], s["low_tris"], s["ray_distance"], outdir)) + for name, fname in s["outputs"].items(): + print(" %-10s %s" % (name, fname)) + for w in s["warnings"]: + print(" [警告] %s" % w) + + +if __name__ == "__main__": + main()