Climate drives palette, fog, vegetation density, and material wear.
Recipe
Climate drives the palette: pick one biome and key the light, world colour and material roughness to it (desert: warm sun, roughness 0.9, sand [0.75, 0.55, 0.3]; arctic: cool overcast, roughness 0.4 ice; jungle: saturated greens, low sun, high density; underground/underwater: near-black world, one practical light).
- Light with
lighting/light_rig.py:golden_hour(desert),overcast(arctic, jungle canopy),moonlight(underwater/cave, then keep exposure low),neon_nightfor bioluminescent caves. - Ground/material the hero with
materials/pbr_material.py(sand, snowroughness0.5, wet rockroughness0.2 andcoat_weight0.3, moss green). - Fill the biome with
set-dressing/scatter_props.pyfor rocks/crates/camps, and for vegetation or rocks on a terrain usegeometry-nodes/scatter_points.py(surface,collection,density2-8 per m2,align_to_normalFalse for trees). - Frame with
camera-cinematography/camera_rig.py(lens_mm35 for vistas,dof_fstop4 for jungle depth). - Atmosphere:
compositing/comp_grade.pystylized_bloom(jungle, underwater) orcinematic(desert, arctic); fog is world/volume based, set it in prose via a Volume Scatter on the world.
import runpy
skills = "<skills_dir>" # parent folder of this skill (the plugin's skills/ directory)
target = "SM_Asset" # object to style / dress
r = {}
r["light"] = runpy.run_path(f"{skills}/lighting/scripts/light_rig.py", init_globals={"ARGS": {"preset": "golden_hour", "target": target}})["result"]
r["mat"] = runpy.run_path(f"{skills}/materials/scripts/pbr_material.py", init_globals={"ARGS": {"name": "MAT_Sand", "base_color": [0.52, 0.3, 0.1], "roughness": 0.9, "objects": [target]}})["result"]
r["props"] = runpy.run_path(f"{skills}/set-dressing/scripts/scatter_props.py", init_globals={"ARGS": {"target": target, "count": 6, "kinds": ["box", "barrel"], "clusters": 2}})["result"]
r["cam"] = runpy.run_path(f"{skills}/camera-cinematography/scripts/camera_rig.py", init_globals={"ARGS": {"target": target, "lens_mm": 35, "dof_fstop": 4.0}})["result"]
r["grade"] = runpy.run_path(f"{skills}/compositing/scripts/comp_grade.py", init_globals={"ARGS": {"preset": "cinematic", "warmth": 0.3}})["result"]
result = r