Shadows as design. Silhouettes. Wet ground mirrors. Limited color or mono.
Tenets
- Motivated hard keys / blinds / neon slash
- Negative fill
- Smoke/fog shafts
- Costume readable in silhouette
- Grade crushed but detailed shadows
Recipe
Target 2.39:1, crushed blacks, one hard warm practical against cold moonlight, wet reflective ground, monochrome grade.
- Lighting:
light_rig.pypresetmoonlight(cold sun plus a warm point; world near-black). - Wet ground:
pbr_material.pywithroughness0.08 andcoat_weight1.0 on the ground/target; keep the subject dark and matte (roughness0.8). - Camera:
camera_rig.pylens_mm35,elevation_deg-4,dof_fstop2.8,aspect"2.39:1" for a low, cinematic angle. - Render:
render_preset.pyeevee_final(screen-space raytracing gives the wet reflections). - Grade:
comp_grade.pypresetnoir(saturation 0, bloom, slight lens distortion) withvignette0.5. Add fog or a volume cube by hand for light shafts.
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": "moonlight", "target": target}})["result"]
r["material"] = runpy.run_path(f"{skills}/materials/scripts/pbr_material.py", init_globals={"ARGS": {"name": "MAT_Wet_Asphalt", "base_color": [0.03, 0.03, 0.035], "roughness": 0.08, "coat_weight": 1.0, "objects": [target]}})["result"]
r["camera"] = runpy.run_path(f"{skills}/camera-cinematography/scripts/camera_rig.py", init_globals={"ARGS": {"name": "CAM_Style", "target": target, "lens_mm": 35, "elevation_deg": -4, "dof_fstop": 2.8, "aspect": "2.39:1"}})["result"]
r["render"] = runpy.run_path(f"{skills}/rendering/scripts/render_preset.py", init_globals={"ARGS": {"preset": "eevee_final"}})["result"]
r["grade"] = runpy.run_path(f"{skills}/compositing/scripts/comp_grade.py", init_globals={"ARGS": {"preset": "noir", "vignette": 0.5}})["result"]
result = r