Unlimited batch rendering with xsibatch -processing


Hat tip: Andy Jones on the Softimage mailing list

You can use xsibatch -processing to render scenes with third-party renderers like Arnold. With -processing, xsibatch uses a Processing token instead of a Batch license, so you’re not limited by the number of Batch licenses you happen to have. Back in the days before third-party renderers, -processing for was for non-rendering tasks. Now it’s for non-mental ray tasks!

I was sure I tested this long ago, but obviously I must have made a mistake on my command line.

xsibatch -processing -render //server/project/Scenes/example.scn

=======================================================
 Autodesk Softimage 11.1.57.0
=======================================================

License information: using [Processing]
# INFO : [sitoa] SItoA 2.7.1 win loaded.
# INFO : [sitoa] Arnold 4.0.12.1 detected.

Here’s actual proof in the form of a screenshot :)

xsibatch_processing_render

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

Using an ICE attribute to drive a procedural texture


Here’s a simple example of using an ICE attribute to drive a procedural texture. In this case, I’m using a random integer to drive the number of repeats of a checkerboard:

randomized_checker

To set it up, I ran this script to programmatically add an ICE attribute. Unfortunately, I found I had to add an ICE tree to get the attribute to show up in the render tree.

import random

si = Application
    
for o in si.Selection:
	# Long, Single, Singleton
	a = o.ActivePrimitive.Geometry.AddICEAttribute("_random", 2, 1, 1  )
	a.DataArray = [ (random.randint(1,8))]
	si.ApplyOp("ICETree", o, "siNode", "", "", 0)

Then in the render tree I used Integer Attribute node to get the attribute value. This same material is applied to every cube in my example.
randomized_checker_mat

And if you wanted to update the ICE attribute later, eg increase the range of random values, you could do something like this:

import random

si = Application
    
for o in si.Selection:
	a = o.ActivePrimitive.Geometry.ICEAttributes("_random")
	a.DataArray = [ (random.randint(1,12))]

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.

Glossy reflections in the Arnold standard shader


In the Arnold standard shader, you use specular reflections when you want glossy reflections. There’s direct specular (the “classical” specular hightlight) and indirect specular (glossy/blurry reflections), and both are part of the same BRDF behaviour. In this screenshot, direct specular (Direct Scale) is turned off, so you see only the indirect specular reflections. The Roughness makes those reflections glossy.

So what’s up with the separate Reflection/Refraction tab? Well, that tab gives you an alternate way to do sharp, mirror reflections (with no blurring or glossiness). However, with Specular, you can get pretty much the same thing by setting the Roughness to 0:

Finally, since I mentioned the direct specular, here’s the shaderball with just the direct spec:

Tip – UI color widgets have a visual cue for gamma correction


In the Display > Color Management preferences, you can turn on gamma correction for UI widgets like the color chip. On the PPG, there’s a visual cue (a “dotted highlight”) that tells you whether gamma correction is on.

Gamma-corrected color widget:

Image

Regular color widget (no gamma correction):

Image

Also, you can right-click the color chip to toggle gamma correction on and off for that specific widget.

This is all in the docs, but I have to admit I found that out only after I noticed this on my own. Too bad, because if I had known this, I would have figured out sooner why my color chips looked so “faded”:

Image

(because at some unknown point in time I had enabled the display of gamma correction for UI widgets, and then set the Profile Source to “From LUT File”)

This week in video


A round-up of some of the Softimage videos posted this past week.

emTools 1.33 – Walk Through New Stuff

ICE Node for reading images at given UV coordinates

compositing images in ICE!

Manipulating colour in images

Psyop Softimage ICE Workshops

ICE-Rope-Rig (with Dynamic Controler Count and nice SubdivisionInterpolation)

Secondary deformations in Ice

Maxscript Modifiers VS Softimage Ice

Softimage – A guide to better reflections