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

zhenjaproduction 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.