Houdini general sink
· Houdini MOC · #note/sink ·
TOC
- Camera focus distance from object
- Local render
- Vectorize Images using Clusters
- Viewer states, handles, HUDs
- H19 grouping behaviour change
- Pulling/sharpening point clouds
- Multiple textures per attribute
- OGL pscale visualization
- Accessing attributes in parameters
- Patterns
- Group syntax
- Edge syntax
- ROP node
- Hscript
- Get current camera
- Quaternion rotation and orient attribute
- L-system
Local render
Using hrender.py
option | description |
---|---|
-e |
Frame range flag ? |
-f start end |
Specify frame range |
-F frame |
Single frame |
-w pixels |
Output width |
-h pixels |
Output height |
-t take_name |
Take to use for rendering |
-o output |
Output name. Use $F in a filename to include the frame number |
-c cop | Render a compositing node/network |
-d rop | Render a render node |
If you only specify one of -w
or -h
, the output will maintain the aspect ratio of the size specified on the node
cd "C:\Program Files\Side Effects Software\Houdini 19.5.640\bin\"
call hython.exe hrender.py -e -f 1.0 250.0 -i 1 -d /out/your_rop_name "you_file.hiplc"
Vectorize Images using Clusters
Vectorize pixel images using cluster points node
https://www.youtube.com/watch?v=tWVJgWVv9oc
Viewer states, handles, HUDs
Creating custom HUD, transforming into camera space
https://www.youtube.com/watch?v=9eYwRKJPzLw
Python States for Houdini TDs
https://ambrosiussen.gumroad.com/l/pythonstatesforhoudini
Pulling/sharpening point clouds
Attribute Blur set to Proximity mode will gather nearby points. It’s a brilliant trick.
Multiple textures per attribute
Using Style sheets or overrides
OGL pscale visualization
New pscale visualization feature in H19
Create a detail wrangle and type in i@gl_spherepoints = 1
- it creates a nice sphere primitive visualizer that seems to perform better than viewport discs or sprites in some cases!
Patterns
Pattern | |
---|---|
* |
Matches any string |
? |
Matches any single character |
[chars] |
Matches any of the characters between the square brackets. This does not support character ranges using a hyphen (you cannot do [a-z] ) |
^pattern |
Removes strings matching pattern from the previous match |
@name |
Matches attribute, object group, channel group, and/or bundle (depending on context) |
Examples:
geo*
Matches everything beginning with “geo”.
[gG]eo*
Matches everything beginning with “geo” or “Geo”.
?eo*
Matches everything that has any character followed by “eo” and then any number of characters.
* { #geo1}
Matches everything except the string “geo1”.
Group syntax
Pattern | Meaning |
---|---|
* |
All points, primitives, vertices, or edges. To match no elements, use !* |
?* |
Match anything in a named group |
n |
Component number n |
group_name |
In SOPs other than the Group SOP, you can specify a named group of points/primitives (created with the Group SOP). You can use pattern matching (*, ?, and [ ]) in the group name. For example, arm* includes all point/primitive groups whose names start with arm . ^ can be used in the pattern by enclosing the pattern in { } . For example, `{arm* |
*}includes all groups whose names start with arm, but not arm3`. |
|
n-m |
Components numbered from n to m (inclusive). |
n-m:step |
Components numbered from n to m (inclusive), skipping every step. For example, 1-100:2 means every other number from 1 to 100 |
n-m:keep,step |
Components numbered from n to m (inclusive). Use the first keep numbers and then skip every step after that |
!pattern |
Every component except the ones matching the pattern. For example, !1-10 means every point/primitive except the numbers 1 to 10.pattern may be a numeric pattern, attribute pattern, or group name pattern |
^pattern |
Remove components matching the pattern from the results of the preceding pattern. For example, `0-100:2 |
` means every other number from 1 to 100 except the numbers 10 to 20. pattern may be a numeric pattern, attribute pattern, or group name pattern | |
@attributeopvalue |
Components where attribute matches value, based on the op, which can be one of =, == (same as =), !=, >, <, >=, or <=. |
@attribute=val,val,... |
Components with the given attribute containing one of the listed values. |
Examples:
For example @v>0
will create a group of all points whose v attribute is greater than 0.
You can specify components using [index]
, for example @Cd[2]
will get the blue channel of the diffuse color (Cd) attribute.
As a convenience, you can also use .x
/.y
/.z
, .u
/.v
/.w
, or .r
/.g
/.b
instead of [0]
, [1]
, and [2]
.
(If you don’t specify a component for a multi-component attribute type, the comparison will use the first component.)
For example, @P.y>0
will create a group of all points whose Y component is greater than 0.
For string attributes, you must put quotation marks around the value if it contains spaces, for example @myattr="foo bar"
.
You can use wildcards (* and ?) in the value
when using =, ==, and != on string attributes.
You can combine the attribute syntax and the range syntax: @id=5-10
You can also use the attribute syntax with an integer pattern, but you need to enclose the pattern in quotes: @id="5 8 10 15"
@id="0-4 78"
You can use this to compare against intrinsic attributes as well: @intrinsic:indexorder<100
Val list example: @id=1,2,90,120
For string attributes, you must enclose values containing spaces in double quotes, for example: @path=/foo/*,/bar,"some string"
Edge syntax
Pattern | Meaning |
---|---|
n |
All edges in primitive number n |
pn |
Point number n / edges with point number n |
n em |
Edge number m of primitive n |
pa -b |
Edges between point number a and point number b |
H19 grouping behaviour change
Old: !group1 !group2 !group3
implicit AND operation is now OR in H19
New way: !{group1 group2 group3}
more explicit AND
ROP node
Objects
The workflow of these options is the same found in Mantra or other renderers.
Candidate Objects | The geometry objects in this parameter will be included in the render if their display flags are turned on and their display channel is enabled |
Force Objects | Objects in this parameter are added to the render regardless of the state of their display |
Exclude Objects | Objects in this parameter are excluded from the scene, regardless of whether they are selected in the Candidate Objects or Force Objects |
Candidate Lights | Each light in this parameter is added to the render if they are enabled |
Force Lights | The lights in this parameter are added to the render regardless of the value in their enable channels |
Exclude Lights | These lights will be excluded from the scene, even if they are selected in Candidate Lights or Force Lights |
Forced Matte | Objects forced to be output as matte objects. The matte options are extracted from a reference OBJ node, that can be even a null with the RS spare parameters added to configure on it the matte options |
Forced Phantom | Objects forced to be output as phantom objects. This means that they are not visible to the camera rays |
Quaternion rotation and orient attribute
@pscale = 0.1;
v@up = {0,0,1};
matrix3 m = maketransform(v@N,v@up);
p@orient = quaternion(m);
float rotation = chf("rotation");
vector4 rotation_quaternion = quaternion(radians(rotation),{0,1,0}); // the second arg is rotation axis
p@orient = qmultiply(p@orient, rotation_quaternion);
RBD speedup
Redshift can be really slow with degenerate primitives created by Voronoi Fracturing. Unpack & add Clean SOP before sending to RS.
Also delete all unnecessary attributes before unpacking, especially sim attributes generated by the RBD solver. Each attribute adds a little bit of time to the unpack and to the RS scene extraction!
L-system
The part in () is optional, where:
(l,w,s,d): l = distance, w = width, s = crossections, d = divisions
(s,x,a,b,c): s = step size, stamp values from a to c, x = 0 (not used)
(a): a = angle
(s): s = step size
(attrib, v1, v2, v3): attrib = attribute name str, v2 and v3 are optional
F(l,w,s,d) | forward |
f(l,w,s,d) | forward without drawing |
H(l,w,s,d) | half step forward |
h(l,w,s,d) | half step forward without drawing |
G(l,w,s,d) | forward but don’t record a vertex distance |
J K M(s,x,a,b,c) | copy geometry from leaf input J, K, or M at the turtle’s position after scaling and reorienting the geometry |
T(g) | apply tropism vector (gravity), angles the turtle towards the negative Y axis by Gravity param or g |
+(a) | right 90 or a |
-(a) | left 90 or a |
^(a) | pitch up in 3D |
&(a) | pitch down in 3D |
\(a) | roll clockwise in 3D |
/(a) | roll counter-clockwise in 3D |
| | turn 180 |
* | roll 180 |
~(a) | pitch/roll/turn random amount up to 180 or ‹a› |
"(s) | multiply current length by default step size or s |
_(s) | divide current length by default step size or s |
!(s) | multiply current thickness by default thickness or s |
?(s) | divide current thickness by default thickness or s |
;(s) | multiply current angle by default angle or s |
@(s) | divide current angle by default angle or s |
'(u) | increment color index U by u. Default UV Increment's first parameter |
#(v) | increment color index V by v. Default UV Increment's second parameter |
[ | push turtle state, start a branch |
] | pop turtle state, end a branch |
% | cut off remainder of branch |
$(x,y,z) | rotate turtle so the up vector points in the direction x,y,z. Default behavior is only to orient and not to change the direction |
{ | start a polygon |
. | make a polygon vertex |
} | end a polygon |
g(i) | create a new primitive group to which subsequent geometry is added. The group name is the Group Prefix followed by the number i |
a(attrib, v1, v2, v3) | set a point attribute for the remainder of this branch, or until another a command resets it |
There's much more, like very useful local variables, using geo in L-system, etc in the docs