Your online Softimage Educational Resource

The blog has been online for more than 4 years and there’s still not a single post even remotely related to the delicious brew called coffee… Perhaps it will someday, but in the meantime you can read the articles about Softimage. Most of the material are tutorials and Q&As I’ve written for 3D World Magazine sometime between today and 2003. If you have any questions please don’t hesitate sending me an email.


Thanks to Letterbox Animation Studios for hosting all the scene files.

Make sure you visit their Redi-Vivus.com for 100s of hours of free XSI video tutorials.

Tuesday, December 28, 2010

Assigning different task based on condition

Select the particle_emitter and Simulate > ICE > Create menu choose Emit Particles from Selection… With the PointCloud still selected, press [Alt] + [9] to open an ICE Tree. Before you can assign any goal or paths for the particles you have to choose a criterion to use to separate the particles. In this example you’ll be using three different objects so it makes sense to divide the particles into three groups, one for each goal/curve. As each particle is born it’s also assigned a unique identification or ID. By feeding this ID into a Modulo operation and set the devisor to the same value as the number of groups you want to create, you’ve efficiently created the 3 collections.

Get a Get Point ID, a Modulo and a Set Data node. Connect the Point ID to the Value input of the Modulo node. Double-click on the Modulo node to open its PPG and set the Modulo By to 3. Connect the Result of the Modulo node to the Value input of the Set Data node. Open the Set Data node’s PPG and in the reference textbox enter self.Goal_ID. This creates a custom variable where each particle is assigned the result from the Modulo node (which is one of three numbers 0, 1 or 2). Connect the Execute port of the Set Data node to the Execute on emit1 input of the Emit from Surface node.

Get a Get Data node and a Select Case node. Open the Set Data PPG and enter self.Goal_ID in the text box and close the PPG. Connect the Value port of the Get Data node to the Condition input of the Select Case node and the Select Case node to the Port2 input of the ICETree node.

Press [8] to open an Explorer. Select the goal object and the two curves and drag and drop them into the ICE Tree. Get a Move Towards Goal node and connect it to the Case0 input of the Select Case node. Connect the Value port of the Goal_No1 node to the Geometry1 input of the Move Towards Goal node. Get two Flow Along Curve node and connect the each Curve node to the Curve1 input of their respective Flow Along Curve node. Connect the execute port of the first Flow along Curve node to the New (Case0)… input of the Select Case node and the second Flow along Curve node to the New (Case1)… input.

The project files used in this tutorial can be found at:
http://www.redi-vivus.com/Caffeineabuse/Multiple_Goals.zip
Image 01
Rather than staking numerous If or Filter nodes, the Select Case node can be used as an efficient way to execute different tasks based on conditions
Image 02
Becoming acquaintance with the Modulo operator will save you a lot of time whenever you need to separate particles into different group or collections.

Quick tip
If you’re using multiple goal objects, replace the Move Toward Goal node with a Set Particle Goal node. On the ICETree node, right click on the Port3 and from the menu choose Insert Port Before to insert a new port. Get a Move Towards Goal node and connect it to the Port3 input of the ICETree node. This way you can control all the particles within a single node even though they have separate goals.


Read the full post>>

Tuesday, December 21, 2010

Painting weights in ICE

While the weights in the weight map will be controlled from within the ICE Tree, you have to create the actual weight map manually. Select the Grid object and from the Get > Property menu choose Weight Map. Select the Grid object and press [Alt]+[9] to open an ICE Tree and from the Create menu choose Simulated ICE Tree. Press [8] to open an Explorer and drag and drop the Sphere object to your ICE Tree. Continue by getting a Pass Trough node, a Get Point Position node and a Get Closest Location node. The Get Point Position node returns the position of each of the points of the grid which is then used by the Get Closest Location node to determine whether the Sphere touches any of the vertices of the grid object (or is within a specified distance). If the Sphere is within this value the corresponding points’ weight should be set 1. If it’s not, the weight should stay unaffected (the default value is zero). Open its PPG. Check the Enable Cutoff Distance checkbox and set the Cutoff Distance to 0.1 and close the PPG.

Connect the Get Sphere node to the In input of the Pass Trough node, and the Pass Trough node to the Geometry input of the Get Closest Location node. The Pass trough node is purely for assisting the creation of compound (see Quick Tip). Connect the Get Point Position to the Position input Get Closest Location node.

Get a Set Data node and double click on it to open its PPG. The Set Data node can be used to set any predefined value or, as in this case, a custom value. In the Reference text box enter self.AddWeight. This will create a custom property named AddWeight. While you can set the value directly from within the PPG, using a separate node for this will make it easier to ‘read’ the ICE tree just by looking at it. So, get a Scalar node set its Value to 1 and connect it to the self.AddWeight input of the Set Data node. Get a If node and connect the Found output of the Get Closest Location node to the Condition input of the of the If node. Then connect the Set Data node to the If True input of the If node. Get a Execute node and connect it to the Port1 input of the ICETree node. Then connect the If node to the Port1 of the Execute node.

Get a Get Data node and open its PPG. Enter self.AddWeight in the Reference text box. Get a Set Data node, open its PPG and click the explore button. In the Explorer, expand the Grid > Polygon Mesh > Clusters > WeightMapCls > Weight_Map and select the Weights node. In the Reference text box, replace the word Grid with self and close the PPG. Connect the get self.AddWeight node to the self.clsWeightMapCls.Weight_Map.weights input of the Set Data node. Conclude the tree by connection the Set Data node to the New (port1) input of the Execute node.

The project files used in this tutorial can be found at:
http://www.redi-vivus.com/Caffeineabuse/ICE_WeightMaps.zip
Image 01
A weight map essentially enables you to store a weight value for each point of an object (or part of your object if you’re using clusters)...
Image 02
…which can be used to control anything from particle emission, shape animation and deformers to defining custom material properties of on object.

Quick tip
In the ICE Tree, select all but the Get Sphere and ICETree node, and from the Compounds menu choose Create Compound. Your ICE compound can now easily be saved to your library for later use.




Read the full post>>