For now, this project/branch is all about using VDB as a caching system for the smoke simulator, and implementing rendering of VDB volumes in Cycles.
This is similar to the particle mesher that I used to work on, basically such features are postponed for until there is node-based modifier system. Also I re-factored the mesher recently (I’m not giving up on this ), the goal is to make it more generic, so we could re-use the code to e.g. mesh a smoke simulation.
Thanks to you too!
Most likely the answer is similar to the particle mesher case, we’ll need nodes. But yes I can envision a VDB boolean node. As a matter of fact, the particle mesher is using the difference operation at some point in the code.
Yes, Lukas merged the code in the Gooseberry branch today. As a tip, when doing (and exporting) a smoke simulation, try to ensure the voxels are uniform. It’s a bit tricky to do this in the current smoke simulation where you plug the resolution, so the easiest to achieve that is by using a domain with uniform scale (like a perfect cube). You can still use adaptive domain though. The reason is because the OpenVDB volume ray intersectors only work with uniform voxels. In short, uniform voxels mean that the empty space in the domain object will be skipped -> faster rendering. Ultimately, the smoke code will be changed/improved so uniformity will always be ensured
Here’s a comparison between the current ray marching and the VDB version, this is not to be considered as a general case, as every simulation is different! Also I used a very small step size to see how performant lookup is.