[A]nisochromatic Meshing

Gallery details

[A]nisochromatic Meshing is a re-meshing processes based on creating contour lines based on color values which are then meshed and grouped.

This implementation is based on the logic described in this algorithm [https://grgrdvrt.com/works/contour-lines/] for contour lines based on noise, in our case is from a color data mesh. I initially fell inlove with the iso-contouring by playing w/ ZBrush polygrouping & group loops functions. They produce extremely intricate groupings of meshes based on color thresholds as seen below. Obviously Z-Brush’s meshing capabilities are unmatched however I always wanted to attempt to generate a process that was similar.


As described in the Grgrdvrt post the typical way to achieve a process like this is implementing a marching cubes algorithm, however

This algorithm divides the plane in squares and uses a lookup table to determine segment configurations. It is a very interesting algorithm but it can only compute one isovalue at a time. To have all the isolines it has to be applied several times, thus performing some operation multiple times. Also if we want to connect the segments and interpolate their endpoints additionnals steps are required. Eventually the actual implementation is more tedious than it looks.

Groupings = Since we are interested in multiple iso-values at the same time (driven by the number of groupings the user wants) a better solution was needed in order to be able to create the mesh groupings that can near mirror the ZBrush groupings by polypaint. So instead of computing one iso-value per face, we will compute all the iso-values per face, add them to a list, create the winding, create a mesh and append it to the mesh created for each group. This will give us a continuous mesh loop around the entire global mesh, with each group containing a unique color.

.EXAMPLE BELOW = This example is looking at simply 2 groups, Group 1 w. values between 0.0 – 0.5 and Group 2 w. values between 0.5 – 1.0. The Yellow represents topological face edge index, White represents topological face vertex index and the Red represents vertex color data.

.DATA STRUCTURES = Left image is raw mesh w. color data vs Remesh based on iso contour values
.EXAMPLE GROUPING SIZE  = Same underlying data structure w/ Group Size of 2 vs Group Size of 32

CULEBRA BEHAVIOR SERIES: Where things get interesting is when we couple Culebra’s multi-agent / multi behavior system to drive the mesh grouping process. We can use the agent trails or the agent positions to redefine grouping zones as well as layer added behaviors.

MESHING BY TRAILS & BY POSITION Output changes dramatically when we switch how we want to generate the meshing process, below we see both by agent trails and by agent positions.


THESHOLD ADJUSTMENTS: We can also begin to get very interesting effects by varying the threshold values as well as the underlying mesh density

ZBRUSH EXAMPLE: As I mentioned earlier ZBrush was a huge inspiration for this process. Below we can see the grouping methods from ZBrush and the output loops


  • Share

Leave a reply

Your email address will not be published.