Transferring attributes

  • Using attribtransfer eg. P, Cd

  • Using 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

There are three ways of manipulating and copying points

  1. Copy Stamp with Expressions - good for quick prototyping

  2. Copy to Points with a SOP eg. circle

  3. Copy to Points with pointwrangle and VEX

Point generation

  1. Using VEX

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



  • Instance - similar to copytopoints to grid

    • Select 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

  1. create mmultiple objects: demo1, demo2, demo3

  2. attribcreate -

    1. string , name: "instance", String: /obj/demo1

    2. /obj/demo`round(fit01(rand(@ptnum),1,2))`

Random geometry with copytoPoints

  • Attach an attribute called "variant" to each geometry

  1. 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};


  • Arnold renderer does not accept packed geo

  • add unpack


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

Using copy stamp and expressions

Prerequisite: You must use an image sequence; eg. all files are named: image_04.jpg

  1. Assign a material SOP and input a principle shader to target object

  2. Activate Overrides use Local overrides and merge Overrides

    1. Parameter: basecolor_texture

    2. Use any of these expressions:

// using frame number

// random image from concatenating strings

// Use all of your sequence frames: 
  • 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)


  • stamp input

  • material

Method: based on frame number

  1. copy stamp

  2. material

    1. parameter: basecolor_texture

    2. type: string value

  3. String value:

Based on UV

Pros: good for seamless tiling eg. brick tesselattion

  1. grid > uvproject > group > material

Based on luminance value

Texturing & UV

Best practice for assigning materials

Recursive subdivision

Space partitioning algorithm


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)){
  • Sphere > Scatter > delete by threshold for pos.x

  • particlefluid surace

Last updated