SOFTIMAGE|3D Ahead of the game
High octane fuel for the mind…No speed limits…Total freedom

1996
Getting all shaders under a light
Given something like this:

Here’s how you get all shaders under a light, even the disconnected ones:
from sipyutils import si # win32com.client.Dispatch('XSI.Application')
from sipyutils import log # LogMessage
from sipyutils import C # win32com.client.constants
from sipyutils import disp # win32com.client.Dispatch
si = si()
def dispFix( badDispatch ):
import win32com.client.dynamic
# Re-Wraps a bad dispatch into a working one:
return win32com.client.dynamic.Dispatch(badDispatch)
oLight = si.Selection(0)
#import win32com.client
oDisconnected = disp( "XSI.Collection" )
if oLight.IsClassOf( C.siLightID ):
for oShader in oLight.GetAllShaders():
oOut = dispFix( oShader.Parameters( "out" ) )
if oOut.Targets.Count == 0:
oDisconnected.Add( oShader )
log( oDisconnected.GetAsText() )
Hat tip: Matt Lind, who provided the GetAllShaders answer to the question “how to get all shaders in a light, even the disconnected ones”
Using ICE attributes to control point light instances
Integer division in ICE
Dividing an integer N by itself doesn’t always give you 1.

I think it’s a problem in the Divide by Scalar node (the division is probably returning a scalar like 0.99999999, and then that is truncated to zero when it is converted to an integer).
A workaround is to do all your division with scalars, and then use modulo to determine whether you Round or Floor the result. Here’s an example compound by Guillaume Laforge:

Screenshots of the week
Follow surface compound
by Mochio

ICE Modeling Tutorial: Generating a Forest
Friday Flashback #155
The future of 3d animation began 14 years ago on this day, Jan 17th. Was it worth the wait?

Teaser from http://www.3dwillneverbethesame.com
Getting the texture support created by CreateProjection
Here’s the question: How do you get the texture support created by CreateProjection?
You’re supposed to be able to get the support name from an output argument, but that doesn’t work.
from sipyutils import si # win32com.client.Dispatch('XSI.Application')
from sipyutils import log # LogMessage
from sipyutils import C # win32com.client.constants
si = si()
x = si.CreateProjection("sphere", C.siTxtSpherical, "", "SupportName", "Texture_Projection", "", "", "")
log( x.Value("SupportName") == None )
log( x.Count );
log( x(0) == "" );
log( x(1) );
So instead, I get the PropertyName and from CreateProjection and work my way over to the texture support, via the TextureOp.
import win32com.client
from sipyutils import si # win32com.client.Dispatch('XSI.Application')
from sipyutils import log # LogMessage
from sipyutils import C # win32com.client.constants
si = si()
def dispFix( badDispatch ):
import win32com.client.dynamic
# Re-Wraps a bad dispatch into a working one:
return win32com.client.dynamic.Dispatch(badDispatch)
o = si.Selection(0)
x = si.CreateProjection(o, C.siTxtSpherical, "", "Texture_Support", "Texture_Projection", "", "", "")
#CreateProjection( [InputObjs], [Type], [UVDefaultType], [SupportName], [PropertyName], [Parenting], [Fitting], [Camera] );
y = win32com.client.Dispatch( "XSI.Collection" )
y.Items = "%s.polymsh.cls.*.%s" % (o.FullName, x.Value("PropertyName") )
log( y.Items )
txtprop = si.Dictionary.GetObject( y(0).FullName )
op = txtprop.NestedObjects( "TextureOp" )
# re-dispatch it to avoid "object has no attribute 'InputPorts'" error
op = dispFix(op)
txtsupp = op.InputPorts(2).Target2.Parent3DObject
log( si.ClassName(txtsupp) )
si.SelectObj( txtsupp )
The SDK Explorer is good for finding these kinds of port connections:

PS: Here’s a JScript version.
x = CreateProjection("cylinder", siTxtPlanarXY, siTxtDefaultSpherical, "Texture_Support", "Texture_Projection", null, siRelDefault, null);
var y = new ActiveXObject( "XSI.Collection" );
y.Items = "cylinder.polymsh.cls.*." + x.Value("PropertyName")
txtprop = Dictionary.GetObject( y(0).FullName );
op = txtprop.NestedObjects( "TextureOp" );
txtsupp = op.InputPorts(2).Target2.Parent3DObject
LogMessage( ClassName(txtsupp) );
SelectObj( txtsupp )
Getting the selected FxTree nodes
You can use the undocumented selectednodes attribute, which was added in Softimage 2014.
views = Application.Desktop.ActiveLayout.Views
v = views.Find("Fx Tree") or views.Find("View Manager").Views.Find("Fx Tree")
if v:
print v.GetAttributeValue("selectednodes") # None
The FxTree view also has a targetcontent attribute, which is documented.
* hat tips to csaez (code) and luceric (attribute)
Screenshots of the week
Relative rotation
by Mathaeus

atan angle visualization
by Mathaeus

Color depending on height (render tree)
by NNois

Color depending on height (ICE tree)
by caledonian_tartan

OpenVDB to Softimage
by Mr.Core

ICE crusade to Houdini VDB Fracture
Feathers system
Krakatoa For Softimage Update
Partio Export For Softimage
Friday Flashback #154
What was happening on the XSI list 13 years ago?
In the past few weeks, I’ve compiled annual summaries for five different lists, so here’s one more, this time for Jan 2001 on the XSI mailing list.
I pulled a listing of the Jan 2001 posts out of the wayback machine, and stuffed them into a word cloud. There were a lot of names I recognized; many of them still posting on the list. Do you see yours? 🙂

There were almost a thousand posts. Here’s the top topics of discussion:
- Hmmm – Back at work NO LICENSES!!!!! 44
- import export? 19
- lic problems 16
- Is it just me…? 16
- Walk cycle in the animation mixer 14
- Scripting book 14
- refresh problem …. 13
- Home Studio 12
- XSI 1.5 available for download 11
- FW: making walls? 10
- bump map problem 9
- Camera preset .. 9
- symmetry – modelling 9
- No Subject 8
- colored shadows? how? 8
- Doing character stuff… 8
- Disappearing Particles. 7
- Chortle 7
- import export? 7
- WISHLIST for 2.0 7
- key 7
- Pentium4 6
- colored shadows!!! Works great! 6
- Bump Map 6
- BONNE ANNEES 6
- XSI SDK again!! 6
- shapes and adding deformers AFTER en 6
- SOFTIMAGE should buy Rhino: NURBs Bo 6
- desperately seeking FUR 6
- shrinking at joint 6
- TRIMS and others 6
- LAST ONE::: Hmmm – Back at work NO LICENSES!!!! 6
XSI 1.5 inspired a lot of discussion, there were many small threads about that update:
- XSI 1.5 available for download
- Measuring length of a curve in 1.5?
- installing 1.5
- [1.5 does it really exist?] Dahhhhh
- 1.5 Anyone? YES ITS COMMING :-))
- 1.5
- 1.5 CRASHES
- 1.5 Anyone?
- XSI 1.5 available for download
- XSI 1.5 is here at last!!
- 1.5 CRASHES
- 1.5 Anyone?
- Fix in 1.5?
- installing 1.5
- Status : 1.5 ???
- [Fix in 1.5?]
- #28 on page 146 of 1.5 Tutorial Book! –
- 1.5 Anyone? YES ITS COMMING :-))
- #28 on page 146 of 1.5 Tutorial Book!
- Status : 1.5 ???
- Fix in 1.5?
- 1.5 does it really exist?
Top posters
- Kim Aldis (124)
- André Adam (42)
- Stefan Andersson (37)
- Meg Ward (30)
- Arvid Björn (28)
- Pierre Duranleau (21)
- Chet Kenisell (19)
- Thomas Groppi (17)
- Thierry Baret (15)
- Chris Marshall (15)




