BD OVoxel Bake
TRELLIS2 voxelgrid to textured mesh in one node — BD OVoxel Bake
- voxelgrid
- mesh
- diffuse
- normal
- metallic
- roughness
- alpha
- status
Here's the thing nobody warns you about when you generate a 3D asset with TRELLIS2: what comes out of the model is a voxelgrid, not a mesh you can ship. To get an actual textured mesh you used to have to assemble a four-node chain - simplify, UV unwrap, then a manual bake where a mistake left you with seam lines or a color mismatch. BD OVoxel Bake collapses all of that into one node. Give it the TRELLIS2 voxelgrid, get back a simplified, UV-unwrapped, PBR-textured mesh and the individual maps, using Microsoft's o_voxel reference implementation - the same bake pipeline as TRELLIS2's official demo.
The mechanics are worth understanding because they explain the settings. The node runs six stages internally: multi-stage CuMesh simplification with topology repair, GPU UV unwrapping with vertex normals, BVH projection onto the original high-res mesh so sampling is accurate, trilinear interpolation from the sparse voxel tensor, UV seam inpainting, and a coordinate-system conversion. That last one is exactly why your TRELLIS2 output shows up correctly oriented where a naive bake would be flipped.
The inputs that actually matter
Three required inputs, and you mostly touch two of them:
voxelgrid- the TRELLIS2 voxelgrid carrying PBR attributes (it needs the original vertices/faces and the attrs tensor). Wire it straight fromBD Pixal3D Image to 3D'svoxelgridoutput or a TRELLIS2 texture node.decimation_target(default 50000) - target face count after simplification. Lower it if you want a genuinely low-poly asset; raise it if you're keeping detail.texture_size(default 2048) - output texture resolution. The voxelgrid source runs 512–1536, but normal maps genuinely benefit from going higher. 2048 is a sane default; 4096 if you're exporting for a hero asset.
remesh (off by default) enables dual-contouring remesh - better topology but slower. If you flip it on, remesh_band and remesh_project control the narrow-band width and how much it projects back onto the original surface. Defaults are fine for a first run.
Outputs: mesh (the textured TRIMESH), plus diffuse, normal, metallic, roughness, and alpha as separate IMAGE maps, and a status string. Those maps are your PBR set - feed them to BD Pack Bundle or an exporter.
Install
This is part of ComfyUI-BrainDead: Manager → search "BrainDead", or clone + pip install -r requirements.txt into custom_nodes, then restart. It needs the pack's GPU mesh dependencies (CuMesh / xatlas for unwrap) and a current ComfyUI with the V3 API. Model weights for the upstream generators (TRELLIS2, or the ~10GB Pixal3D set) are what actually eat disk and first-run time - the bake itself doesn't download anything.
Where it fits and where it trips
The README's canonical flow: Pixal3D → voxelgrid → BD OVoxel Bake → mesh + PBR textures, or its alternative - Pixal3D → voxelgrid → BD OVoxel Texture Bake (bake-only, if you already have your own simplified, unwrapped mesh). Use the all-in-one when you want a textured mesh in one shot; use the texture-bake sibling when you want control over the simplify and unwrap steps yourself.
The honest caveat applies here like everywhere in 3D generation: the bake makes the surface game-ready - PBR channels, seams handled - but the underlying topology is still generated. For a static prop that's fine; for something that has to deform, plan a retopo pass after. And if the bake looks wrong, check that you fed a genuine TRELLIS2 voxelgrid with the original mesh data attached - a voxelgrid without original_vertices/faces will come back with sampling garbage, not a clean texture.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| voxelgrid | VOXELGRID | TRELLIS2 voxelgrid with PBR attributes (needs original_vertices/faces and attrs tensor) | |
| decimation_target | INT | 500001000–2000000 | Target face count for mesh simplification |
| texture_size | INT | 2048512–8192 | Output texture resolution (voxelgrid source is 512-1536, but normal maps benefit from higher) |
| remesh | BOOLEAN | false | Enable dual-contouring remesh (better topology, slower) |
| remesh_bandopt | FLOAT | 1.00.5–3 | Remesh narrow band width (only used if remesh=True) |
| remesh_projectopt | FLOAT | 0.90–1 | Project back to original surface (0=none, 1=full) |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| mesh | TRIMESH | — |
| diffuse | IMAGE | — |
| normal | IMAGE | — |
| metallic | IMAGE | — |
| roughness | IMAGE | — |
| alpha | IMAGE | — |
| status | STRING | — |