From 7e57dba0858bdac5fc3e82ff0389e8c588eae276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hartmut=20N=C3=B6renberg?= Date: Sat, 14 Mar 2026 14:21:53 +0100 Subject: [PATCH] fix: add --material-override support to turntable_render.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both camera-orbit and object-rotation modes now parse and apply the --material-override CLI arg, overriding USD primvar lookups and material_map before assignment — same pattern as still renders. Co-Authored-By: Claude Opus 4.6 (1M context) --- render-worker/scripts/turntable_render.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/render-worker/scripts/turntable_render.py b/render-worker/scripts/turntable_render.py index 77f5523..78d8cf0 100644 --- a/render-worker/scripts/turntable_render.py +++ b/render-worker/scripts/turntable_render.py @@ -363,6 +363,12 @@ def main(): _idx = argv.index("--sensor-width") _sensor_width = float(argv[_idx + 1]) if _idx + 1 < len(argv) else None + # Named argument: --material-override + _material_override = None + if "--material-override" in argv: + _idx = argv.index("--material-override") + _material_override = argv[_idx + 1] if _idx + 1 < len(argv) else None + # Ensure scripts dir is on path for shared module imports _scripts_dir = os.path.dirname(os.path.abspath(__file__)) if _scripts_dir not in sys.path: @@ -447,6 +453,14 @@ def main(): for part in parts: _apply_smooth(part, SMOOTH_ANGLE) + # Apply material override if set + if _material_override: + print(f"[turntable_render] material_override active: all parts → {_material_override}", flush=True) + if _usd_mat_lookup: + _usd_mat_lookup = {k: _material_override for k in _usd_mat_lookup} + if material_map: + material_map = {k: _material_override for k in material_map} + # Material assignment: USD primvar path first, then name-matching fallback if material_library_path and _usd_mat_lookup: _apply_material_library_direct(parts, material_library_path, _usd_mat_lookup) @@ -531,6 +545,14 @@ def main(): for i, part in enumerate(parts): _apply_smooth(part, SMOOTH_ANGLE) + # Apply material override if set (object-rotation mode) + if _material_override: + print(f"[turntable_render] material_override active (obj-rot): all parts → {_material_override}", flush=True) + if _usd_mat_lookup: + _usd_mat_lookup = {k: _material_override for k in _usd_mat_lookup} + if material_map: + material_map = {k: _material_override for k in material_map} + # Material assignment: USD primvar path first, then name-matching fallback if material_library_path and _usd_mat_lookup: _apply_material_library_direct(parts, material_library_path, _usd_mat_lookup)