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.

Animation_News_March_2000_1

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 🙂

dsscripts_functions

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 11.1.57.0
=======================================================

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

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

xsibatch_processing_render

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:
LMTOOLS-Service_Name

Friday Flashback #116


Marketing collateral for SOFTIMAGE|DS (from the Avid days).
DS_noelle
I was originally hired at Softimage to be the lead writer on the DS documentation. That never happened. I sat around for months reading specs, going to meetings, and endlessly preparing doc plans, until I was drafted into doing some actual writing work on DKit. Then I moved on to the SOFTIMAGE|SDK, and I never did work on the DS docs, except for the DS|SDK.

Compiled CHM version of the Softimage 2014 SDK guide


Here’s a compiled CHM version of the XSI SDK guide.

There’s no index, but you can always use Search with Search titles only enabled. If I can find my old python scripts, maybe I’ll get around to adding one (but it will just be an index of objects, methods, and properties).
xsisdk_2014_chm

This year I tried the Maxscript 2013 Help CHM creator, but really all that got me was the TOC for the Programmer’s Guide. I still had to add the Ref Guide TOC, and fix up the scripting errors, and remove the unneeded navigation buttons. I do all that with a few global search and replaces.

Missing shaders in the preset manager


If you find that you’re missing nodes in the render tree Preset Manager, then check the Softimage install folder. In particular, check

  • $XSI_HOME\Application\phenolib\spdl
  • $XSI_HOME\Application\phenolib\spdl\mibase

In a working Softimage installation, like mine , the content of the Preset Manager is determined by spdl/mi files in those folders (and perhaps others too).

For example, if I delete mia_lens_bokeh.spdl from $XSI_HOME\Application\phenolib\spdl\mibase, then Bokeh (mia) disappears from the render tree preset manager. If I put it back, and refresh the preset manager, the shader re-appears.