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

๐Ÿ”ท Extract Features (RDAWG)

Pull geometric features out of a mesh as a tensor

By rdawgemflยทCreated 11 months agoยทUpdated 11 months agoยท 0
๐Ÿ”ท Extract Features (RDAWG)
  • mesh
  • feature_info
  • features
โ—„feature_typevertex_curvatureโ–บ
โ—„radius0.10โ–บ

If you want to do anything clever with a mesh - classify it, segment it, find defects, or just understand its structure - you need features: numbers that describe each part of the surface. RDAWG3DExtractFeatures computes geometric feature maps for your mesh and hands them to you as a TENSOR, one value per vertex (or per face/edge, depending on the feature). It's the feature-engineering node of the pack, the one that turns raw geometry into data.

It's the deeper cousin of Compute Curvature: same neighborhood-based thinking, but a wider menu of what to measure, and it's explicitly positioned as "features for analysis" rather than a single metric. If you're building a mesh-classification or defect-detection pipeline in ComfyUI, this is where the input signals come from.

How it works

Four feature types:

  • vertex_curvature (default) - per-vertex curvature estimate: builds a covariance matrix from normals in a radius neighborhood and uses the dominant eigenvalue. High on sharp or curved regions, low on flats.
  • edge_angles - per interior edge dihedral angles (the angle between two adjacent triangles). Sharp creases show up as large angles; smooth regions have angles near 180ยฐ. Useful for detecting features like seams or hard edges.
  • face_areas - the area of every triangle, which gives you a density/quality map of the mesh.
  • vertex_valence - the number of triangles touching each vertex, a classic topology descriptor. Irregular meshes show high variance; clean quad/loop meshes show tight distributions.

Each mode returns a summary string plus the feature tensor. Note the per-vertex and per-face modes produce tensors of different lengths, so what you can do with the tensor depends on which feature you chose.

The inputs that matter

  • feature_type - pick what you want to measure.
  • radius - the neighborhood size for curvature (and only curvature); 0.01โ€“1.0, default 0.1. Scale-dependent, so normalize your model first.

Outputs: feature_info (STRING summary with distribution stats) and features (TENSOR).

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 a hard requirement - the pack won't import without it (pip install open3d>=0.19.0). Python 3.11 recommended. Mind the installer's torch 2.9.0+cu128 pin if you already have a working PyTorch.

Where people get burned

  • Feature tensor length mismatches - vertex features and face features have different lengths. If you're feeding the tensor somewhere expecting one-per-vertex, check which mode you ran.
  • Curvature feature is noisy on scanned meshes - raw scans have surface noise that reads as curvature. Smooth the mesh first, then extract.
  • Slow on big meshes - vertex_curvature runs a radius search per vertex. On a million-vertex mesh, budget some time or simplify first.
CategoryRDAWG 3D/Analysis

Inputs (3)

NameTypeDefaultDescription
meshMESHโ€”
feature_typeCOMBOvertex_curvature4 options: vertex_curvature, edge_angles, face_areas, vertex_valence
radiusFLOAT0.100.01โ€“1โ€”

Outputs (2)

NameTypeDescription
feature_infoSTRINGโ€”
featuresTENSORโ€”