Single Sided Meshing

  • The SEQUOIA Mesher object generates by default a watertight, double-sided mesh surrounding the point cloud.

  • However, the initial double-sided mesh can be reduced to a single-sided mesh passing through the point cloud by removing polygons based on normals information, and conforming the remaining polygons to the point cloud.

Workflow Overview

  • A pre-requisite for the removal of one side of the mesh is the existence of a Normals channel in the Point Cloud.

  • When the Point Cloud is meshed by the Mesher object, the Normals channel will be sampled and stored in a dedicated channel of the resulting mesh.

  • A specialized Cull Faces By Normals Similarity operator can be added to the Mesher object to remove the faces whose Normals are pointing in the opposite direction of the Point Cloud’s Normals encoded in the mesh.

  • Another dedicated operator called Conform To Particles can then be added to push the remaining polygons to the closest points of the Point Cloud.

Providing Point Normals

  • For the Face Culling to function properly, the Point Cloud must provide a Normal channel containing vectors that define the orientation of the points.

  • The Normal channel can come from various sources:

Existing Normal Channel

  • The source file could already contain a Normal channel.

  • For example, PRT files saved by Krakatoa from a PRT Surface or PRT Volume object inside 3ds Max, Maya or Cinema4D can contain a Normal channel based on the nearest mesh surface point’s Normal.

  • Such a Normal channel can be used directly by the Mesher object and the Cull Faces By Normals Similarity operator to remove one side of the mesh.

Procedurally Generated Normal Channel

  • The Normal channel could be generated in SEQUOIA using a Point Normal Generation operator.

  • This operator attempts to create a Normal channel based on the distribution of the Point Cloud data.

    • While the Normals could be generated on-the-fly, the process is relatively slow and it is recommended to export the Point Loader to cache the new Normal channel.

    • This way, the Mesher can then easily re-mesh the resulting SPRT data without having to re-run the Normals generation each time.

  • Note that this operator is not considered completely ready for production and only worls well in certain circumstances - for example with terrain scans.

[B] See the tutorial Single Sided Meshing Of A Terrain Scan for an example.

Pseudo-Normals From ScannerPosition And ScannerIndex

  • A Normal channel could be generated from existing ScannerPosition metadata and ScannerIndex channel.

  • Connecting the Point position with the ScannerPosition provides a “visibility hint”.

  • While it isn’t technically the true orientation of the surface at the Point, it defines a direction that is guaranteed to be on a visibility line that “sees” the scanner.

  • Thus, we can safely remove faces that do not face the ScannerPosition.

  • Again, it is recommended to export the Point Loader to cache the newly created Normal channel and speed up future meshing operations.

[B] See the tutorial Single Sided Meshing Using Scanner Position for an example.

Meshing With Normals

  • When the Mesher processes a Point Loader that contains the Normal channel, the Point Normal data will be sampled into a dedicated per-vertex Mesh vector channel similar to the Color or TextureCoord channels.

  • When saving a Mesher to XMesh file format, this data will also be saved as the Mapping2 channel (second UV texture coordinates channel).

  • To remove the back-facing polygons, add a Cull Faces By Normals Similarity operator to the Mesher or Mesh Loader that contains the sampled Normals channel of the Points.

  • The operator will compare the actual Mesh Normals with the Points’ Normal and if they are dissimilar, will remove the face.

  • As result, any faces that are pointing in the opposite direction to the Points’ Normal channel encoded in the Mesh will be culled, leaving only the front-facing ones.