Convert DA3 Geometry to Mesh
From Depth Anything 3 depth to a textured mesh in one node
- da3_geometry
- MESH
The DA3 pipeline's payoff node. DA3GeometryToMesh takes the da3_geometry packet from DA3Inference and triangulates the depth map into a MESH - with your source image baked in as the base color texture. This is the DA3 family's answer to MoGe's point-map-to-mesh node, with one extra trick up its sleeve: in multi-view mode it aligns every frame into a shared world frame before meshing, so you can reconstruct a whole scene, not just one photo's worth of depth.
How it works
Each pixel of the depth map gets unprojected into 3D using the camera intrinsics (inverse-K), the result is filtered through the sky and confidence masks, and the surviving pixels are connected into a grid mesh - the same triangulation core MoGe uses. Then it does the coordinate conversion (OpenCV Y-down/Z-forward to glTF Y-up/Z-back) and hands you a MESH. Multi-view is where it gets interesting: the geometry packet carries extrinsics, so each frame is placed in a common world space before triangulation, which is how a stack of photos becomes one coherent reconstruction. Feed the MESH into Save 3D Model for a .glb.
The dials that matter
- batch_index (default 0) - which image of a batched geometry to mesh. Batches can't be stacked into one MESH because per-image vertex counts differ.
- decimation (1–8, default 1) - vertex stride; 1 is full resolution, 2 is half, and so on. Drop it for lighter meshes.
- discontinuity_threshold (0–1, default 0.04) - drops triangles whose 3×3 depth span exceeds this fraction. This is the anti-tearing dial at occlusion edges; 0 turns it off.
- confidence_threshold (default 0.1) - excludes low-confidence pixels, but only when the geometry has a confidence map, i.e. Small/Base models. 0 keeps everything.
- use_sky_mask (default on) - excludes sky pixels (sky ≥ 0.5) for Mono/Metric models.
- texture (default on) - carries the source image through as baseColor.
Where people get burned
Two things. First, mono mode has no intrinsics - the node falls back to an assumed ~60° FOV pinhole camera and logs a warning that 3D reconstruction may be inaccurate. Metric-Large gives you real metres, but the geometry is only as good as that assumed lens. Second, the empty-mesh error: it happens when sky/confidence filtering culls too much. The node tells you the fix in its own error - raise discontinuity_threshold, lower confidence_threshold, or disable use_sky_mask. Non-finite depth pixels get zeroed with a warning before unprojecting, so those don't silently corrupt the mesh. And as with everything monocular, occluded backsides simply aren't there - multi-view input is the only way around it.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| da3_geometry | DA3_GEOMETRY | — | |
| batch_index | INT | 00–4096 | Which image of a batch to convert. Per-image vertex counts differ so batches cannot be stacked. |
| decimation | INT | 11–8 | Vertex stride. 1 = full resolution, 2 = half, etc. |
| discontinuity_threshold | FLOAT | 0.040–1 | Drop triangles whose 3x3 depth span exceeds this fraction. 0 = off. |
| confidence_threshold | FLOAT | 0.100–1 | Exclude pixels whose per-image normalised confidence is below this value (0 = keep all, 1 = keep only the single most confident pixel). Used when the geometry has a confidence map (Small/Base models). |
| use_sky_mask | BOOLEAN | true | Exclude sky-probability pixels (sky >= 0.5) from the mesh. Used when the geometry has a sky map (Mono/Metric models). |
| texture | BOOLEAN | true | Use the source image as a base color texture. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| MESH | MESH | — |