Home Cavernosa
PyGLUT GAME BOY
ADVANCE
Nintendo DS Java
Misc Code Links
My Site
Intro
Cavernosa
PyGLUT
GAME BOY
ADVANCE
Nintendo DS
Java
Misc Code
Links
 
Cavernosa
Intro
Instructions
Gallery
Screenshots
Download
 
Email me
mailto
 
Printer
Friendly

 
  

Cavernosa

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

Cavernosa's display options dialogue

Physics options dialogue

Copyright Andrew H. Cox. All rights reserved.
[email protected]


Hoogli Gallery: Turn any Web Page Into an Image Gallery With One Click

I now do a lot of web stuff as well as 3D Graphics. Come and see my Node.js and libevent based web app, and if you like it, you can even hire me for web projects that need a bit of higher than average performance technology to be built.