Nodes/ComfyUI libigl/Sharpen Non Iterative (backend)
ComfyUI Node

Sharpen Non Iterative (backend)

The one-pass sharpen for when you don't want to babysit iterations

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Sharpen Non Iterative (backend)
  • trimesh
  • sharpened_mesh
  • info
sigma_f1.0
sigma_g1.0

Every other sharpening backend in the GeometryPack pack has an iterations slider, which means every other backend has a way to stall your workflow while you tune it. Sharpen Non Iterative deliberately skips all of that: it's a single-pass bilateral filter on the face normals, done in one go, no loop to converge. If your mesh is just a little soft and you want a fast, predictable sharpen without the tuning spiral, this is the node.

It's the non_iterative option in the Sharpen Mesh dropdown, or searchable directly as "Sharpen Non Iterative (backend)".

How it works

The mechanism is a bilateral filter applied to normals in one pass, built on the classic Jones et al. SIGGRAPH 2003 formulation. A bilateral filter is just a weighted average where the weights depend on two things: spatial closeness and a feature-preserving term. Here, each face normal is averaged with neighbors within a spatial neighborhood, but the contribution of each neighbor is damped by how far its plane is from the target vertex - the "projection distance." Faces close to the same plane contribute a lot; faces pulling the vertex in a different direction contribute almost nothing. One pass, edges survive, noise gets damped.

Two inputs do the whole job:

  • sigma_f (default 1, 0.001–10) - the spatial sigma as a multiple of average edge length. It controls the spatial extent of the filter; face neighbors are searched within a radius of 2×sigma_f. Larger = smoother over a wider area.
  • sigma_g (default 1, 0.001–10) - the influence sigma. This one controls sensitivity to projection distance, i.e. how far a vertex is allowed to move toward each face's plane. Smaller = more feature-preserving, since only nearly-coplanar faces get to tug at the vertex.

Inputs and outputs

Just trimesh, sigma_f, and sigma_g. Outputs are sharpened_mesh (TRIMESH) and info (STRING). Not much room to go wrong, which is the point.

When to pick it

Honestly? This is the sharpen I reach for when the mesh is already decent and I just want a slight, safe lift before baking or exporting. two_step gives you stronger CAD creases, l0_minimize flattens hard, but Non Iterative is the low-commitment option. The one thing to watch: since there's no iteration to "grow" the effect, a very noisy mesh will still look noisy - this node sharpens, it doesn't reconstruct. If your input needs real cleanup, use guided_normal first.

Install is the pack standard - ComfyUI Manager search "GeometryPack", or git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack into custom_nodes/, then pip install -r requirements.txt --upgrade and python install.py. Restart ComfyUI and you're set. It's a young, WIP pack with an experimental comfy-env/pixi installer, so the first launch may be slow - that's normal, not a hang.

Categorygeompack/smoothing

Inputs (3)

NameTypeDefaultDescription
trimeshTRIMESH
sigma_fFLOAT1.00.001–10Spatial sigma as multiple of average edge length (Jones et al. SIGGRAPH 2003). Controls spatial extent of the bilateral filter. Face neighbors are searched within radius 2*sigma_f. Larger = smoother.
sigma_gFLOAT1.00.001–10Influence sigma as multiple of average edge length. Controls sensitivity to projection distance (how far the vertex moves toward each face plane). Smaller = more feature-preserving.

Outputs (2)

NameTypeDescription
sharpened_meshTRIMESH
infoSTRING