Using the First Valid node


First Valid allows you to handle possible graph evaluation errors by providing alternative branches.

For example, here’s how you’d set up a compound to use either an attribute value or a value entered in the compound PPG. In this example, the PPG value is the fallback: if the attribute is not set, the value from the PPG is used.

Here’s another example. If there’s a texture map on the object, First Valid will pass through the texture map color. Otherwise, solid black is used.

Note that you don’t need to keep the constant color node. You just need it to force the type (Color) of the First Valid node.
After that, you can simplify to this:

Customizing ICE compound property pages (PPGs)


Q: Can I use groups and tabs to organize the exposed ports on my compound PPG? Can I add PPG logic (callbacks)?

A: Yes, you can add groups, but not tabs or PPG logic.

Most of what you can customize on a ICE compound PPG is available in the UI through the exposed port properties.

Unlike shader compounds, you’ll notice there’s no way to specify groups, tabs, or PPG logic.

To define groups, you’ll have to edit the .xsicompound file and manually add your groups in the layout element.

For example, here’s the layout for the Deform by Curve compound. This xml shows the full available syntax for the layout section. No other elements (like ) are supported: I checked the code that loads ICE .xsicompound files.

<layout>
	<item type="input" name="Mute"> </item>
	<item type="input" name="Curve_Name"> </item>
	<item type="input" name="Reference"> </item>
	<item type="input" name="Axis" min="0" max="0">
		<enum value="0"><![CDATA[X Axis]]></enum>
		<enum value="1"><![CDATA[Y Axis]]></enum>
		<enum value="2"><![CDATA[Z Axis]]></enum>
	</item>
	<group type="input" name="Scaling Along">
		<item type="input" name="Scale_Curve" min="-10" max="20"> </item>
		<item type="input" name="Scale_Normal" min="-10" max="20"> </item>
		<item type="input" name="Scale_BiNormal" min="-10" max="20"> </item>
	</group>
	<group type="input" name="Roll">
		<item type="input" name="Roll" min="-360" max="360"> </item>
	</group>
	<group type="input" name="Translate">
		<item type="input" name="Along_Curve" min="-20" max="20"> </item>
		<item type="input" name="Along_Normal" min="-2" max="2"> </item>
		<item type="input" name="Along_Binormal" min="-2" max="2"> </item>
	</group>
	<group type="input" name="Constraint">
		<item type="input" name="Constrain_To_Deformer"> </item>
		<item type="input" name="Constrain_To_Deformee"> </item>
	</group>
	<group type="input" name="Profiles">
		<item type="input" name="Use_Scale_Profile"> </item>
		<item type="input" name="Scale_Profile"> </item>
		<item type="input" name="Use_Roll_Profile"> </item>
		<item type="input" name="Roll_Profile"> </item>
	</group>
	<item type="output" name="result"> </item>
</layout>

YouTube – Softimage Lagoa ICE Test – Shattering Cup 1080p HD


YouTube – Softimage Lagoa ICE Test – Shattering Cup 1080p HD.

2.8 Million Particles – Created with the Softimage 2011, Rendered with Arnold for Softimage. Motion blur and depth of field on third shot.
Hardware used:
Dell Precision T5500 Dual Quad Core Workstation 12 gigs RAM
Nvidia Quadro 5000 Firmi based
Sim time: Thanksgiving weekend, Render time: ~6 hours for all 1000 frames.

Motion blur on non-simulated ICE trees


In a recent case, a customer was using an ICE tree in the Modeling stack to create a fixed number of particles. Then, he used an animated scalar value in the ICE tree to drive changes in the particle positions. Basically, it was a bunch of “spokes” rotating in a circle.

The problem was that there was no motion blur when he rendered with mental ray (but there was motion blur with 3Delight).

To get motion blur in this type of scene, you have to set the PointVelocity attribute to a value that indicates the direction and distance/second of travel.

Unlike 3Delight, mental ray only takes the motion from the velocity attribute. There’s no delta comparison done.