Files
HartOMat/render-worker/scripts/_blender_render_config.py
Hartmut 47b5d42bb5 refactor(P1): M1 dead code removal + M3 blender_render.py split
M1 — dead code removed:
- Delete blender-renderer/ and threejs-renderer/ source files
- Remove PIL/Pillow fallback block from step_processor.py
  (_generate_thumbnail_placeholder, _finalise_image JPG path)
- Remove stl_quality param from render_blender.py, render_still_task,
  render_turntable_task (was always "low"; hardcode deflection values)
- render_turntable_task now reads scene_linear/angular_deflection from
  system_settings (consistent with export_glb.py pipeline)

M3 — blender_render.py split from 263 → 68 lines:
- _blender_args.py: parse_args() — all 25 positional + named args
- _blender_scene_setup.py: setup_scene() — MODE A/B including USD import
- _blender_render_config.py: configure_and_render() — engine + output

Post-review fixes:
- _db_engine.dispose() after settings read in render_turntable_task
- _finalise_image() fmt param removed (always PNG; PIL never installed)
- _blender_import.py committed together with new submodules to satisfy
  import_usd_file dependency

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 12:54:40 +01:00

56 lines
2.1 KiB
Python

"""Engine configuration and final render call for blender_render.py."""
import sys
from typing import Callable
import bpy # type: ignore[import]
from _blender_gpu import configure_engine
def configure_and_render(args, early_gpu_type, use_template: bool, lap_fn: Callable[[str], None]) -> None:
"""Configure render engine, colour management, resolution, then render.
Reads engine, samples, device, denoiser, and output settings from args.
lap_fn is called with label strings at timing checkpoints.
"""
scene = bpy.context.scene
configure_engine(
scene, args.engine, args.samples, args.cycles_device, early_gpu_type,
args.noise_threshold, args.denoiser,
args.denoising_input_passes, args.denoising_prefilter,
args.denoising_quality, args.denoising_use_gpu,
)
if not use_template:
scene.view_settings.view_transform = "Standard"
scene.view_settings.exposure = 0.0
scene.view_settings.gamma = 1.0
try:
scene.view_settings.look = "None"
except Exception:
pass
scene.render.resolution_x = args.width
scene.render.resolution_y = args.height
scene.render.resolution_percentage = 100
scene.render.image_settings.file_format = "PNG"
scene.render.filepath = args.output_path
scene.render.film_transparent = args.transparent_bg
if scene.render.engine == "CYCLES":
cprefs = bpy.context.preferences.addons["cycles"].preferences
print(
f"[blender_render] VERIFY: engine={scene.render.engine}, "
f"cycles.device={scene.cycles.device}, "
f"compute_device_type={cprefs.compute_device_type}, "
f"gpu_devices={[(d.name, d.type, d.use) for d in cprefs.devices if d.type != 'CPU']}",
flush=True,
)
lap_fn("pre_render_setup")
print(f"[blender_render] Rendering → {args.output_path} (Blender {bpy.app.version_string})", flush=True)
sys.stdout.flush()
bpy.ops.render.render(write_still=True)
print("[blender_render] render done.", flush=True)
lap_fn("gpu_render")