Houdini 17.0 Geometry

Geometry attributes

Describes how Houdini represents geometry using details, primitives, points, vertices, and attributes.

On this page

Attributes

Attributes are named values stored on vertices, points, primitives, and objects. Point color, position, UV coordinates , spline weight (W), and normal, for example, are stored as point attributes.

  • Houdini sets some point attributes that you can use in expressions. For example, you could set the per-point color based on the vertical position (PY) of the point.

  • Certain attributes you can set manually and if they're present they will be used by Houdini. For example, the dynamics solvers and rendering engines will often use certain attributes on the geometry if they exist.

  • You can also set your own custom attributes to be used by your node expressions, scripts, exporters, and so on.

The surface nodes in the Attributes group of the tab menu set different types of attributes. You can also set or create arbitrary attributes using the Attribute SOP.

To see the attributes on the geometry in a node, press on the node’s tile in the network editor and choose Spreadsheet to open the geometry spreadsheet for the node.

Particles also have attributes, and attributes are very important when geometry and particle systems interact. For example, particles emitted from geometry inherit (by default) the attributes of the point from which they are emitted, and you can create interesting effects by transferring attributes between surfaces and particles using the Attribute Transfer POP.

Geometry components

You can create/set attributes using the generic Attribute Create surface node, or the Vertex, Point, Primitive nodes. You can attach attributes to vertices, points, primitives (e.g. polygon faces), or the entire piece of geometry (called the "detail" level).

Note

When you merge two or more branches in a geometry network, if a detail attribute with the same name exists in multiple branches, Houdini uses the value in the first branch. If the attribute is a string array, Houdini merges the arrays.

Attribute precedence

When two components in the same geometry have an attribute with the same name, the attribute on the "lower level" of geometry is used, so:

  • Vertex attributes, which override:

    • Point attributes, which override:

      • Primitive attributes, which override:

        • Detail (whole geometry) attributes

Applying nodes based on attribute values

Most surface nodes have a Group field that lets you enter a named group or a pattern to select which components the node should apply to. This field recognizes special syntax that lets you select components by the value of an attribute. For example, in a Point node's Group field, @foo>5 selects all points whose foo attribute is greater than 5.

See the section on manually specifying groups for more information.

Intrinsic attributes

Intrinsic attributes are computed values derived from the geometry that you can access as if they were attributes. For example:

Examples of intrinsic attributes

Detail

intrinsic:pointcount

Number of points in the geometry

Detail/primitive

intrinsic:bounds

Bounding box of the geometry

Primitive

intrinsic:measuredarea

Surface area of the geometry.

Primitive

intrinsic:memoryusage

Amount of memory used by the primitive.

To...Do this

See what intrinsic attributes are available

  • The command line utility ginfo -I prints a list of all known intrinsic attributes.

  • You can show intrinsic attributes in the geometry spreadsheet. By default they are not shown.

    If you are viewing geometry at a component level that has intrinsic attributes, you can use the Intrinsics menu to show all intrinsics or choose which intrinsics to show in the spreadsheet.

  • The Inspect tool can show which intrinsic attributes are available on the inspected geometry.

Use intrinsic attributes

  • In HScript expressions and VEX, use the attribute functions to read intrinsic attributes in expressions and VEX, for example:

    prim("../volume1", 0, "intrinsic:bounds", 0)
    

    (You can’t use the @ attribute shortcut to read an intrinsic in VEX wrangle snippets. However, you can use primintrinsic and detailintrinisc() to read the intrinsic directly instead of using the intrinsic: prefix magic.)

  • In Python, you can access intrinsic attributes using hou.Geometry.intrinsicNames(), .intrinsicValue(), and .intrinsicValueDict().

  • In the group syntax, you can group based on intrinsic values. For example, @intrinsic:indexorder<100

Tip

Despite the name, some "intrinsic" attributes can actually be written to, causing Houdini or Mantra to change some internal setting. For example, you can set the intrinsic:unexpandedfilename intrinsic attribute on a packed primitive.

Higher and lower precision storage

You can choose the numeric precision of attributes you create with the Attribute Create node, and/or convert attributes to higher precision types (at the cost of more memory) or lower precision types (to save memory) using the Attrib Cast surface node.

See the help for Attrib Cast for information on the available storage types and limitations.

Indexing and limit variables

You may see the following "pseudo-attributes" in VEX snippets. They represent the number of the current element being processed (for example, the point number), and the total number of elements in the geometry/list. See indexing and limit variables in VEX snippets for more information.

@elemnum, @ptnum, @primnum, @vtxnum

Represent the number of the current element when a VEX snippet is run.

@numelem, @numpt, @numprim, @numvtx

Represent the total number of elements in the geometry/list when a VEX snipped is run.

Common attributes

Each type of node will use certain attributes if they exist (or in some cases require them to exist), and may create/set attributes as part of their operation. See the documentation for individual nodes to see what attributes they use/set.

The following lists a number of attributes that by convention are read/written by multiple node types.

Geometry attributes

P

vector

Point position. The viewport uses this to lay out the points of the model in 3D space. You can overwrite this attribute to move the point.

On point

N

vector

Normal direction. You can overwrite this attribute to change the normal.

v

vector

Velocity. The renderer uses this attribute to know where to add motion blur. This attribute is not computed automatically, but several nodes, especially particle DOPs, can set/use it. You can add velocity to points using the Trail SOP.

id

int

A unique element ID. This is not the same as the element number (for example, the point number). This is an attribute you can, for example, assign to points to keep track of them even if the point numbers change (which can happen if the number of points changes). Particle DOPs often set/use this attribute.

name

string

This is a value you can set on primitives, such as volumes or packed primitives, to be able to find them in code by name. Some nodes set/read this attribute.

piece

int

Nodes the break up geometry into pieces will often set this attribute so you can tell which polygonal faces are part of the same piece. Faces in the same piece will share the same value in their piece attribute. Other nodes may use this attribute to operate on pieces.

Sizes and rotations

pscale

float

Uniform scaling factor. This is used in different ways in different places. For particle/point rendering, it controls the size of the particle/point (in world space units) at render time. For instancing, you can use it to uniformly scale the instanced geometry.

scale

vector

Whereas pscale is a single uniform scaling factor in all axes, this attribute lets you scale non-uniformly along each axis separately. See the pscale attribute for more information.

width

float

When rendering open curves, sets the line width (in world space units) at render time. If this attribute does not exist, Mantra renders the open curve a thin line instead of as a ribbon with thickness.

On point

lod

float

Level of detail. This may be used in instancing.

On detail, prim

spritescale

vector

When displaying particles using sprint images, this gives additional sprite scaling over pscale.

Default (1, 1, 1) On point

spriterot

float

When displaying particles using sprint images, this gives sprite rotation (around camera angle) in degrees.

Default 0 On point

Viewport display attributes

gl_wireframe

int

If this detail attribute is 1, the geometry always appears as wireframe in the viewport.

If this detail attribute is -1, the geometry always appears as shaded in the viewport.

Default 0 On detail

gl_lit

int

If this detail attribute is not 0, the geometry always appears without lighting.

Default 0 On detail

gl_showallpoints

int

If this detail attribute is not 0, all points will be rendered as sprites, even if they are connected to geometry. Normally only unconnected points are rendered.

Default 0 On detail

vm_cuspangle

float

Controls the cusp angle used for generating normals when the geometry doesn’t have any. 180 will produce entirely smooth point normals.

Default 60 On detail

Particle attributes

force

vector

The force attribute on the current point. This is set/used by some particle DOPs. It represents a change to the particle’s position computed by adding up all the forces acting on the particle.

rest

vector

Conventional name for an attribute containing each point’s rest position, used by various nodes. Some shaders can use this rather than P, so procedural textures will stick even if you deform your geometry.

On point

torque

vector

The torque attribute on the current point. This is set/used by the Torque DOP to spin particles.

up

vector

Represents the up vector of a particle’s local space. This is used for instancing geometry onto a point. You can overwrite this attribute to change the particle’s orientation.

accel

vector

Obsolete, used by old POPs. The new DOP particle nodes use the force attribute instead.

backtrack

vector4

Obsolete. Used by old POPs to store the particle’s previous position.

orient

vector4

Quaternion orientation of a particle. Allows fully specifying rotation, whereas up only orients along a single axis. If this exists, it is used for instancing geometry onto a point.

rot

vector4

An additional offset-quaternion applied after all other attributes, used when instancing geometry onto a point.

nextid

int

Detail attribute storing the largest particle ID, allowing Houdini to create new particle ids efficiently.

pstate

int

A bit field encoding different pieces of information about a particle’s state (for example, whether it’s alive, whether it’s stopped, whether it collided in the previous frame, and so on). Various particle DOPs read and write this attribute.

The pstate value is the sum of the following flags:

0x01

Is a "primary" particle (not birthed from an existing particle).

0x02

Will die before the next frame.

0x04

Stopped.

0x08

Has collided.

0x10

Stuck to static or moving geometry.

0x20

Is associated with a rigid body dynamic simulation.

0x40

Active.

0x80

Motion is overridden by a CHOP.

Shader overrides

Most shaders will use the override attributes to change how elements with these attributes are shaded.

Cd

vector

Diffuse color override. The viewport uses this to color OpenGL geometry.

Alpha

float

Alpha transparency override. The viewport uses this to set the alpha of OpenGL geometry.

Cs

vector

Specular color override.

Cr

vector

Reflect color override.

Ct

vector

Transmit color override.

Ce

vector

Emission color override.

rough

float

Roughness override.

fresnel

float

Fresnel coefficient override.

shadow

float

Shadow intensity override.

sbias

float

Shadow bias override.

Rendering attributes

uv

vector

The UV coordinates of the point/vertex. The first two elements of this vector contain the current U and V coordinates. Note that uv is Houdini’s conventional attribute name for storing texture coordinates. You can store texture coordinates in other attributes, so you can have multiple UV layouts on the same geometry. Most texture-related nodes have a field to let you specify the name of the UV attribute to use.

On point, vertex

material

string

The node path to the material to use to shade this primitive. Overrides the object’s material.

instance

string

The instance attribute on the current point, containing a path to the geometry instanced on the point. This can be a file path to a geometry file, or an op: path to a Geometry object or geometry node. You can overwrite this attribute to change the instanced geometry.

On detail, prim

rishade

string

Detail/primitive. The name of a RenderMan shader.

On detail, prim

See also

Geometry

Understanding

Modeling

Terrain

Fracturing

See RBD Fracturing in Dynamics.

Next steps

Guru level