Lunar Mission: Deconstructing the CGI Pipeline
Objectives
My objective on Lunar Mission was to build a re-render-free VFX pipeline. By breaking complex space environments into isolated physical and atmospheric passes, lighting, depth cues, and lens artifacts can be tuned in real time without relaunching heavy 3D rendering tasks.
1. The Pipeline Architecture: 8-Layer Deconstruction
To achieve photorealistic space integration, the shot was deconstructed into eight distinct functional layers rendered from Blender in 32-bit linear OpenEXR format:
| Layer # | Layer Name | Blend Mode | Function & Optical Purpose |
|---|---|---|---|
| L1 | Celestial Elements | Normal (Base) | Deep space starfields, Earth crescent, and cosmic nebula backdrop. |
| L2 | Lunar Terrain | Over | Regolith displacement, crater geometry, and diffuse lunar surface bounce. |
| L3 | Volumetric Dust | Screen / Add | Subtle electrostatic dust suspension caught in low-angle sunlight. |
| L4 | Embers & Thrusters | Additive | High-energy thruster particles and reaction-wheel propulsion exhaust. |
| L5 | Contact Shadow | Multiply | Astronaut ground occlusion pass with forced alpha saturation. |
| L6 | Astronaut Hero | Over | Character model, reflective gold visor, suit fabric textures, and normal vectors. |
| L7 | Visor Reflection & Glare | Screen | Curved anamorphic reflection of the lunar module and direct solar flare. |
| L8 | Atmospheric Lens Polish | Composite Overlay | 35mm film grain, anamorphic chromatic aberration, and edge halation. |
2. Automated OpenImageIO (OIIO) Compositing Engine
Rather than assembling 250 frames entirely by hand inside a GUI, I developed a Python-driven CLI batching pipeline utilizing OpenImageIO (oiiotool). This automated the frame reconstruction pass directly on 32-bit floating point image arrays with exact mathematical repeatability.
Below is the core batch execution script used to merge the render passes while preserving linear premultiplication data:
oiiotool L1_celestial.exr
L2_terrain.exr –over
L3_dust.exr –add
L4_embers.exr –add
L5_shadow.exr –ch “R,G,B,A=1.0” –mul
L6_astronaut.exr –over
L7_visor_glare.exr –add
–no-autopremult
–compression zip
-o composite_master.####.exr
3. Technical Innovations: Shadow Occlusion & Linear Precision
- Shadow Occlusion Channel Surgery (L5): Standard shadow render passes often introduce edge halos when multiplied against textured terrain. By performing a dedicated channel operation forcing alpha to
1.0before the multiplication pass, the shadow occludes terrain irradiance naturally without causing fringe artifacts. - 32-Bit Floating Point Pipeline: Operating in 32-bit linear space with ZIP compression prevents banding in the extreme contrast range between pitch-black lunar shadows and blinding direct solar glare.
- Non-Destructive Light Wrap: Light-wrapping between the astronaut suit and background stars was calculated using inverted alpha dilation in Blackmagic Fusion before export, seating the character into the lighting environment.
4. Color Grading & Lens Harmonization in DaVinci Resolve
Once the multi-pass EXR sequence was reconstructed via OIIO, the master image sequence was ingested into DaVinci Resolve for final color grading and optical finishing:
- ACEScct Color Management: Standardized color transform ensuring accurate rolloff in high-exposure helmet reflections.
- Split-Tone Palette: Deep obsidian blacks paired with cool 6500K moonlight on suit highlights, contrasted against warm 3200K cockpit lighting in visor reflections.
- Optical Sensor Simulation: Custom grain overlays matching Kodak 5219 500T film stock, paired with subtle barrel distortion and anamorphic horizontal flares.
5. Production Impact: Workflow Comparison
| Production Metric | Full 3D Re-Render Workflow | Programmatic OIIO Pipeline | Efficiency Gain |
|---|---|---|---|
| Lighting / Flare Adjustments | 6–8 hours (full scene re-render) | < 45 seconds (CLI re-composite) | 99% faster |
| Frame Consistency (250 Frames) | Subject to render farm sampling variance | 100% deterministic pixel match | Zero pixel drift |
| Color Space Fidelity | 8-bit / 16-bit clamped exports | Full 32-bit floating point EXR | Uncompromised dynamic range |
6. Technical Specifications & Tool Stack
- 3D Modeling & Scene Assembly: Blender 3D (Cycles engine)
- Node-Based Compositing: Blackmagic Fusion Studio
- Automation & Batch Assembly: OpenImageIO (
oiiotool) via Python 3 - Color Grading & Mastering: DaVinci Resolve Studio (ACEScct)
- Master Delivery Format: Apple ProRes 4444 XQ / OpenEXR Sequence
7. Technical FAQ
Why use OpenImageIO (OIIO) instead of doing everything inside Fusion?
OIIO allows programmatic, command-line batching of hundreds of frames in seconds. For multi-layer pass reassembly, it executes memory-efficient operations without GUI overhead, freeing up artist time.
How does the 32-bit linear EXR workflow prevent shadow clipping?
In 32-bit float color, values are not clamped between 0.0 and 1.0. This allows shadows in deep space to maintain subtle reflected irradiance from the lunar ground without crushing blacks or blowing out highlights.
Can this pipeline scale to multi-shot film sequences?
Yes. The Python-driven OIIO commands can be attached to render manager hooks (Deadline / Tractor) to automatically reassemble every incoming shot on the farm.




