Optimizing 3D Models
Techniques and Best Practices for Efficient Mesh Processing

Jaebum Jung, Wolfram Research

#WolframTechConf

Why Optimize 3D Meshes?

3D models are used in graphics, simulation, CAD, 3D printing, AR/VR, and more.  Raw meshes are often too large, noisy, or poorly structured.

Efficient mesh processing enables:

Faster rendering and computation

Lower memory and storage requirements

Improved simulation and print quality

Mesh Processing Pipeline

(RowWithSeparator[, , (Labeled[, "Simplify"]), (Labeled[, "Smooth"]), (Labeled[, "Remesh"])])

Typical workflow

Simplify: Reduce complexity, keep the shape.

Smooth: Remove noise, preserve features.

Remesh: Improve mesh quality and uniformity.

Mesh Simplification:  Background

Reduce the number of vertices and faces while preserving shape and features.

Techniques

Edge collapse (merging vertices)

Quadric error metrics (minimize geometric error)

Vertex clustering (group nearby vertices)

Mesh Simplification:  In Practice

SimplifyMesh[]

SimplifyMesh[,{"MaxVertexCount", 500} ]

SimplifyMesh[,{"MaxVertexCount", .5} ]

SimplifyMesh[,{"MinEdgeLength", .3} ]

Mesh Simplification:  Application

Create simplified versions of a complex mesh to save resources when rendering

MouseOver

levels=SimplifyMesh[, {"MaxVertexCount", #}]&/@{1,0.4,0.05};

GraphicsRow[Table[,{i,Length[levels]}],Spacings->80]

BarChart[Table[MeshCellCount[level,2],{level,levels}],]

Mesh Smoothing:  Background

Remove noise to improve surface quality

Techniques

Adjusts each vertex by averaging its neighbors (Explicit Laplacian smoothing)

Smooths the mesh by solving a global diffusion equation (Implicit Laplacian smoothing)

Mesh Smoothing:   In Practice

bethoven=;

SmoothMesh[bethoven, Method->"ExplicitLaplacian"]

SmoothMesh[bethoven, Method->"ImplicitLaplacian"]

SmoothMesh[bethoven, 
 Method -> {"ExplicitLaplacian", "UniformLaplace" -> True}]

SmoothMesh[bethoven, Method->{"ImplicitLaplacian", "TimeStep" -> .05}]

Mesh Smoothing:  Application

Clean up 3D scans of historic artifacts

mesh=;

smesh=SmoothMesh[mesh]

Row[Panel[]&/@{mesh, smesh}, Spacer[10]]

Mesh Remeshing:  Background

Rebuild surface with uniformly-sized triangles

Techniques

Isotropic remeshing (uniform triangles)

Adaptive remeshing (denser in detailed areas)

Edge operations (split, collapse, flip)

Mesh Remeshing:   In Practice

bethoven=;

Remesh[bethoven, Method->"Uniform"]

Remesh[bethoven, Method->"Adaptive"]

Remesh[bethoven, Method->{"Uniform", "EdgeLength" -> .8}]

Remesh[bethoven, Method->{"Adaptive", "MinEdgeLength" -> .1,"MaxEdgeLength" -> 1}]

Mesh Remeshing:  Application

Uniform meshes are more animation friendly

cow=ResourceData["Cow"];
remeshCow=Remesh[cow];

GraphicsRow[{cow,Remesh[remeshCow]},ImageSize->400]

p=Join[#, Reverse[Rest@Most[#]]]&[Table[i,{i,0, .4, .4/20}]];size = 250;Row[Function[{model},]/@{cow,remeshCow}, Spacer[5]]

Summary & Takeaways

Efficient mesh processing is essential for modern 3D workflows.

SimplifyMesh, SmoothMesh, and Remesh are key tools.

Understand your data and goals to choose the right parameters.

Combine methods for best results.

Other Talks

Enhancing 3D Models: Animation and Product Designs 
with Subdivision Surfaces
Thursday 3 : 30  PM  CDT

Office Hours: Geometry, GPU and Graphs AMA
Friday 1 : 30  PM  CDT

subscribe to Wolfram R&D
(HyperlinkURL["\!\(\*StyleBox[\"https\",FontSize->24]\)\!\(\*StyleBox[\":\",FontSize->24]\)\!\(\*StyleBox[\"//\",FontSize->24]\)\!\(\*StyleBox[\"www\",FontSize->24]\)\!\(\*StyleBox[\".\",FontSize->24]\)\!\(\*StyleBox[\"youtube\",FontSize->24]\)\!\(\*StyleBox[\".\",FontSize->24]\)\!\(\*StyleBox[\"com\",FontSize->24]\)\!\(\*StyleBox[\"/@\",FontSize->24]\)\!\(\*StyleBox[\"WolframRD\",FontSize->24]\)", https://www.youtube.com/@WolframRD])

#WolframTechConf