There are a few steps in this process. Here is a high-level outline.
- Create a sequence of OpenVDB grids in Houdini
- Execute a python SOP that writes out to an ascii file with the voxel data. Basically you iterate over all the voxels and output the values to a text file. Chances are you have to output a bunch of metadata too, such as object to world transforms, dimensions, etc. Note in this process we are also essentially converting a sparse grid to a dense one. Read up on OpenVDB if you are curious about sparse volumes.
- In Unreal, you need to read this file into a 3d array with the same dimensions as your original grid in Houdini.
- The last step is converting the 3d array into a 3d texture that lives on the graphics card. There are some API calls that make this easy.
Note this is a very general overview of how it works. In practice there are a bunch of optimizations you can make.