Speaking of old tshirts…
Creating strands without an emitter
WildStar™ trailer
From Carbine Studios (a Softimage customer), here’s the WildStar™ trialer. Cinematics by Blur (Softimage for rigging/animation/effects and 3ds Max for rendering/other effects).
ICE Kinematics: SRT values in transformation matrices
A look at how scaling, rotation, and translation (SRT) are stored in a transformation matrix.
http://vimeo.com/27863255
I’m not trying to steal anyone’s thunder, just wanted to post something of my own on the subject.
Hat tip to David Wigforss for publishing his series of kinematic tuts.
The Tale Of Mr. Rêvus on Vimeo
Adding a named section to a menu
Here’s a Python snippet that shows how to add a section to a menu like the ICE > Particles > Create menu:
import win32com.client
from win32com.client import constants
null = None
false = 0
true = 1
def XSILoadPlugin( in_reg ):
in_reg.Author = "blairs"
in_reg.Name = "NewCommandPlugin"
in_reg.Major = 1
in_reg.Minor = 0
in_reg.RegisterCommand("NewCommand","NewCommand")
in_reg.RegisterMenu(constants.siMenuTbICEParticlesCreateID,"ICEParticlesCreateCustom_Menu",false,true)
#RegistrationInsertionPoint - do not remove this line
return true
def XSIUnloadPlugin( in_reg ):
strPluginName = in_reg.Name
return true
def ICEParticlesCreateCustom_Menu_Init( in_ctxt ):
oMenu = in_ctxt.Source
# Add section divider
oItem = oMenu.AddItem( "Custom", constants.siMenuItemSection )
oItem.SetBackgroundColor(178,191,194)
# Add custom menu items
oMenu.AddCommandItem("My ICE Deformer","NewCommand")
oMenu.AddCommandItem("Another ICE Deformer","NewCommand1")
return true
Select in Array and the structure type of the Index port
In general, the Index port of Select in Array can take either a single value or an array of values.
It doesn’t say that on the reference page, but if you dig into the user guide, you’ll find that info. Or, like many people, you’ll find that out by just trying it, or seeing it in someone else’s ICE tree.
The Index port is an example of a port that can change its structure type. The structure of a port is either single or array.
By default, (or if you plug an integer into the Index port), the Index port structure type is “single”.

If you plug an array into the Index port, then the structure type changes to “array”.

Sometimes, what’s downstream from Select in Array will determine the structure of the Index port. For example, if you plug Select in Array into the Distance Value of Curve Distance to Curve Location, then Index must be a single value (because Distance Value is a single value).

Getting equidistant positions on a curve
Alpha, transparency, and specular in the render tree
Troubleshooting Softimage on Linux
On Windows, I use Process Monitor, Process Explorer, and Dependency Walker.
On Linux, the primary troubleshooting tool is strace. strace is a tool that traces all the system calls that a running process makes. When a program is experiencing problems associated with I/O, strace can often help in quickly isolating the problem, since (almost) all I/O happens through system calls.
Here’s the basic syntax:
strace -o /tmp/out -f XSI
-o writes the output to a log file
-f tells strace to follow forks, and trace all child processes
-p can be used to attach to an already running process
As well as system calls, strace also tracks signals that were thrown in the process. If a process is crashing due to a segmentation fault, it is worth investigating what was happening before the fault occurred; you can find where the fault occurred by searching for — SIGSEGV in the strace output.
strace output has been added as an XSI history log client under Linux. If you search the output of strace for the string write(-1, you should see all the scripting commands as they are executed. This is useful for associating system calls with the commands that caused them to execute.
There’s also ltrace ltrace is a tool that traces all the calls to shared library functions. It can be extremely useful with XSI because almost all of the XSI code lies in shared libraries. Note that calls from a given library to itself are generally not traced because the call is address-relative. Some useful options to ltrace are:
-C: remove leading underscores from C-linkage symbols and demangle C++-linkage symbols
-o and -f: same as for strace




