OpenVDB Volume Ray Marcher for Nuke 17
A volume renderer that brings VDB files directly into Nuke's 2D compositing pipeline. Supports smoke, fire, explosions, clouds, and particle point clouds with physically-based lighting.
Created by Marten Blumen
Linux build available (community-contributed, unverified by the maintainer) — see LINUX_BUILD.md. The original project lives at github.com/bratgot/VDBmarcher — all plugin source is unmodified upstream code by Marten Blumen; if you find VDBRender useful, support the original author (see below). Linux port by Soup Kitchen Films, developed with the assistance of Claude (Anthropic).
Rendering
- Ray marching with HDDA empty-space skipping
- Adaptive step size for quality/speed balance
- Deep output for volumetric compositing
- Render region for fast iteration
- Proxy resolution modes (75%, 50%, 25%)
- Stochastic multi-sample anti-aliasing
Shading & Colour
- Lit, greyscale, heat, cool, blackbody, custom gradient, and explosion modes
- CIE 1931 blackbody (accurate 500K–40000K, Kang et al. 2002)
- Chromatic extinction (per-channel σt for Rayleigh-like scattering)
- Cd (colour) grid support for scatter albedo
Phase Functions
- Dual-lobe Henyey-Greenstein with configurable forward/backward lobes
- Approximate Mie (Jendersie & d'Eon, SIGGRAPH 2023) for clouds and fog
- Powder effect (Schneider & Vos 2015, Horizon Zero Dawn clouds)
Scattering
- Analytical multiple scattering (Wrenninge 2015) — zero extra rays
- Gradient-normal Lambertian blend for surface-like shading
Lighting
- Auto-detected directional and point lights from Nuke's Scene node
- HDRI environment maps via EnvironLight nodes
- L2 spherical harmonic environment lighting (10–20× faster for clouds)
- Virtual directional lights extracted from HDRI peaks
- ReSTIR weighted reservoir sampling for environment lighting
- Configurable sky/studio light rigs with presets
Shadows
- HDDA shadow rays (skips empty VDB tiles)
- Optional transmittance cache (precomputed per-light, 5–10× faster)
- Half/quarter resolution shadow cache options
Procedural Detail
- fBm Perlin noise overlay — adds micro-detail beyond VDB resolution
- Configurable scale, strength, octaves, roughness
VDB Support
- Density, temperature, flame, velocity, and colour grids
- Auto-sequence detection for numbered VDB files
- Dual VDB layer blending
- Point cloud rendering (PointDataGrid with splatting)
- Motion blur via velocity grid
AOV Outputs
- Density, emission, shadow, depth, motion vectors
- Per-light contribution (up to 4 lights)
- Albedo and normal passes (for downstream denoisers)
Viewport
- Interactive 3D bounding box and point cloud preview
- Viewport lighting preview
- Configurable point density and size
- Nuke 17.0v1 or later
- Windows x64 (upstream) or Linux x64 (this fork — RHEL 9 family verified, see LINUX_BUILD.md)
- OpenVDB (via vcpkg on Windows; Nuke's bundled OpenVDB on Linux)
# Install vcpkg dependencies
vcpkg install openvdb:x64-windowscmake -B build -DNUKE_ROOT="C:/Program Files/Nuke17.0v1" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build --config Release./build_linux.sh # see LINUX_BUILD.mdcmake --build build --config Release --target distCreates dist/VDBRender_v3/ ready to zip and share.
Neural compressed volumes (10–100× smaller .nvdb files):
cmake -B build -DNUKE_ROOT="C:/Program Files/Nuke17.0v1" -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DVDBRENDER_NEURAL=ON -DLIBTORCH_PATH=C:/libtorch
cmake --build build --config Release-
Copy the
VDBRender_v3folder to%USERPROFILE%\.nuke\plugins\and rename it toVDBRenderYour layout should be:
%USERPROFILE%\.nuke\plugins\VDBRender\nuke17\VDBRender.dll %USERPROFILE%\.nuke\plugins\VDBRender\nuke17\init.py %USERPROFILE%\.nuke\plugins\VDBRender\nuke17\menu.py %USERPROFILE%\.nuke\plugins\VDBRender\nuke17\lib\openvdb.dll %USERPROFILE%\.nuke\plugins\VDBRender\nuke17\lib\tbb12.dll ... -
Add this line to
%USERPROFILE%\.nuke\init.py(create the file if it doesn't exist):nuke.pluginAddPath('./plugins/VDBRender/nuke17')
-
Restart Nuke. VDBRender appears in the VDB menu.
Note: Runtime DLLs live in
lib/so Nuke doesn't try to load them as plugins. Do not move them into the parent folder.
- Create a VDBRender node from the VDB menu
- Connect a Camera to input 1
- Connect a Scene node (with lights and optionally an Axis for volume transform) to input 2
- Set the VDB File path and click Discover Grids
- Choose a Scene Preset or configure shading manually
- Clouds: Enable Shadow Cache (Quality tab) and set Env Mode to "SH + Virtual Lights" (Lighting tab) for 10–20× faster rendering
- Fire/Explosions: Use the Explosion colour scheme — it evaluates emission before density for fire-first ordering
- Sequences: Enable "Auto Sequence" to convert numbered filenames to
####padding automatically - Performance: Start with a lower Quality value and Proxy mode for fast iteration, then increase for final renders
| Input | Label | Description |
|---|---|---|
| 0 | bg | Background plate (sets output resolution) |
| 1 | cam | Camera |
| 2 | scn | Scene (lights, EnvironLight for HDRI, Axis for volume transform) |
- Wrenninge, M. (2015). Art-Directable Multiple Volumetric Scattering
- Schneider, A. & Vos, N. (2015). The Real-Time Volumetric Cloudscapes of Horizon Zero Dawn
- Jendersie, J. & d'Eon, E. (2023). An Approximate Mie Scattering Function for Fog and Cloud Rendering. SIGGRAPH 2023
- Kang, B. et al. (2002). Design of Advanced Color Temperature Control System for HDTV Applications
See THIRD_PARTY_LICENSES.txt for third-party library licenses.