Nodes/RDAWG 3D Pack (CUDA 12.8 + PyTorch 2.9.0)/๐Ÿ”ท Compute Curvature (RDAWG)
ComfyUI Node

๐Ÿ”ท Compute Curvature (RDAWG)

Measure how bendy a mesh is, per vertex

By rdawgemflยทCreated 11 months agoยทUpdated 11 months agoยท 0
๐Ÿ”ท Compute Curvature (RDAWG)
  • mesh
  • mesh
  • curvature
  • info
โ—„curvature_typemeanโ–บ
โ—„radius0.10โ–บ

Curvature is the geometric answer to "how much does this surface bend here?" A flat wall has near-zero curvature; a sphere's tip has high curvature. RDAWG3DComputeCurvature computes a per-vertex curvature value for your mesh and hands it back as a tensor - which is exactly the kind of signal you want for edge detection, feature finding, segmentation, or deciding where a mesh is too dense or too smooth.

It's an analysis-flavored node, but it's categorized as processing because it can sit in the middle of a workflow: it returns the mesh unchanged plus the curvature tensor, so you can branch off the curvature for downstream logic while still flowing the mesh forward.

How it works

Open3D doesn't ship a built-in mesh curvature function, so this node estimates it - and it's honest about that in the code. All three methods work in a local neighborhood defined by radius:

  • mean - looks at each vertex's neighbors within radius, measures how much their normals differ from the vertex's own normal, and averages that. High values = the surface bends sharply around that vertex.
  • gaussian - sums the angles at each vertex's incident triangles and computes (2ฯ€ โˆ’ angle sum) / count. Captures how "dome-like" vs. "saddle-like" the local surface is.
  • principal - builds a covariance matrix of local normals and takes its dominant eigenvalue, a rough stand-in for principal-curvature magnitude.

The per-vertex values are minโ€“max normalized into 0โ€“1, so you get a relative "how bendy vs. how flat" score per vertex rather than true physical curvature units. That's fine for the practical uses - it's a feature map, not a CAD measurement.

The inputs that matter

  • curvature_type - mean is the sensible default.
  • radius - the neighborhood size for the estimate, 0.01โ€“1.0, default 0.1. Scale-dependent like every spatial parameter in this pack: smaller radius = more local detail, and noise.

Outputs: mesh (the same mesh, passed through), curvature (TENSOR, one value per vertex), and info (STRING) with min/max/mean.

Install

Part of the RDAWG 3D Pack. ComfyUI Manager (search "RDAWG 3D Pack (CUDA 12.8 + PyTorch 2.9.0)") or:

cd ComfyUI/custom_nodes
git clone https://github.com/rdawgemfl/rdawg_3D_pack
cd rdawg_3D_pack
python install.py

Open3D 0.19.0+ is required - the pack won't import without it (pip install open3d>=0.19.0). Python 3.11 recommended. Watch the installer's torch 2.9.0+cu128 pin if you already have a working install.

Where people get burned

  • Interpreting it as true curvature - the values are normalized estimates, not physical curvature. Don't compare them across different meshes with different radius settings; use them within one mesh.
  • Scale mismatch - a radius that's huge relative to your model averages everything flat; one that's tiny amplifies noise. Normalize the model first, then tune.
  • Slow on big meshes - the per-vertex radius search is a real loop over the KD-tree. Million-vertex meshes will feel it; simplify first if it's dragging.
CategoryRDAWG 3D/Processing

Inputs (3)

NameTypeDefaultDescription
meshMESHโ€”
curvature_typeCOMBOmean3 options: mean, gaussian, principal
radiusFLOAT0.100.01โ€“1โ€”

Outputs (3)

NameTypeDescription
meshMESHโ€”
curvatureTENSORโ€”
infoSTRINGโ€”