Face Robot notepad. Date unknown. Found by Softimage user Aaron Kent while spring cleaning 🙂
Author Archives: xsisupport
ICE Modeling – Extruding a random polygon
All you have to do is plug a Random Value node into the Polygon Index port, and then set the Mean Value and Variance. If you then play around with the ID (of the Random Value), you’ll get a different polygon extrusion.
Most of this tree is for setting the Mean and Variance. If I have an odd number of polygons, say 81, then a mean of 40 and a variance of 40 will cover the range of polygon indices (0-80). But if I have an even number of polygons, say 80, then a mean of 40 and variance of 40 might give me an index of 80, which is out of range.
To randomly extrude more than one polygon, just feed a bunch of IDs into the Random Value node, like this:
I increased the number of polygons to avoid getting the same random number multiple times.
Python print statement in Softimage 2013
If you’re using an external install of Python, you’ll probably notice that the print statement doesn’t work in Softimage 2013. That’s because Softimage 2013 was compiled with Visual C++ 2010, and Python wasn’t.
We recompiled the built-in Python that ships with Softimage 2012, so if you use that Python, the print statement works.
Workaround courtesy of Jo benayoun:
import sys class STDOutHook(object): def __init__(self): pass def write(self, data): # py engine adds a newline at the end of the data except if # the statement was ended by a comma. data = "" if data == "\n" else data if data != "": Application.LogMessage(data) return None sys.stdout = STDOutHook() print "Hello" print "\n" # wont work due to the workaround print "World",
I found this same workaround by googling “python print redirect stdout”. For example, here.
Toggling the polygon selection tool between Raycast and Rectangle
l_SelMode = Application.GetUserPref("SI3D_RECTSEL_REGION_MODE")
if l_SelMode == 1:
Application.ActivateRaycastPolySelTool( 2 )
Application.LogMessage("Raycast")
else if l_SelMode == 2:
Application.ActivateRaycastPolySelTool( 1 )
Application.LogMessage( "Rectangle" )
Packaging toolbars and script commands into addons
In this video, I walk through the process of packaging a toolbar and its script commands into an addon. I also touch on the subject of the command maps used by Softimage for non-self-installing script commands.
Screenshots of the week
Softimage CrowdFX Introduction Webinar Recast
by Mark Schoennagel
slice to pieces
by iamVFX



ICE City Generation Preview 1
by Christian Gotzinger
http://vimeo.com/40777017
neat viewport particle lighting effects
by Tekano


we need a hero
by David Saber

Custom ICE Node GetSceneMaterials
by Nolan

procedural spider web tutorial in softimage ice
Softimage 2013 Python shortcuts gotcha
Softimage 2013 includes some changes to the Python shortcuts:
from siutils import si
si = si() # win32com.client.Dispatch('XSI.Application')
from siutils import log # LogMessage
from siutils import disp # win32com.client.Dispatch
from siutils import C # win32com.client.constants
The big difference is that si shortcut is now a function that returns the Application object. We had to make this change to fix some weird memory leak (the si object was out of scope in the module where it was created, and the Python parser could not properly delete it upon exit).
Here’s a suggested workaround from the Dev team to maintain backward-compatibility:
# ---python code begin ---
from siutils import si
if Application.Version().split('.')[0]>= "11":
si = si() # win32com.client.Dispatch('XSI.Application')
from siutils import log # LogMessage
from siutils import disp # win32com.client.Dispatch
from siutils import C # win32com.client.constants
# --- python code end ---
The if block executes only if the current Softimage version is later than 11, which corresponds to 2013 or later.
hat tip: SS
Friday Flashback #67
Pull-quote from a 2002 datasheet for Softimage|3D 4.0:
Here’s the actual datasheet. It’s kinda text-heavy, but as I remember it, the image quality of screenshots in PDFs was not so great back then.
The datasheet has one mention of XSI: SOFTIMAGE|3D also offers an easy upgrade path to the next-generation SOFTIMAGE|XSI™ nonlinear animation (NLA) system.
ObjectIDs and objects that don’t exist
As noted by iamVFX on si-community, the new Python method Application.GetObjectFromID2 doesn’t deal well with IDs that don’t match an object that exists in the scene (in fact, it crashes Softimage). The JScript version, Application.GetObjectFromID simply returns null in that situation.
So, it is probably best to use DataRepository.HasData to check if the ID represents a real object.
Note that Dictionary.GetObject can also be used to get objects by ID.
from siutils import si
si = si() # win32com.client.Dispatch('XSI.Application')
from siutils import log # LogMessage
from siutils import disp # win32com.client.Dispatch
from siutils import C # win32com.client.constants
MAX_IDS = 2000
for i in range(0,MAX_IDS):
if XSIUtils.DataRepository.HasData( i ):
try:
o = si.GetObjectFromID2( i )
log( "%s : %s" % (str(i), o.FullName) )
except:
o = Application.Dictionary.GetObject( "object<%s>" % str(i) )
s = "%s : GetObjectFromID2 failed. Dictionary.GetObject found %s (%s)" % (str(i), o.Name, si.ClassName(o))
log( s )
else:
log( "%s : No object with this ID exists" % str(i) )
A new, blank Softimage 2013 scene has 757 objects. For your reading pleasure, the full list is below the fold.
Continue reading
The case of the missing crowd
Our first CrowdFX-related case in Product Support!
A customer reported that CrowdFX wasn’t working. When he opened a sample CrowdFX scene, he got all these “plug-in is not installed” errors [Hey, that’s the same error I blogged about yesteday, but this time it’s something different–Steve]
// ERROR : 2356 - This plug-in is not installed: CrowdFX_RigProxy
// ERROR : 2356 - This plug-in is not installed: CrowdFX_SkeletonsCloud
// ERROR : 2356 - This plug-in is not installed: CrowdFX_ActorProxy
// ERROR : 2356 - This plug-in is not installed: CrowdFX_ActorsProxies
// ERROR : 2356 - This plug-in is not installed: CrowdFX
OpenScene("C:\\Program Files\\Autodesk\\Softimage 2013\\Data\\XSI_SAMPLES\\Scenes\\ICE\\CrowdFX_Walk_Along_Paths.scn", null, null);
The real clue was an error logged at startup:
// ERROR : Traceback (most recent call last): // File "<Script Block 2>", line 55, in XSILoadPlugin // in_reg.RegisterMenu(C.siMenuTbICECrowdFXActorsID,"Actors_Menu",False,True) // File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 168, in __getattr__ // raise AttributeError, a // AttributeError: siMenuTbICECrowdFXActorsID // - [line 54 in C:\Program Files\Autodesk\Softimage 2013\Addons\CrowdFX\Application\Plugins\CrowdFX_Plugin.py]
First, this shows the customer is using the version of Python 2.6 installed on the system (not the version shipped with Softimage). More importantly, it shows that the CrowdFX constants, like siMenuTbICECrowdFXActorsID, are missing.
For Python, all the Softimage constants like siMenuTbICECrowdFXActorsID are cached in the Python install folder. For example, the Softimage constants are cached in the folder C:\Python26\Lib\site-packages\win32com\gen_py\269C4D8C-E32D-11D3-811D-00A0C9AC19A9x0x1x0\__init__.py
The solution in this case was to zap (delete) the gen_py folder, forcing Softimage to regenerate the generated type info cache.





