Out of Core SVO Builder: 1.2 release

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.

SVO Dragon

Voxelized dragon. Left side: Intersections / pixel show the structure of the SVO. Right side: Rendering of SVO with normal vector payloads with diffuse + phong shading.