Procedural Houdini contract
DCC Houdini Attribute and Digital Asset Guide
Direct answer: Design a Houdini Digital Asset around an explicit geometry contract: choose Point Attribute, Primitive Attribute, or Vertex Attribute based on ownership, regenerate the Normal Attribute after topology changes, and measure Bounding Box data in the intended space. Publish only stable controls and test the HDA in a clean target session with malformed as well as valid inputs.
Bounding BoxHoudini Digital AssetNormal AttributePoint AttributePrimitive AttributeVertex Attribute
1. Specify geometry before nodes
Write expected input geometry, output geometry, coordinate convention, units, attribute schema, and legal topology changes. Record whether the Bounding Box is measured in object, world, or packed-primitive space. Procedural graphs fail quietly when they accept malformed input, so add early assertions for empty geometry, extreme extent, invalid primitives, and required names. A clean contract is more valuable than a network that happens to cook one demonstration asset.
2. Choose attribute class by ownership
Use a Point Attribute for values shared by all corners at a point, such as position or simulation state. Use a Vertex Attribute for corner-specific data such as UV seams or split normals. Use a Primitive Attribute for face or packed-piece metadata, including material path and piece identifier. Promote only with an explicit aggregation rule. Accidental point-to-vertex expansion increases memory, while vertex-to-point averaging can erase discontinuities needed for shading or UVs.
3. Control type, size, and defaults
Declare each attribute’s storage type, tuple size, semantic type info, default, and valid range. A float3 color, vector, normal, and position may share storage while transforming differently. Avoid strings in dense geometry when an integer class or indexed table suffices. Inspect the geometry spreadsheet after every class-changing node. Version renamed attributes and remove obsolete fields deliberately; stale attributes can continue driving downstream expressions long after an interface changes.
4. Maintain a trustworthy normal field
Generate the Normal Attribute after topology-changing operations and before tangent-dependent export. Decide cusp angle, weighted contribution, and whether hard boundaries follow groups or UV seams. Transform normals with inverse transpose under non-uniform transforms. For curves and instancing, distinguish normal, up, and orient attributes. Visualize vectors and inspect mirrored pieces. A valid-looking viewport can still carry zero-length or non-unit normals that produce unstable export shading.
5. Use bounds for procedural decisions
Compute Bounding Box min, max, center, size, and diagonal in the intended space. Bounds can set scatter density, voxel size, camera framing, or normalization, but outliers can distort all of them. Filter helper geometry and hidden collision before measurement. Guard against zero extent. For packed assets, decide whether bounds include transforms and whether nesting is expanded. Log measured values so a later cook can explain a changed resolution or point count.
6. Publish a stable HDA interface
A Houdini Digital Asset needs named inputs, constrained parameters, useful defaults, help text, parameter tags, icon, semantic version, and locked implementation. Expose decisions, not every internal knob. Separate cook-time controls from debug displays. Define editable nodes and callback behavior cautiously; callbacks should not depend on machine-local paths. Test installation in a clean session and target host. Preserve old definitions when scenes must reopen historical versions.
7. Work an attribute-transfer decision
A road HDA receives curves and terrain. Width is a Point Attribute on curves, material code is a Primitive Attribute on generated segments, UV is a Vertex Attribute to preserve seams, and the Normal Attribute is recomputed after conforming. Terrain outliers are excluded before its Bounding Box sets voxel resolution. This schema avoids interpolating material codes, preserves UV splits, and prevents one distant helper point from multiplying cook cost.
8. Debug common procedural symptoms
Faceted shading indicates missing, stale, or wrongly classed normals. UV seams disappearing after promotion indicate Vertex Attribute data averaged to points. Materials collapsing to one value suggests a Primitive Attribute was overwritten or promoted incorrectly. Cook time spikes can follow an outlier-expanded Bounding Box. An HDA that opens with red parameters may depend on unavailable definitions, scripts, or paths. Freeze input and inspect attribute changes node by node before adding caches.
9. Deliver reproducible procedural proof
Provide HDA version, definition library, example inputs, expected outputs, attribute-schema table, bounds logs, cook statistics, dependency list, and host compatibility. Include tests for empty, tiny, rotated, mirrored, large, and malformed inputs. Capture geometry spreadsheet samples and normal visualization. Approval requires deterministic output from identical inputs, no unexpected attributes, bounded cook time and memory, clean installation, and a documented migration route for previous asset versions.
Multilingual production vocabulary
| zh | en | ja | production meaning |
|---|---|---|---|
| 包围盒 | Bounding Box | バウンディングボックス | geometry extent |
| 数字资产 | Houdini Digital Asset | デジタルアセット | versioned procedural interface |
| 法线属性 | Normal Attribute | 法線アトリビュート | directional shading data |
| 点属性 | Point Attribute | ポイントアトリビュート | point-owned value |
| 原语属性 | Primitive Attribute | プリミティブアトリビュート | face-owned value |
| 顶点属性 | Vertex Attribute | 頂点アトリビュート | corner-owned value |
DCC Houdini Attribute and Digital Asset Guide FAQ
When should UV data be a Vertex Attribute?
When corners sharing one point need different UV values, as at an island seam. Promoting that data to points can average away the discontinuity.
Why does Bounding Box space matter?
Object, world, and packed spaces can produce different extents. Density, voxel size, and normalization decisions must use the space intended by the contract.
What should an HDA expose?
Expose stable artistic or production decisions with constraints and help. Keep implementation detail and fragile debug controls internal.
When should normals be recomputed?
After topology or deformation steps that invalidate them, using the final cusp and weighting policy before tangent calculation or export.