Cavernosa is a volumetric sculpture tool which allows the creation of 3d models in a clay-like solid medium, from which a traditional surface representation is implicitly generated.
The vertices of the implicit surface have a dynamic simulation applied to them which involves forces from sources such as springs which are coincident with edges of the surface tessellation. This simulation causes the surfaces to behave like rubber sheets and acts to smooth them out.
My work on Cavernosa was sparked off by the demo and paper released by Stan Melax of Bioware. His stuff is here. Since my goal in creating Cavernosa was to allow the modeling of expansive natural environments containing features such as caves that can't be represented by a heightmap, I built it around a hierarchical binary voxel grid. By binary, I mean that a voxel can exist in one of two states: SOLID and CLEAR, and has no extended attributes such as colour and opacity. This compressed representation allows grids of up to 2'097'152 x 2'097'152 x 2'097'152 voxels to be worked on.
Source Code ExtractsAs of this writing, Stan's paper is unavailable so I present some of Cavernosa's source code here to help you follow in his footsteps.
First up is the triangulation table that encodes the 256 cases of a group of eight neighbouring voxels, each in a solid or clear state. The entries are lists of triangles separating solid from clear space. Stan's paper details a few base cases of his Limit-MCA and this table encodes all the variations of those.
My algorithm to extract triangles from a voxel grid is implemented in the following files.
VoxLimitMCAExtractor.h, VoxLimitMCAExtractor.cpp, and VoxLimitMCACornerConnections.cpp.
Cavernosa's GUI was built using the GLOW toolkit which is a framework for the construction of GUIs that are rendered in 100% pure OpenGL.
Wanted: One 3D input device. Haptic feedback would be nice but anything with a few more degrees of freedom than a standard mouse would receive a warm welcome. If you think a volumetric sculpting application might make a nice demo for your company's product please get in touch with me. I'll happily code in support and I am open to feature suggestions as well. Take a look at the only commercial offering to get an idea of what an artist can achieve rapidly with the combination of a volumetric modeling application and a haptic 3d input device.
I would love to be sent vox files of any sculptures made with Cavernosa.
Quick Start GuideHold down the 'x' key and move the mouse in the viewport to circle.
Hold down the 'c' key and move the mouse in the viewport to move in a 'slice' of the voxel grid.
These two keys will be alternated to do most work outside spray mode. In spray mode, which projects the current tool-tip forwards untill it hits something, the 'f' key will come into play for aiming the current tool-tip at surfaces as it enables free mouse-look.
Note that with Caps Lock on these keys won't register.
Click the left mouse button to add the current tool tip to the voxel grid, click the right button to subtract it.
Use the 'Distance' slider at the bottom of the screen to zoom out untill the work volume fits in the viewport or to zoom in, perhaps to dig tunnels in spray mode.
Go here for more information.
Making Splitless BSP TreesThe meshes that Cavernosa generates when smoothing is disabled have all their verts on a regular grid and can be used to generate a BSP tree that is both splitless and very well balanced.
To disable smoothing, bring up the physics dialogue box from the side panel. Switch to the 'multi' physics type and enable the 'To Grid' force and damping, disabling all other forces.