pixal3d_mrp_mlx/pixal3d_mlx
m3ultra 7624051dbf Fix the UV baker's frame: o_voxel exports rotated
The everything-on job failed the gate at IoU 0.660 on geometry that measures 0.956.
Cause: o_voxel's to_glb applies _BLENDER_ROT on export, (x,y,z) -> (x, z, -y), which
is EXACTLY the inverse of to_camera_frame. So the vertex baker and the UV baker were
returning meshes in different frames and the gate double-rotated the UV one.

Verified numerically: OV == _BLENDER_ROT, and OV @ _BLENDER_ROT.T == I.

to_glb now un-rotates back into the voxel-grid frame and returns a Trimesh, so every
path in mesh.py speaks one frame. After the fix the baked mesh measures IoU 0.883 --
identical to its input -- with bounds matching to 3dp.

That is the THIRD frame bug this session (mesh vertices vs ProjGrid's rotated lattice;
marching_cubes' voxel-index space; now o_voxel's export rotation). None of them throw:
each produces a plausible object that renders fine and silhouettes wrong. The gate
caught all three, which is the argument for having it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 20:50:41 +10:00
..
__init__.py Pixal3D weight converter + corrected scope 2026-08-02 11:25:00 +10:00
camera.py Close all four open items: MoGe camera, manifold remesh, winding, UV bake 2026-08-03 20:39:45 +10:00
cleanup.py Close all four open items: MoGe camera, manifold remesh, winding, UV bake 2026-08-03 20:39:45 +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 Fix the UV baker's frame: o_voxel exports rotated 2026-08-03 20:50:41 +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