For future research and publication, I’ve been updating my Out-Of-Core Sparse Voxel Octree Builder (or ooc_svo_builder, if you’re in a hurry) based on our HPG paper. It’s faster, cleaner and more fun!
Source, Win64/Linux64 binaries and manual can be found in the github repository. It also builds on OSX.
New in this release:
- New voxelization method based on the Schwarz & Seidel method. To my knowledge, this is the first public CPU-based implementation of the non-solid voxelization method from their excellent paper. The old method (based on Huang et al’s work) is also still available in the source.
- Faster morton code encoding method based on LUT’s. See this blogpost.
- Sparse model SVO Building optimization using a small extra buffer, configurable with -d. This delivers a great speedup, ranging from 60% to 80% for most models.
- Configurable VoxelData structure now, instead of DataPoint struct. It’s now easier to add your own voxel payloads to the framework.
- New timing system for debugging purposes: detailed rundown on how many time goes into I/O and algorithm, broken down into the 3 steps (partitioning, voxelization and SVO building)
- Support for vertex color sampling in tri_convert.
- Linux compilation fixes. GCC should be a happy compiler now, no warnings.
- Updated Readme.md to contain the full manual, removed the old HTML one.
- Various performance improvements.
A very quick rundown on how to use it:
tri_convert -f bunny.ply
Converts an existing model (bunny.ply) to our .tri format. Results in bunny.tri (header) + bunny.tridata (actual data).
svo_builder -f bunny.tri -s 4096 -l 128
Builds an SVO of size 4096^3 on bunny.tri, with a runtime memory limit of 128 Mb. Results in bunny.octree (header) + bunny.octreenodes (nodes) + bunny.octreedata (voxel payloads). The file format is described in the readme, and the header file octree_io.h contains read/write methods for this file format.