pixal3d_mrp_mlx/pixal3d_mlx
m3ultra d338eca925 Vertex-colour baker: 0.2s against the UV path's >20 minutes
The texture stage produced correct PBR voxels, but getting them ONTO a mesh through
o_voxel's UV path is not viable on this build. Measured, on an already welded,
floater-free, decimated 214k-face mesh:

  o_voxel to_glb, remesh=True    killed at 20min
  o_voxel to_glb, remesh=False   >20min CPU, killed
  bake_vertex_colors             0.2s

xatlas scales badly and 214k is the decimation floor, so it cannot be fed a smaller
mesh either. The trellis-2 lane reached the same conclusion independently and ships
--baker vertex as its fast path; this now matches.

bake_vertex_colors samples the PBR attribute volume at each vertex and writes COLOR_0.
Positions map to voxel indices by the same linear aabb relation fdg_to_mesh uses, so
nothing is resampled; lookup is a sorted-key searchsorted, and misses keep neutral
grey rather than black.

Verified on the real pipeline output:

  bake     vertex colours, 96.1% of vertices hit      0.2s
  result   90,093 verts / 214,322 faces
           57,925 unique colours, mean RGB [105 100 87], std [40 35 38]
           3.9% still default grey (matches the 4% miss rate)
  TOTAL    266.2s end to end, peak 32.6GB

What this costs: no metallic/roughness maps, base colour only. That is the honest
trade and it is stated in the operator description rather than buried - remesh also
now defaults OFF in to_glb, since upstream's remesh=True assumes CUDA.

Operator gains a baker param (vertex default, uv opt-in and flagged offline-only).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 18:23:58 +10:00
..
__init__.py Pixal3D weight converter + corrected scope 2026-08-02 11:25:00 +10:00
cleanup.py Mesh cleanup: weld, strip floaters, iterative decimation 2026-08-03 16:13:50 +10:00
cond.py The shipped cascade: image -> GLB at silhouette IoU 0.969 2026-08-03 15:13:20 +10:00
convert.py Pixal3D weight converter + corrected scope 2026-08-02 11:25:00 +10:00
decoders.py The shipped cascade: image -> GLB at silhouette IoU 0.969 2026-08-03 15:13:20 +10:00
dino.py Proj conditioning: camera back-projection, grid_sample, DINOv3 (12/12 vs upstream) 2026-08-03 13:52:41 +10:00
mesh.py Vertex-colour baker: 0.2s against the UV path's >20 minutes 2026-08-03 18:23:58 +10:00
models.py Texture stage: tex SLAT + PBR decode, and the bake order that makes it tractable 2026-08-03 18:05:17 +10:00
naf.py All four proj extractors: NAF high-res branch, without natten 2026-08-03 14:39:29 +10:00
pipeline.py Texture stage: tex SLAT + PBR decode, and the bake order that makes it tractable 2026-08-03 18:05:17 +10:00
proj.py Proj conditioning: camera back-projection, grid_sample, DINOv3 (12/12 vs upstream) 2026-08-03 13:52:41 +10:00
sampler.py Texture stage: tex SLAT + PBR decode, and the bake order that makes it tractable 2026-08-03 18:05:17 +10:00
slat_flow.py Texture stage: tex SLAT + PBR decode, and the bake order that makes it tractable 2026-08-03 18:05:17 +10:00
ss_dec.py SparseStructureDecoder verified at correlation 1.00000000 2026-08-02 13:27:24 +10:00
ss_flow.py SparseStructureFlowModel verified against upstream at correlation 1.00000000 2026-08-02 12:03:12 +10:00