Working with large scenes and models

Softimage 2014 now supports scene (.scn) and model (.emdl) files of size up to 4 GB. That’s on Windows. On Linux, the limit is [still?] 2 GB.

Note that this applies only to scenes and models saved from Softimage 2014. You can’t save a huge 3GB scene out of Softimage 2013 and load it into Softimage 2014. Large files saved by 2013 and older are not saved properly, and won’t load into 2014.

On Linux, Softimage 2014 will warn you if you save a file that exceeds 2GB. Presumably that will give you a chance to reduce the file size, or save out models, so you can re-load the assets later.

Creating points on a group of meshes

From the docs:

Getting Scene data on Groups
When getting per-component data, such as PointPosition, the results are correct only when all objects in the group have the same number of components. As a workaround, one possible way to get, for example, all point locations is to plug the Get Data (group) node’s value into the Geometry port of a Generate Sample Set node with Emission Type set to Point and Rate Type set to All Points.

Here’s a screenshot of that workaround:

Compare with: Getting point positions from a group

Screenshots of the week

Domemaster3D lens shader for Softimage
by Andrew Hazelden

Autodesk promos Softimage

Some tips on working with large numbers of particles
by Tekano

Softimage ICE and Maya Fluids collaboration

Instance on curve
by julca

Strand clip
by Tekano

Generate Sample set with texture map
by gotchee

ICE Create “real” copies along curve and more
by NNois

stBasket compounds set

Softimage 2014 Pickup: Camera Sequencer
by born digital Kitamura

ICE Framework: Context
by SoftimageHowTos

Friday Flashback #117

March 2000 SOFTIMAGE|3D 3.9 was the first release distributed via “the world wide web”.

The SOFTIMAGE|3D Version 3.9 release also represents a milestone for the company as it will be the first ever release that Softimage distributes to customers via the world wide web. Rather than waiting the customary 6-8 weeks that it takes for reproduction and shipping, customers under a valid support contract will be able to log on to the Softimage Support web site to download the software.


ISIVTCollections, output arguments, and implicit return values

Commands that don’t explicitly define a return value, but do have output arguments, have an implicit return value: an ISIVTCollection.

The ISIVTCollection is a “special type of collection”, but it may help to think of it as [something like] a dictionary. An ISVTCollection holds a collection of key, value pairs (like a Python dictionary). You use the key names, like “Value”, to extract the associated value.

For example, the PickElement command has three “output arguments”; that is, parameters that return some value. These output arguments are PickedElement, ButtonPressed, and ModifierPressed.

So PickElement returns an ISIVTCollection collection with three key-value pairs. The keys are “PickedElement”, “ButtonPressed”, and “ModifierPressed”.

You can use the ISIVTCollection.Value method to get the value of a key:

from sipyutils import si			# win32com.client.Dispatch('XSI.Application')
from sipyutils import log		# LogMessage
from sipyutils import C			# win32com.client.constants
si = si()

vtcol = si.PickElement(C.siObjectFilter, "Pick deformer")

button = vtcol.Value( "ButtonPressed" )
modkey = vtcol.Value( "ModifierPressed" )
o = vtcol.Value( "PickedElement" )

There’s also an Item property, but like most Item properties it fails in Python:

vtcol = si.PickElement(C.siObjectFilter, "Pick deformer")
o = vtcol.Item( "PickedElement" )
# ERROR : Traceback (most recent call last):
#   File "<Script Block >", line 7, in <module>
#     o = vtcol.Item( "PickedElement" )
# TypeError: 'NoneType' object is not callable

Fortunately, Item is the default property, so you can omit it:

vtcol = si.PickElement(C.siObjectFilter, "Pick deformer")
o = vtcol( "PickedElement" )

You can also use an integer index instead of the key string. It just so happens that ISIVTCollections are sorted by key name (case insensitive), so you can work out which index to use.

# ISIVTCollection is sorted by name (case insensitive)
# 0 = ButtonPressed
# 1 = ModifierPressed
# 2 = PickedElement
o = si.PickElement(C.siObjectFilter, "Pick deformer")(2)

print ( si.ClassName(o) )
# X3DObject

Wednesday word cloud: DSScripts functions

There are 770 functions in the VBS files in $XSI_HOME\Application\DSScripts. Here’s a word cloud of the function names. To create the word cloud, I took the camel-case names like SetCameraSequencerLayoutProc and split them into Set, Camera, Sequencer, Layout, and Proc.

Proc indicates a function that is the implementation of a command. So the command SetCameraSequencerLayout would ultimately end up running SetCameraSequencerLayoutProc. So you see a lot of commands are actually implemented in VBS 🙂


Unlimited batch rendering with xsibatch -processing

Hat tip: Andy Jones on the Softimage mailing list

You can use xsibatch -processing to render scenes with third-party renderers like Arnold. With -processing, xsibatch uses a Processing token instead of a Batch license, so you’re not limited by the number of Batch licenses you happen to have. Back in the days before third-party renderers, -processing for was for non-rendering tasks. Now it’s for non-mental ray tasks!

I was sure I tested this long ago, but obviously I must have made a mistake on my command line.

xsibatch -processing -render //server/project/Scenes/example.scn

 Autodesk Softimage

License information: using [Processing]
# INFO : [sitoa] SItoA 2.7.1 win loaded.
# INFO : [sitoa] Arnold detected.

Here’s actual proof in the form of a screenshot 🙂


Starting the license server service from a batch file

It’s rare, but the occasional customer has a problem where the license server keeps stopping (for example, after the computer goes to sleep). Normally the license service should always be running, but if you were really stuck and needed a workaround, you could add something to XSI.bat to start the license server before starting xsi.exe.

For example, here’s something I got from stackoverflow. You probably could just call sc start; if the service is already running, sc will just report that and nothing bad will happen.

@echo off
for /F "tokens=3 delims=: " %%H in ('sc query "Softimage License Server" ^| findstr "STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   sc start "Softimage License Server"
   echo "Starting Softimage License Server"

The service name (on lines 2 and 4) is the same name you specified in LMTOOLS: