In Houdini, each geometry primitive has a list of points (numbered from 0). Each point has attributes such as XYZ location, color, alpha, texture UV, weight, and normal direction.
(Polygons, NURBS, and primitives also have a list of vertices, which reference points by their position in the point list. These points are shared between multiple polygons/NURBS/primitives.)
The Point SOP lets you edit the attributes of points, including their position. For example, you can change the distance of a point from the center of the object’s bounding box (using the local variables
$BBZ), change the color of a point (
$CR, $CG, $CB), or change the normal of a point (
$NX, $NY, $NZ).
This is an extremely general and powerful operator. You can use it for an almost infinite variety of purposes, including deforming a surface (by changing point positions), creating interesting color effects (by changing point colors), and altering the initial trajectories of emitted particles (by changing the point normals).
It is important to note that the expressions in this operator are
evaluated for each point. The
$PT local variable contains the point number of the point currently being processed.
When writing expressions for
editing points, you may find the point and
pointavg functions useful.
To see the point numbers of points in the viewer, turn on the Point numbers icon in the display options
window (Viewport Menu ▸ Display ▸ Display
Options, or press D) or in the display toolbar on the right side of the viewer.
To flip normals, turn on Add normals and enter
-$NX -$NY -$NZ.
While this operator edits the attributes of points, the Primitive SOP edits attributes of entire primitives.
The local variables in the Point SOP are relative to the point. You can use the prefixes "det", "prim", or "vtx" to use detail, primitive, or vertex variables. For example,
$primTX, $primTY, $primTZ is the barycenter of the first primitive the point belongs to.
Match By Attribute
When there are two inputs the standard behavior is to match
according to point number. However, if the inputs are
particle systems, this might not match properly as one wants
to match the same particle even if particles are deleted or
created. Match By Attribute will have $TX2 refer to the point
on the second input whose attribute matches the attribute of
the currently evaluated point.
If more than one point on the second input matches, the point
with the greatest point number will be used.
Attribute To Match
Which attribute to use for matching. This attribute must be
present on both inputs of the Point SOP. Equality will be
determined by treating it as an integer.
Keep uses the default values,
Add allow you to assign new values, and
No removes all values.
Spline weight of the point.
Normal vector. If you just want to compute normals, please use the Normal node instead.
Spring tension for connected edge.
Spring constant per point.
Particle size multiplier.
Geometry to instance on particle.
Multiplier for total force.
Force directed toward attractor.
Directed along normal direction.
Directed along edge direction.
Arbitrary directional force.
Number of Attributes
The number of attributes available to be set. Clicking the
+ button adds an attribute, clicking the
- button removes an attribute, and clicking the
Clear button removes all attributes.
Apply Attribute #
Whether to set this attribute.
It controls how attributes are modified. However, if the attribute does not exist, it will not be created.
Name of attribute, for example
Value (for scalar attributes).
Value (for string attributes).
CEX, CEY, CEZ
Centroid of the input geometry.
BBX, BBY, BBZ
Position of point within bounding box, ranges
MAPU, MAPV, MAPW
Point texture coordinates.
Spring tension of an edge, and elasticity of a point.
Number of seconds a particle has been alive.
Particle age divided by life expectancy (0 to 1).
Distance to intersection from the Ray operation.
Append n for the second source.
This is an example of how to use the Point SOP to orient point normals along a path. This allows for control over the orientation of geometry when copied onto points.
Points are extracted along a spiral on a per frame basis using an expression in the Carve SOP. A cone is copied to these points sequentially and results in an animation along the path.
This is an example of how to calculate a cross product by using the Point SOP. The cross product is defined as the vector perpendicular to two input vectors.
To visualize this demonstration, please explore the SOP network and turn on Point Normals in the display.
This example of the Point SOP demonstrates the capacity of the Point SOP to alter geometry based on another input.
A sphere is created and then the points are randomly transformed. Then, by using both inputs of the Point SOP, the original sphere is brought back to average out its altered form. A simple math expression averages the positions of the two spheres, point by point.
The Point SOP is quite a versatile operator. This example shows how the Point SOP may be used to control point weight, color, normals, and UV attributes.
Furthermore, it is possible to create various relationships among the point attributes through the Point SOP.
This is a demonstration of how the Point SOP can be used to add Normals to geometry.
It also shows how the Point Normals affect the orientation of copied geometry and the appearance of shaders.
Using the Point SOP, a simple displacement is created and applied to a portion of a spherical surface.
Using the normals of a point, which is basically a vector, and adding that number to the position of the point, the point is displaced in that given direction. With a Merge and Skin SOP the displaced surface is then connected back to the original.
This example file uses the Point SOP to turn a regular line into a spiral.
There are two different approaches used in this example. The first uses the point numbers of the line to define the expression calculations. The second uses the position of the points in the line’s bounding box for the expression.
The Point Terrain Erode file displays a mountainous landscape, created by the Fractal SOP. The landscape is swiftly worn away by the Point SOP.
With just a spare channel, erode, and a simple clamp() expression, the Point SOP can control the whole land.
This example shows how to use a simple python
expression inside a SOP node to deform a grid.
The expression imports a python math library
and uses noise to deform the points of a grid.