LATO.2 factorizes vertex and topology flow, with 11% lower Hausdorff and 24K-face parts

LATO.2: Factorized 3D Mesh Generation with Vertex and Topology Flow

Hang Long, Tianhao Zhao, Junkai Lin, Youjia Zhang, Huipeng Guo, Rendong Liang, Jiale Xu, Jozef Hladký, Matthias Nießner, Yuanming Hu, Wei Yang

cs.GR, cs.CV

2026-07-12

LATO.2 splits mesh generation into a vertex flow and a vertex-conditioned topology flow. Point-cloud CD(L2) is 0.0407 vs LATO's 0.0421; part-wise meshes reach about 24K faces.

What problem this solves

A mesh that can be rigged has to put vertices where the shape needs them and keep the edges coherent. VecSet models and structured latents do something else: they emit a neural field or a voxel grid, then extract a surface with Marching Cubes. The triangles are dense, and connectivity was never a generation target.

The representation is the awkward part. Coordinates are continuous, connectivity is combinatorial, and the vertex count is not fixed. Autoregressive mesh models turn faces into tokens and predict them in order. The wiring is clean, and the token stream becomes too long to train once the mesh is detailed. Flow matching samples a continuous latent in parallel, which is faster and easier to condition on an image or a point cloud. LATO and MeshFlow take that route, then store vertex positions and connectivity in one shared latent. One flow has to fit two signals with very different statistics. Failures show up as drifting vertices and holes in the surface.

After the vertices are fixed, connectivity is only a relation among known points. It can live in a per-vertex feature and be read out as an edge probability.

Method

Four modules share one coarse voxel scaffold. V-VAE and T-VAE define the latents. V-Flow and T-Flow sample them.

Vertices are not regressed as a raw cloud. Each mesh contributes 819,200 surface samples with position, normal, and a displacement toward a vertex of the face they lie on. That is the vertex displacement field (VDF). PointNet embeds the samples, they are rasterized to a 1024³ sparse grid, and the grid is compressed to a 64³ latent with 32 channels. The decoder subdivides, drops empty voxels, and uses cross-attention to write the global latent back into the cells that remain. At the finest level an offset δ moves each vertex off the voxel center. The point set is unordered and variable in size, so the model first classifies occupancy and only then shifts the point inside the cell.

T-VAE sees only the realized vertices. Its encoder uses an adjacency mask: a vertex may attend to itself and to its true neighbors, and that mask is the only path for edges into the latent. The decoder removes the mask. An MLP scores every pair in both orders and averages the logits, so the graph stays undirected. The loss is an asymmetric focal loss plus KL, computed on true neighbors, top-K nearest vertices, and random negatives. At inference every pair is scored. Each score is a small MLP, and loop detection turns edges into faces.

Generation has three steps. An image or a point cloud first produces a coarse sparse structure, following TRELLIS. V-Flow, a 12-block flow-matching transformer, samples the vertex latent on the active cells. DINOv2 features enter by cross-attention. The target count enters as log₂ N through adaLN, from the ground-truth count in training and from the user at inference. Each T-Flow token is tied to one of those vertices, with the coordinate written in as a positional encoding. A 3D CNN compresses the coarse structure into a context cg, which is randomly dropped in training so the topology model can still run when the only input is an edited vertex set.

V-VAE is about 320M parameters and trains for 4 days, V-Flow 160M for 7 days, T-VAE 180M for 1 day, and T-Flow 240M for 2 days, all on 8 H100s. The mix is about 450K assets from TRELLIS500K, Objaverse, Objaverse-XL, 3D-FUTURE, Toys4K, and ABO, plus 100K procedural meshes.

For part-wise generation the coarse structure is cut into parts. Each part is scaled to fill the 64³ volume, decoded at full capacity, and transformed back. T-Flow then connects the union, or connects parts separately and stitches them. Translating, rotating, or joining vertices only requires another T-Flow pass. Concurrent Nexus also emits vertices before edges. Its vertices come from level-wise octree diffusion and its topology from a graph autoencoder. LATO.2 decodes vertices in one pass and recovers faces by loop detection.

Results

The main table is point-cloud-conditioned generation on one split. CD is the mean bidirectional surface gap. HD is the worst gap.

MethodTypeCD(L2)↓HD↓NC↑
MeshAnythingV2AR0.10830.23180.6946
MeshRippleAR0.04580.09410.8174
MeshFlowFlow0.04550.07720.8227
LATOFlow0.04210.07380.8262
LATO.2Flow0.04070.06570.8341

Against LATO, CD(L2) moves from 0.0421 to 0.0407, about 3%, and HD from 0.0738 to 0.0657, about 11%. Normal consistency moves from 0.8262 to 0.8341. CD(L1) moves from 0.0617 to 0.0596. MeshRipple, the strongest autoregressive entry, is at CD(L2) 0.0458. MeshAnythingV2 is at 0.1083. The mean-distance margin is small. The worst-case gap shrinks more.

Vertex reconstruction is sharper. With 1024-level quantization plus a continuous offset, V-VAE reaches CD(L1) 0.0003 and HD 0.0069. LATO's vertex autoencoder, quantized at 512, reports CD(L1) 0.0038, so the new CD(L1) is about 1/13 of that number. Removing the offset head leaves occupancy accuracy at 0.9752 and raises CD(L1) to 0.0011. The head moves points inside the voxel. It does not change which voxels are occupied. Removing the high-resolution VDF downsample raises CD(L1) to 0.0034 and drops IoU from 0.9603 to 0.8873. Dropping the 100K synthetic meshes drops occupancy accuracy from 0.9752 to 0.9134.

Table 3 splits topology error. Ground-truth vertices plus T-VAE, the upper bound, score CD(L2) 0.0351 and normal consistency 0.8615. Replacing the decoder with T-Flow yields 0.0399 and 0.8199. Replacing the vertices with V-Flow output yields 0.0407 and 0.8051. Surface distance barely moves past the autoencoder. Normals drop mostly when the topology flow replaces T-VAE. Removing cg moves CD(L2) from 0.0407 to 0.0411 and normal consistency from 0.8341 to 0.8238.

Sweeping the vertex budget from 0.2K to 4K keeps the object and densifies the mesh. Realized counts in the figure run from about 231 to 4235. No CD is reported for that sweep. Part-wise runs reach 12,853 faces at 6 parts and 24,003 at 34 parts. Another example goes from 9,963 faces at 3 parts to 24,039 at 21 parts. A deterministic edge completer is described as weaker than the topology flow. The paper does not give its numbers.

Why it matters

On CD this is a small step past LATO, about 3%. The new interface is the part that changes a pipeline. Topology is conditioned on the current vertices, so stitching and local rotation do not resample the whole mesh and do not need a hand-written repair rule per edit. In Figure 4, rotating a part while keeping the old faces stretches them into self-intersections. Rebuilding the boundary with T-Flow closes that junction. A single 64³ latent caps how many vertices one part can hold. Generating every part at full latent capacity, then stitching, reaches about 24K faces on the same grid. log₂ N is a direct vertex-count knob. The budgets shown in the paper run from 0.2K to 4K.

Limitations

The paper states three limits. Topology cannot fix a bad vertex set, because the edges are predicted on vertices that are already chosen. Pairwise scoring grows with the square of the vertex count and will need sparse candidates for larger meshes. The output is geometry and connectivity only. UVs, textures, and materials are missing.

Editing, stitching, and part-wise refinement are figures, not measurements. There is no surface error after a stitch, no count of removed self-intersections, and no non-manifold check on the seams. More parts produce more faces. That does not show quality rising with the part count. The quantitative table is point-cloud conditioned. DINOv2 is in the image path, and there is no image-to-mesh table, so Table 2 is not an image-generation score. Table 3 lists the full pipeline at the same CD(L2) of 0.0407, but HD 0.1029 and normal consistency 0.8051, against Table 2's HD 0.0657 and normal consistency 0.8341. The paper does not explain the mismatch. The CD gap versus LATO is about 3%, with no significance test. Nexus is not in the comparison table. The Figure 7 caption calls T-VAE connectivity reconstruction perfect, while the Table 3 upper bound is still CD(L2) 0.0351.

Terms

Source

What people are saying

Related papers

All paper explainers