{"id":670,"date":"2025-09-26T17:39:10","date_gmt":"2025-09-26T17:39:10","guid":{"rendered":"https:\/\/summergeometry.org\/sgi2025\/?p=670"},"modified":"2025-10-07T19:57:45","modified_gmt":"2025-10-07T19:57:45","slug":"dmesh","status":"publish","type":"post","link":"https:\/\/summergeometry.org\/sgi2025\/dmesh\/","title":{"rendered":"From Triangles to Gradients: Exploring DMesh++"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-1024x394.jpg\" alt=\"\" class=\"wp-image-963\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-1024x394.jpg 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-300x115.jpg 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-768x295.jpg 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-1536x590.jpg 1536w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-2048x787.jpg 2048w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-1200x461.jpg 1200w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/teaser_low-1980x761.jpg 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Our work was carried out under the mentorship of <a href=\"https:\/\/research.adobe.com\/person\/yi-zhou\/\" data-type=\"link\" data-id=\"https:\/\/research.adobe.com\/person\/yi-zhou\/\">Yi Zhuo<\/a> from Adobe Research, whose guidance was instrumental and very much appreciated. We also thank <a href=\"https:\/\/sanghyun.phd.sh\/\" data-type=\"link\" data-id=\"https:\/\/sanghyun.phd.sh\/\">Sanghyun Son<\/a> , the first author of the original <a href=\"https:\/\/sonsang.github.io\/dmesh-project\/\">DMesh<\/a> and <a href=\"https:\/\/sonsang.github.io\/dmesh2-project\/\">DMesh++<\/a> , for generously sharing his insights and providing invaluable input.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Article Composed By<\/strong> <strong>: <\/strong><br>Gabriel Isaac Alonso Serrato<br><em>in collaboration with<\/em><br>Amruth Srivathsan<br><br>Click Below to Try :<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/editor.p5js.org\/arthifact\/full\/icNJZfxEy\">Minimum Ball Playground <\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">INTRODUCTION<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This article introduces Differentiable Mesh++ (DMesh++), exploring what a mesh is, why discrete mesh connectivity blocks gradient flow, how probabilistic faces restore differentiability, and how a local, GPU-friendly tessellation rule replaces a global weighted Delaunay step. We close with a practical optimization workflow and representative applications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WHAT IS A MESH?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A triangle mesh combines geometry and topology. Geometry is given by vertex coordinates (named points in space such as A, B, C, and D) while topology specifies which vertices are connected by edges and which triplets form triangular faces (e.g., ABC, ACD). Together, these define shape and structure in a compact representation suitable for rendering and computation on complex surfaces.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"1080\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-edited.png\" alt=\"\" class=\"wp-image-1688\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-edited.png 1440w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-edited-300x225.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-edited-1024x768.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-edited-768x576.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-edited-1200x900.png 1200w\" sizes=\"auto, (max-width: 1440px) 100vw, 1440px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why Traditional Meshes Fight Gradients?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Classical connectivity is discrete: a triangle either exists or it does not. Gradient-based learning, however, requires smooth changes. When connectivity flips on or off, derivatives vanish or become undefined through those choices, preventing gradients from flowing across topology changes and limiting end-to-end optimization<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"960\" data-id=\"1703\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-2-edited-1.png\" alt=\"\" class=\"wp-image-1703\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-2-edited-1.png 1440w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-2-edited-1-300x200.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-2-edited-1-1024x683.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-2-edited-1-768x512.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-2-edited-1-1200x800.png 1200w\" sizes=\"auto, (max-width: 1440px) 100vw, 1440px\" \/><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Differentiable Meshes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Gradients are essential for learning-based pipelines, where losses may be defined in image space, perceptual space, or 3D metric space.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"810\" height=\"540\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-3-edited-2.png\" alt=\"\" class=\"wp-image-1702\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-3-edited-2.png 810w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-3-edited-2-300x200.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-3-edited-2-768x512.png 768w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Differentiable formulations make it possible to propagate error signals from rendered observations or physical constraints back to vertex positions, enabling tasks such as inverse rendering, shape optimization, and end-to-end 3D reconstruction. This bridges the conceptual gap between discrete geometry and continuous optimization, allowing mesh-based representations to function as both modeling primitives and trainable structures. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How DMesh++ Works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DMesh++ makes meshing a differentiable, GPU-native step. Each point carries learnable features (position, a \u201crealness\u201d score \u03c8, and optional channels).<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1215\" height=\"683\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-4-edited-3.png\" alt=\"\" class=\"wp-image-1700\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-4-edited-3.png 1215w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-4-edited-3-300x169.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-4-edited-3-1024x576.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-4-edited-3-768x432.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-4-edited-3-1200x675.png 1200w\" sizes=\"auto, (max-width: 1215px) 100vw, 1215px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A&nbsp;<strong>soft tessellation function<\/strong>&nbsp;turns any triplet into a&nbsp;<strong>triangle weight<\/strong>&nbsp;rather than a hard on\/off face.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"810\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-1-edited-1.png\" alt=\"\" class=\"wp-image-1698\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-1-edited-1.png 1440w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-1-edited-1-300x169.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-1-edited-1-1024x576.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-1-edited-1-768x432.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/09\/Dark-Blue-Gradient-Modern-Professional-Presentation-1-edited-1-1200x675.png 1200w\" sizes=\"auto, (max-width: 1440px) 100vw, 1440px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">During training, losses back-propagate to both positions and features, so connectivity can evolve smoothly. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"3D Reconstruction from Multi-View Images using DMesh++ (Bouquet)\" width=\"580\" height=\"435\" src=\"https:\/\/www.youtube.com\/embed\/7vulVAWpTc0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The &#8220;One-Line&#8221; Idea in DMesh++<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In DMesh++, we <strong>replace WDT<\/strong> (<strong> <em>\u039b<sub>wdt <\/sub><\/em><\/strong>) <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-1024x535.png\" alt=\"\" class=\"wp-image-1048\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-1024x535.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-300x157.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-768x401.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-1536x803.png 1536w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-2048x1070.png 2048w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-1200x627.png 1200w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/1-1980x1035.png 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">with a <strong>local Minimum-Ball test<\/strong> ( <em><strong>\u039b<sub>min<\/sub><\/strong><\/em> ) when scoring each candidate face. Instead of rebuilding a global structure, we only check the smallest ball touching the face\u2019s vertices and see if any other point lies inside it. This can be done quickly with k-nearest neighbor search on the GPU. The face probability is now: <br> <br><strong> <em>\u039b(F) = <\/em><\/strong><em><strong><mark class=\"has-inline-color has-accent-color\">\u039b<sub>min<\/sub>(F)<\/mark><\/strong><\/em><strong><em><mark class=\"has-inline-color has-accent-color\"> <\/mark> \u00d7  \u039b<sub>real<\/sub>(F)<\/em><\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark class=\"has-inline-color has-accent-color\"><strong><em>\u039b<sub>min<\/sub>(F)<\/em> <\/strong><\/mark>says, \u201cIs this face even <em>eligible<\/em> as part of a good tessellation?\u201d (now via the <strong>Minimum-Ball test<\/strong>)<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em><strong>\u039b<sub>real<\/sub>(F)<\/strong><\/em> says, \u201cIs this face on the <em>real<\/em> surface?\u201d (a differentiable min over the per-point realness \u03c8)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This swap <span style=\"margin: 0px;padding: 0px\">reduces the effective evaluation cost from&nbsp;<strong>O(N)<\/strong>&nbsp;(WDT) to&nbsp;<strong>O(log N)<\/strong>&nbsp;with k-NN and parallelization, in practice,&nbsp;<strong>achieving speeds up to 16\u00d7 faster in 2D<\/strong>&nbsp;and&nbsp;<strong>32\u00d7 faster in 3<\/strong><\/span>D, with significant memory savings.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"432\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-1024x432.png\" alt=\"\" class=\"wp-image-1044\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-1024x432.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-300x127.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-768x324.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-1536x648.png 1536w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-2048x864.png 2048w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-1200x506.png 1200w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/minball_speed-1980x835.png 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Minimum-Ball, Explained<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pick a candidate face <strong><em>F<\/em><\/strong> (segment in 2D, triangle in 3D). Compute its <strong>minimum bounding ball<\/strong> <em>B<sub>F<\/sub><\/em> \u200b: the smallest ball that touches all vertices of <em>F<\/em>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now check: <strong>is any other point strictly inside that ball?<\/strong> If <em>no<\/em>, <em>F<\/em> passes. If <em>yes<\/em>, reject. That\u2019s the <strong>Minimum-Ball condition<\/strong>. (It\u2019s a subset of Delaunay, so you inherit good triangle quality and avoid self-intersections.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DMesh++ makes this <strong>soft<\/strong> and differentiable. It computes a signed distance between <em>B<sub>F<\/sub><\/em>\u200b and the nearest other Point and runs it through a sigmoid to get <em><strong>\u039b<sub>min<\/sub><\/strong><\/em> :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"196\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.03.34-AM-1024x196.png\" alt=\"\" class=\"wp-image-1057\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.03.34-AM-1024x196.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.03.34-AM-300x57.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.03.34-AM-768x147.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.03.34-AM.png 1044w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"124\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.04.25-AM.png\" alt=\"\" class=\"wp-image-1058\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.04.25-AM.png 886w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.04.25-AM-300x42.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-9.04.25-AM-768x107.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Minimum-Ball Playground<\/strong>:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Click here to try:<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/editor.p5js.org\/arthifact\/full\/icNJZfxEy\">Minimum Ball Playground <\/a><\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-1024x508.png\" alt=\"\" class=\"wp-image-1080\" srcset=\"https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-1024x508.png 1024w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-300x149.png 300w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-768x381.png 768w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-1536x762.png 1536w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-2048x1016.png 2048w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-1200x595.png 1200w, https:\/\/summergeometry.org\/sgi2025\/wp-content\/uploads\/2025\/08\/Screenshot-2025-08-12-at-10.19.47-AM-1980x982.png 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How to use it?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click on the canvas to drop points. Every pair of points becomes a candidate edge <em>F<\/em>. We draw the <strong>minimum ball<\/strong> <em>B<sub>F<\/sub><\/em>\u200b (the smallest circle touching the two endpoints) and compute a <strong>soft eligibility<\/strong> via a sigmoid of its clearance to the nearest third point:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because faces are <em>probabilistic<\/em>, the topology can change cleanly during optimization. You don\u2019t hand-edit connectivity; it emerges from the features.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recap: A Practical Optimization Workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Start:<\/strong> Begin with points (positions + realness \u03c8)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Candidates:<\/strong> Form nearby faces (via k-NN)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Minimum-Ball:<\/strong> For each face, find the smallest ball touching its vertices (if no point is inside, it\u2019s valid) \u2192 gives <strong>\u039b\u2098\u1d62\u2099<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Weight by Realness:<\/strong> Multiply by vertex \u03c8 to get final probability <strong>\u039b = \u039b\u2098\u1d62\u2099 \u00d7 \u039b\u1d63\u2091\u2090\u2097<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optimize:<\/strong> Compute the loss (e.g., Chamfer), and backpropagate to update the points and \u03c8<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Output:<\/strong> Keep high-\u039b faces \u2192 final differentiable mesh<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Some Applications of DMesh++<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">DMesh++ demonstrates how differentiable meshes can power real applications. Here are some ideas:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Generative Design:<\/strong> Train models that evolve shapes and topology for creative or engineering tasks without manual remeshing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Adaptive Level of Detail:<\/strong> Automatically refine or simplify geometry based on learning signals or rendering needs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Feature-Aware Reconstruction:<\/strong> Learn geometric structure, merge fragments, or fill missing regions directly through optimization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Neural Simulation:<\/strong> Enable physics or visual simulations where mesh shape and motion are optimized end-to-end with gradients.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Future Directions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Looking ahead, future work on DMesh++ could focus on improving <strong>usability and scalability<\/strong>, for example, by developing more accessible APIs, real-time visualization tools, and integration with common 3D software. On the algorithmic side, enhancing the <strong>tessellation functions<\/strong> for higher precision and stability, expanding support for <strong>non-manifold and hybrid volumetric surfaces<\/strong>, and further optimizing GPU kernels for large-scale datasets could make differentiable meshing faster, more robust, and easier to adopt across geometry processing, simulation, and machine learning workflows.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Our work was carried out under the mentorship of Yi Zhuo from Adobe Research, whose guidance was instrumental and very much appreciated. We also thank Sanghyun Son , the first author of the original DMesh and DMesh++ , for generously sharing his insights and providing invaluable input. Article Composed By : Gabriel Isaac Alonso Serratoin [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31],"tags":[],"ppma_author":[20,3],"class_list":["post-670","post","type-post","status-publish","format-standard","hentry","category-research"],"authors":[{"term_id":20,"user_id":0,"is_guest":1,"slug":"cap-gialonsoser","display_name":"gialonsoser","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","author_category":"","first_name":"","last_name":"","user_url":"","job_title":"","description":""},{"term_id":3,"user_id":0,"is_guest":1,"slug":"cap-amruth","display_name":"amruth","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/?s=96&d=mm&r=g","author_category":"","first_name":"","last_name":"","user_url":"","job_title":"","description":""}],"_links":{"self":[{"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/posts\/670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/comments?post=670"}],"version-history":[{"count":10,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/posts\/670\/revisions"}],"predecessor-version":[{"id":1949,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/posts\/670\/revisions\/1949"}],"wp:attachment":[{"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/media?parent=670"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/categories?post=670"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/tags?post=670"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/summergeometry.org\/sgi2025\/wp-json\/wp\/v2\/ppma_author?post=670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}