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.
You can download the current version of Cavernosa here.
There are instructions for it's use here.
Source Code Extracts
As 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.
VoxLimitMCATable.cpp
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.
Here is a pic of the first version of Cavernosa in action, running as a plugin for the free 3d application Blender. Here is that old version that works as a plug-in for Blender releases before 2.1X.
Quick Start Guide
Hold 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 Trees
The 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.
Cavernosa's current texture blending algorithm with the textures replaced by pure red, green, and blue passes