Assigning a per-object random value with ICE


Suppose you want to use an ICE attribute to drive some behavior in the render tree. For example, you may want to introduce some randomization to a procedural texture. Here’s one way to go about it.

First, create an ICE attribute on each object. You’ll use this object as the seed for the Random Value node (you need a different seed for each object, otherwise you’ll get the same “random” number for each object).

si = Application
i = 0
for o in si.Selection:
	a = o.ActivePrimitive.Geometry.AddICEAttribute("_seed1", 2, 1, 1  )
	a.DataArray = [ (i) ]
	i = i + 1

Now apply a simple ICE compound to each object.

Seed and random scalar value for each object

Seed and random scalar value for each object


All the compound does is feed the seed into a Random Value node, and store the random value in another ICE attribute.
PerObjectRandomValueCompound

Help! My Arnold render channels are missing


If you don’t see any of the Arnold render channels (like Arnold_Alpha or Arnold_Opacity), open up the script editor (press ALT+4) and run the SITOA_CreateRenderChannels() command.

Tip – You can avoid this by making Arnold the default scene renderer. The SITOA plugin will then make sure the Arnold render channels exist (by calling SITO_CreateRenderChannels from OnNewScene and OnStartup events).
hat tip to Francois Lord for pointing this out

# Python
Application.SITOA_CreateRenderChannels()
// JScript
SITOA_CreateRenderChannels();

Rendering a world position pass with Arnold


You can use the Arnold_Point AOV to create a world position pass (an AOV is the Arnold equivalent of a render channel). Here’s the Arnold_Point render channel in the render region:

A world position pass (aka a position map), is an image where each pixel’s R, G, B colour values represent the x, y, z coordinates of the corresponding vertex, in 3D world space.

If you loaded the rendered position map into the FxTree, or Composite, you can see that the RGB values correspond to the XYZ position coordinates:

FxTree:

Composite:

Arnold – Rendering shapes distributed along strands


Arnold always renders shapes as if they were lofted along the strand. It doesn’t matter whether you clear the Loft Shape along Strand checkbox in the Create Strands PPG, the shape will always be lofted in the render, like this:

If you want your instance shapes to be distributed along the strands, you could use a second point cloud to put the shapes along the StrandPositions:

If you find this slows down your viewport, change the Particle Display to points.

Might as well…change the default scene renderer


Goodbye for now, mental ray. Arnold is now my default scene renderer 🙂

File > Preferences > Rendering

Now everytime I start Softimage or create a new scene, Arnold will be the scene renderer. And I’ll have an Arnold light by default (Arnold doesn’t support the default Softimage lights).

And you’ll have all the Arnold render channels.

The SItoA addon includes some events for setting up new scenes when Arnold is the default renderer.