Skip to content

SE version 2

Ok, time to rewrite the voxel Storage Engine, it will be fun to see how many times I have to do this during the development. Version 1 of the storage engine was super basic with just a big array storing all the voxels.

To create the smoothing-tool we need to be able to store 2 versions of the volume and I have come to the conclusion that best way to solve this is by introducing a undo-redo history scheme. To be able to use really large filter kernels with our smoothing we want to use separable convolution which needs a temporary buffer to store the intermediate data, this can also be solved with the undo-redo history scheme.

To ray trace the current storage engine we just step along the ray and check for an ISO surface. This works great and create minimum artifacts but is dependent on the world size which is completely unacceptable. In Baerentzen’s PhD thesis he uses a two-level grid the solve the problem but I think an octree is a much better solution. The leafs in my octree will contain grid of 16^3 voxels or something similar to that.

So version 2 of my storage engine will have the following features:
1. Octree based, with voxel grids in leafs.
2. Undo-redo history with support for temporary data.
3. Disk storage.
4. Basic statistics.

I want to minimize code entropy during the research phase of the project and therefor I will exclude the following features for now:
1. No equivalent to Photoshop Layers.
2. Only one voxel file open at one time.
3. All voxels must fit in memory.
4. No OpenCL/CUDA acceleration.

Categories: Chatter.