Thursday, August 11, 2016

Modeling with Volumes in Houdini

in Houdini there are a number of methods of working with voxels or volumetric formats
(there a few different types)

These could be features we wish to emulate with our development.
Users can quickly convert

* convert any 3D geometry into a voxel format,
though we can be only concerned with converting triangles to begin with

basic BG material on voxels
https://youtu.be/fGMu5kDNKU8

my high level understanding of options provided:

users have options to specify sampling divisions - the geometry is sampled with a user defined amount of rays to determine where the surface lies in the voxel array. The higher the ray samples - the more accurate the resulting voxel grid will be. This seems similar to changing the number of subdivisions in an octree.

I think the bounding box and centroid must be calculated first in order for rays to be fired toward the centroid. At some point it must be determined if the ray vector is inside the solid object or not possibly by using the direction of the surface normal as a guide.

There is an option for the user to offset the surface of the resulting "voxel grid" in the direction of the original surface's normals. (From a high level or artistic point of view (Houdini is aimed at creative but tech savvy people) this will push the resulting volume closer to the surfaces of the original geometry - useful if the ray sample size is needed to be kept low)

Houdini Help files on "isoffset node"
"The IsoOffset operation builds an implicit function given the input geometry. It then uses the implicit function to create a shell at a fixed offset from the original surface."



people talk about the benefits of modeling with voxels over polygons or triangles - it seems Boolean operations of polygonal solids are not easy - but they are with volumes. Volumes can be more easily modified in powerful procedural ways - basically with mathematics - ie a noise function - to generate complex results that would be difficult with traditional polygonal modeling techniques.

Multiplying certain values of a voxel 'grid' with an implicit noise function can add or remove voxels within the volume, for instance it has been used with computer graphics (CG) to gererate vein like structures present with 2 different materials interacting with each other - ie veins of gold running through quartz or veins of jelly running through icecream for example. The complex shapes present in atmosphereics like clouds in CG are created with such techniques - adding and subtracting and multiplying noise functions with volumetric data.
see papers on the A-Team movie's clouds

Modeling with volumes takes advantages of all the operation possible with voxels with the ability to convert or approximate back and forth at anytime between volumetric file formats and polyonal or triangular file formats. Artists can then work in a way unbounded compared to old-school polyonal only type techniques ie manual vertex manipulation and subdivision algorithms ie Catmul-Clarke, open Subdiv from Pixar.

Other voxel operations we might try to emulate with a voxel modeling program:

Boolean operations
Add / union
Subtract / difference
Intersect

Mathematical functions : Multiply / Divide with other functions

There are a suite of other common modelling tools that can be considered useful for modeling in general such as found in Houdini and Maya -some of which are beyond the scope of what we are interested but worth thinking about:

* creating 1,2,3D arrays of objects
* transformation tools - translate, rotate, scale, skew
* peak/push tools - pushing points along their normals - basically making them expand / contract in 3D
* copying objects (stamping) onto the point positions of another object
* stamping an object onto a point (of another object possibly) and auto aligning that object to the normal of that point (in Houdini known as a 'rivet')
* creation of nulls (visible as a 3D 'cross' or 'plus') simply to use as a guide or marker in Euclidean space
* creation of parametric primitives to use as guides or modeling templates - ie circles, squares, torus, spheres, cubes arbitrary curves etc etc.
* extraction of a subset of an object as a new separate shape
*mirroring of a object
* duplication of an object with an added transform
* locking of an object so it cannot be moved accidentally













No comments:

Post a Comment