Fix Normals IGL Raycast (backend)
The raycast way to make every face point outward
- trimesh
- fixed_mesh
- info
This is the raycast flavor of the pack's normal-fixing family, and it's a good mental model for what these nodes actually do. Fix Normals IGL Raycast takes your mesh and shoots rays at it to figure out which side is the inside and which is the outside, then re-winds every face so its normal points outward. When you have a mesh where some faces are flipped relative to their neighbors, this is one of the more robust ways to straighten them out - it doesn't just chase local consistency, it establishes a global sense of "outward" and enforces it.
It's a hidden backend node in practice: you'll usually meet it through the Fix Normals wrapper's backend dropdown, which is the node you place in a workflow. Drop this one in directly only if you're building a graph by hand or you specifically want the raycast behavior without the wrapper. Either way, what you get is the same: a mesh whose faces all agree on which way is out.
Inputs and outputs
- trimesh - the mesh in.
- fixed_mesh - the re-oriented TRIMESH, ready for a viewer, an exporter, or a slicer.
- info - a STRING report: how many faces were flipped, how confident the result is.
No parameters. Mesh in, fixed mesh out, numbers in between.
Installing it
Same pack install as everything here:
cd ComfyUI/custom_nodes
git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git
cd ComfyUI-GeometryPack
pip install -r requirements.txt --upgrade
python install.py
Restart ComfyUI. ComfyUI Manager also works (search "GeometryPack" or install via Git URL with https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git). One-click installer is experimental and drags in pixi; the manual route is the README's "most reliable."
When raycast is the right call - and when it isn't
Raycast winding shines on meshes that are reasonably closed and clean: the rays have a clear inside/outside to find, and the result is a properly outward-facing solid. It struggles when the mesh is very open (lots of holes) or heavily self-intersecting - rays get ambiguous, and the algorithm has less to anchor on. For those messes, the signed-distance variant (Fix Normals IGL Signed Dist) is often the more forgiving pick, since it can use distance-to-surface to decide orientation even in noisier geometry. The honest workflow: run this, read the info string, and if it reports a lot of uncertainty, try the other backend instead of fighting it. Run Check Normals before and after to prove the fix actually landed. And keep the pack updated - it's young and fast-moving, and this node is simple enough that any load error is the pack's fault, not yours.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| fixed_mesh | TRIMESH | — |
| info | STRING | — |