Conform Frost To Particles

Introduction

Thinkbox Software’s FROST is often used to convert a point cloud, for example a LIDAR data set, to a mesh. Unfortinately, the resulting mesh does not pass through the original surface represented by the particles, but is offset by as much as the meshing Radius value. In addition, the result contains mesh on both sides of the original surface thanks to the Metaballs’ alogrithm.

In the following example, we will attempt to improve the result from the FROST meshing using GENOME modifiers.

Basic Example

In the following example, we will use once again the geometry object typically used as a stand-in for complex meshes - a 32 segments Teapot:

../../../../_images/GNM_ConformingFrostToParticles_Teapot_viewport.png

Using a Particle Flow system set to place 200,000 particles on the surface via Position Object operator, we create the following particle cloud:

../../../../_images/GNM_ConformingFrostToParticles_PFlow_viewport.png

We save these particles to disk using Krakatoa. In this example, only the Position channel was saved.

Then we use a PRT Loader to bring back all the particles into 3ds Max. We have to do this, because GENOME does not support direct loading of Particle Flow particles yet:

../../../../_images/GNM_ConformingFrostToParticles_PRTLoader_viewport.png

Now we can create a FROST object using the PRT Loader.

To demonstrate the awesome power of GENOME, we will use just Metaballs meshing with Radius of 1.0 and Absolute Spacing of 0.5 which gives us a rather rough surface:

../../../../_images/GNM_ConformingFrostToParticles_FrostMB_viewport.png

We select the “internal” faces of the resulting mesh using a GENOME MagmaFlow that checks for the Element Index of each face and selects all elements but the outside mesh:

../../../../_images/GNM_ConformingFrostToParticles_SelectElement_magma.png
../../../../_images/GNM_ConformingFrostToParticles_SelectElement_viewport.png

Using a DeleteMesh modifier, we delete the selected “inside” faces.

Now we can add a second GENOME modifier to the stack and query the average position of particles within a Radius of 2.0 units, and move each vertex to its averaged particles position:

../../../../_images/GNM_ConformingFrostToParticles_FrostConform_magma.png

The result looks very promising:

../../../../_images/GNM_ConformingFrostToParticles_FrostConformed_viewport.png

When we compare it to the original mesh which it is based on indirectly via FROST Meshing and GENOMEConforming, we notice that it matches very closely except for the very sharp corners where elements like body and handle meet:

../../../../_images/GNM_ConformingFrostToParticles_FrostConformComparison_viewport.png

Here is the same as Wireframe:

../../../../_images/GNM_ConformingFrostToParticles_FrostConformComparisonWire_viewport.png

Advanced Example

Using the 6,800,738 particles GMC Sierra Dataset provided by McCarthy Engineering Inc. / Dwayne Ellis, we can attempt to perform the second part of the above test - the FROST mesh is too complex to try to delete faces based on elements connectivity.

Here is the UNconformed FROST mesh produced with Radius of 1.0, Zhu/Bridson mode, Blend Radius of 3.0. It has 808,371 vertices and 1,615,182 faces. Meshing time was 18.7 seconds on a Quad i7 with HT (8 threads):

../../../../_images/GNM_ConformingFrostToParticles_GMC_1_NoConform_NoColor_viewport.png

Here is the result after 15 seconds of calculation using a GENOME modifier with the same flow as shown above. It used a Particle Search Radius of 2.0:

../../../../_images/GNM_ConformingFrostToParticles_GMC_1_Conform_NoColor_viewport.png

It works well with higher mesh resolutions too - the following is the UNconformed FROST mesh at Radius 0.5, 3,336,301 vertices, 6,674,654 faces. It took 18.8 seconds to mesh on a Quad i7 with HT (8 threads):

../../../../_images/GNM_ConformingFrostToParticles_GMC_05_NoConform_NoColor_viewport.png

The conforming process took 42 seconds using all 8 cores at 100%. The difference is minimal since the original unconformed FROST surface was less than 5 mm away from the actual LIDAR scan surface.

../../../../_images/GNM_ConformingFrostToParticles_GMC_05_Conform_NoColor_viewport.png

Reducing the Particle Radius to 0.33 produces a relatively uneven surface without conforming. The meshing took 24.576 seconds and resulted in 7,599,239 vertices and 15,196,326 faces. Click on the thumbnail to see the full resolution image with all the noise:

../../../../_images/GNM_ConformingFrostToParticles_GMC_033_NoConform_NoColor_viewport.png

Applying the Genome Conform modifier with Particle Search Radius of 2.0 took 162 seconds, but the result was very smooth. Unfortunately, it also blurred some of the details, for example the GMC logo lost resolution, because the vertex positions were smoothed over the avergae of too many particles:

../../../../_images/GNM_ConformingFrostToParticles_GMC_033_Conform_NoColor_viewport.png

In the following image, the Particle Search Radius was reduced to 1.5. The conforming took 66 seconds and the result was fairly smooth, without blurring the details as much:

../../../../_images/GNM_ConformingFrostToParticles_GMC_033_Conform15_NoColor_viewport.png

.

../../../../_images/GNM_GMC_Comparison.gif

Conclusion:

GENOME can be very useful for post-processing FROST meshes from high-resolution LIDAR point clouds.