Techniques
Proceduralism
Readings
Transferring attributes
Using
attribtransfer
eg. P, CdUsing Pointwrangle Get attributes from second input in wrangle node [src]
If you want to get an attribute (lets say color) from a specific point number (lets say 123456) from input 2, you can use
@Cd = point(1, 'Cd', 123456);
If you have the same number of points on both inputs and you want to get an attribute from the corresponding point on input 2 you can use this shortcut
@Cd = v@opinput1_Cd;
Where the number 1 describes the input port.
Ah, you want the number of points on input 1?
@number_of_points_on_input_1 = npoints(1)
Copy stamping & Looping
Looping, Deborah Fowler
There are three ways of manipulating and copying points
Copy Stamp
with Expressions - good for quick prototypingCopy to Points
with a SOP eg.circle
Copy to Points
withpointwrangle
and VEX
Point generation
Using VEX
Using
line
to create points >point
to change the position eg. Creating circle of points
Orient objects or profiles to a curve
Using polyframe
Instancing = packed geo & copypoints
Tutorials
Lights
Instance
- similar to copytopoints to gridSelect Instance object
Place points or geo inside network
Point Instancing: Fast-point for geometry, full point instancing for lights
Random geometries
Pros: faster processing and work with render engines
Reveal instance in viewport via Display Opetion > Geometry > Instancing
create mmultiple objects: demo1, demo2, demo3
attribcreate -
string , name: "instance", String: /obj/demo1
/obj/demo`round(fit01(rand(@ptnum),1,2))`

Random geometry with copytoPoints
Attach an attribute called "variant" to each geometry
geometry eg. object_merge > pointWrangle -
i@variant =1;
Generating a random integer value for each point
grid> attribrandomize - scale > point wrangle
int(rint@variant = fit01(rand(@ptnum),0,2));
Retrieve the random variable values by listing "variant" in the Piece Attrbute from copytopoints
transform using target point orientation
Setting the object to faceup: pointwrangle: @N = {1,0,0};
Unpacking
Arnold renderer does not accept packed geo
add
unpack
Texturing
Random color ovveride
// rand bw color
rand(@ptnum), rand(@ptnum), rand(@ptnum)
// rand RGB
rand(@ptnum) , rand(@ptnum+25), rand(@ptnum+10)
Multi-image texturing
Texture Override, Deborah Fowler
Light Instancing, Deborah Fowler
Using copy stamp and expressions
Prerequisite: You must use an image sequence; eg. all files are named: image_04.jpg
Assign a
material
SOP and input a principle shader to target objectActivate
Overrides use Local overrides
andmerge Ove
rrides
Parameter: basecolor_texture
Use any of these expressions:
// using frame number
$HIP/textures/image_$F2.png
// random image from concatenating strings
$HIP/textures/image_`padzero(2,ceil(fit01(rand(@ptnum),0,7)))`.png
$HIP/tex/`image_floor(fit01(rand(@primnum),0,90))`.png
// Use all of your sequence frames:
$HIP/tex/`image_@primnum%90`.jpg
90 is an arbituary value ; you can use your total image sequence frames
the backticks ` allows use to add an expression into the string
This technique is similar to copyStamp; we are referencing primnumber and adding an different image for each.
Texture override
CopyPacked geo
grid with uvproject1
expression in material node (point attrib)
CopyUnpacked
stamp input
material
Method: based on frame number
copy stamp
material
parameter: basecolor_texture
type: string value
String value:
Based on UV
Pros: good for seamless tiling eg. brick tesselattion
grid > uvproject > group > material
Based on luminance value
Texturing & UV
Best practice for assigning materials
Texturing prim faces with the same image using groups: https://www.deborahrfowler.com/HoudiniResources/Overview-UVs.html
polygon sop >
uvproject
uvquickshade
Recursive subdivision
Space partitioning algorithm
Tutorials:
Loops & VEX: Artistic Quadtrees, Entagma
Spiral Pattern Generation Tutorial - Houdini + Cinema4D, Roman Pillai
Unsorted VEX notes
Torus wrangle node example
// bbox equivalent
@Cd.r = relbbox(0,@P).x;
@Cd.g = relbbox(0,@P).y;
@Cd.b = relbbox(0,@P).z;
Using
facet
to make unique points;
Simulating bubble popping with scatter
if(@P.x>ch('threshold') + .5 * (noise(@P * 5)* 2 - 1)){
removepoints(@ptnum)
}
Sphere > Scatter > delete by threshold for pos.x
particlefluid surace
Last updated
Was this helpful?