The Problem
In the last couple of years, we have seen various attempts to utilize VDB in real-time use cases. This was bootstrapped by fast SSD drives, increased VRAM on modern GPUs, and the introduction of the NanoVDB, a new GPU-friendly OpenVDB layout. But with all that, we never really saw a true, real-time example of VDB until ZibraVDB.
ZibraVDB enables true real-time for VDB by eliminating the main bottleneck, which is bandwidth. This is possible with the help of an innovative volumetric compression algorithm and blazing-fast decompression. ZibraVDB brings a completely new workflow for VFX, real-time, high-quality volumetric effects. But since it is a novelty, there are many questions raised when working with VDB in real-time.
In this article, we will break down a real-time VDB workflow using demos of Magnus Larsson as an example.

Workflow
Magnus uses Houdini for simulating VDB effects and Unreal Engine for assembling scenes and rendering. There are many ways how you can prepare your effects in Houdini for real-time usage. You should think about what channels to use, what resolution of effects should be, and how they will interact with the scene.
Magnus Larsson: The first thing I do is set up the simulations in Houdini. In the case of the “Cannon Test Range” scene, I first worked on the big Muzzle Flash for the Cannon and exported it to UE as a ZibraVDB. Once you have the Zibra plugin installed in UE, it’s just a simple drag and drop to import the ZibraVDBs
Creating effects in Houdini
Simulations are done in Houdini and using the Axiom Solver. One of the effects works in pair with RBD simulations made with RBD Bullet Solver and particle simulations for the small details.
The “Cannon Test Range” demo has two effects:
- The Cannon Muzzle Flash (density, temperature) peaks around: 646x324x951 voxels.
- Impact Smoke (density) around the concrete blocks peaks around: 612x401x846 voxels.
All effects compressed into a .zibravdb file to reduce the size and bring it to Unreal Engine.
Post Processing
Channels like temperature are not supposed to be visualized. So, if you want to get some nice emissive effect, you need to generate scatter or flame channels using the Pyro Bake Volume node in Houdini.
ZibraVDB for UE can render only 3 channels, which should be of a float type. Hence, it won’t be possible to render such channels as scatter, which is a vec3 channel. To overcome this limitation, you need to convert the scatter channel to a float channel. Here is a step-by-step instruction.
1. In the Pyro Bake Volume node, you need to enable the Bake Emission Volume checkbox. This will save any emission, like scatter and flame, into a separate channel Ce.

2. Ce channel represents the color of emission. The next thing you need to do is to convert Ce to a grayscale float value. You can save this value to the temperature channel since we don’t need temperature data anymore. For this, add a Volume Wrangle node and use the grayscale conversion formula. Now the temperature represents the intensity of emission instead of color. In UE, you can apply any color we want to this channel.

3. Now let’s do a clean-up. First, delete unnecessary channels. Second, use the VDB Activate node to deactivate empty blocks to optimize the VDB structure. This will speed up further operations.

4. Emission baked in Houdini might look very noisy. So to get rid of the noise, blur the channel with emission (temperature in our case) just a little using the VDB Smooth node.


5. The next optimization is optional. Usually data range for VDB channels is way bigger than you need. So it is a good practice to clamp data in those channels. Just use the Volume Wrangle node and clamp max values to the point where you start seeing a visual change. This step will help ZibraVDB to compress effects even more efficiently.

6. Now, just use the Volume Visualization node to get the correct look in the viewport. Use the temperature channel in the Emission tab to visualize it.
The whole setup should look like this.

Bringing to UE
Now, when the effect is ready, you can cache it using the ZibraVDB File Cache node. This will save the whole sequence to a single .zibravdb file.

Now you can simply drag & drop the .zibravdb file into the UE editor and add it to the scene.
Magnus Larsson: For the Cannon Test Range scene I set up a level sequence and I use the “Current Frame”, “Density Scale” and “Temperature Scale” parameters to animate the playback of the ZibraVDB, making it a bit faster in the beginning and then controlling how it fades out with the “Density Scale” and how bright the fire emission is with the “Temperature Scale” parameter. ZibraVDB assets have these and several other parameters exposed, which is very nice both for level sequences and for building custom blueprints.

When using ZibraVDB, you don’t need to create material, everything happens automatically. You can control the visual look and rendering parameters of your effect directly in the ZibraVDB actor properties. While ZibraVDB uses its custom renderer, you can also switch to the native Heterogeneous Volume renderer, but keep in mind that it might be slower.

Magnus also created RBD Simulation for the concrete blocks, which were exported to UE as an Alembic cache. Playback of ZibraVDB effects and RBD simulation in UE was matched using the Sequencer.

Particles were exported with SideFX Labs Niagara ROP exporter and synced with the other effects in the same way using the Sequencer.
The Result
While exploring ZibraVDB, Magnus created a bunch of demos to understand the possibilities of the tool.
Magnus Larsson: The reason I did the “Cannon Test Range” and “Smoke Pillar” was to see how far I could push real-time playback inside Unreal with ZibraVDBs, so the only optimization I did was to find the highest possible resolution that would still run real-time on my 3070 Ti graphics card.
Magnus also did a couple of tests utilizing many ZibraVDB effects in the scene. Like this one with many different smoke effects and lights:
Or even more fun, where ZibraVDB effects are used in gameplay. While spawning many ZibraVDB effects instead of flipbooks in the actual game might be overkill it is still useful for fast prototyping or previsualization.