๐ท Extract Features (RDAWG)
Pull geometric features out of a mesh as a tensor
- mesh
- feature_info
- features
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
radiusneighborhood 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_curvatureruns a radius search per vertex. On a million-vertex mesh, budget some time or simplify first.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | MESH | โ | |
| feature_type | COMBO | vertex_curvature | 4 options: vertex_curvature, edge_angles, face_areas, vertex_valence |
| radius | FLOAT | 0.100.01โ1 | โ |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| feature_info | STRING | โ |
| features | TENSOR | โ |