Friday Flashback #52


Back when I was a programmer-writer on the SDK team, I’d never heard of a dongle and I’d never had to deal with any licensing stuff (I just installed the overnight build and it ran). Those were the days.

Then in late 2005 I was moved to the Support team and I found out all about dongles and licensing.

Dongles were always a hassle: getting the OS to recognize the dongle, getting the driver installed, verifying whether or not the dongle was bad/defective,… For awhile my xsibase account sig included the phrase “I hate dongles”.

Dongles often got damaged or lost, for various reasons, including but not limited to:

  • It just stopped working…
  • My sister kicked it
  • The dog got under my desk and broke off the dongle
  • Some student stole it (probably thought it was a USB key)
  • It broke when I tried to chain it to the computer
  • Stopped working when I tried to replace the battery (to which I would reply “that was no battery, that was the iButton itself!!!”)
  • Our building burned down (not funny because it was true…they sent me a photo)

Softimage used various types of dongles over the years, but I really only had experience with the blue iButton dongles.
Here’s some of the other dongles…

SOFTIMAGE|3D

Softimage XSI 1.5

Softimage XSI 3.0 and later


Disabling command logging temporarily


From the curiosity drawer. This python snippet uses “v1.5 command” functionality from back in the day to disable command logging for a specific command invocation.

from siutils import si		# Application
from siutils import log		# LogMessage
from siutils import disp	# win32com.client.Dispatch
from siutils import C		# win32com.client.constants


sClassID = "{19085F81-CDD6-471C-9CA1-7C7F4F2A0166}"

# This command is logged
si.FindObjects( "", sClassID )

log( "--------------------------" )
# Get the command and disable logging
oCmd = si.Commands("Find Objects")
oCmd.SetFlag( C.siNoLogging, True )
 
# Not allowed to update existing commands with Update()
# so we have to manually set arguments and execute the command
oCmd.Arguments(0).Value = ""
oCmd.Arguments(1).Value = sClassID

oICETrees = oCmd.Execute();    # Execute - nothing logged
for t in oICETrees:
	log( t.FullName )
log( "--------------------------" )
 
# This still is logged, no need to reset flag because we never updated the command
si.FindObjects( "", sClassID )

The typical way to [temporarily] disable command logging is by setting the cmdlog preference:

Application.Preferences.SetPreferenceValue( "scripting.cmdlog", False )
Application.CreatePrim("Cone", "MeshSurface", "", "")

Softimage resets the pref automatically.

You could use a Python decorator to do this.

Scene walkthrough – Polygons following particles


In this video, I do a walk through of a scene posted by Guillaume Laforge on the XSI mailing list. In the scene, Guillaume uses a point cloud to drive the polygons of a mesh, so that the polygons follow that transformations (pos and ori) of the particles. ICE modeling is used to “break up” the mesh into polygons. Includes a description of how vector subtraction is used to locate points relative to a polygon center.

http://vimeo.com/34804805

Tip: Use String to Array to quickly populate arrays


String to Array is handy for testing when you need some sample data. Why bother adding ports to a Build Array node and typing in values, when you can just paste in a string. Depending on where you get the raw array data, sometimes all you need to do is a little search/replace magic in your favorite text editor, and then you’ve got a string you can paste into String to Array.

Here’s a couple of examples:

Note that the type of the array elements is defined by where you plug in String to Array. So if you want to put the array into an attribute, you’ve got to define the type of the attribute first.

A new attribute has no type:

Use a constant node to set the attribute type:

Now plug in String to Array:

Friday Flashback #51


A look back at the last six years of the XSI mailing list, from 2006 to 2011.

  • 12,354 different topics
  • 81,458 posts in total
  • 9,784 topics with at least one reply or follow-up
  • 1,241 different posters

Top 10 posters (2006 to 2011):

The top 50 posters accounted for 54% of all posts on the XSI mailing list. Scroll down to see the list of the top 50.

Word cloud for Subject lines of all posts (2006 to 2011):


To put the relative size of the words in context, here’s some word counts:

  • ICE = 7685
  • python = 1686
  • rendering = 1339, render = 2461
  • scripting = 1427, script = 1112
  • maya = 1265
  • lagoa = 597

Top 10 topics

2006-2011 Top 10 topics

  • Friday Flashback (330)
  • test (271)
  • I heard a rumor: Autodesk to buy Soft??? (238)
  • Softimage at Autodesk – an observation (212)
  • Soft 2011 (198)
  • Autodesk Softimage 2010… (171)
  • PyQt For Softimage (153)
  • Replacing the shadertree? Possible? (151)
  • XSI v7 Announced (147)
  • GEAR 1.0.0 Released (139)
  • Softimage 2012 (126)
  • Thanks Autodesk. (125)

2006 Top 10 topics

  • Replacing the shadertree? Possible? (151)
  • XSI 6 announced (88)
  • XSI 5.1 (87)
  • Feet and inches in XSI (83)
  • Face Robot Designer at 94.995$ US? (82)
  • test (72)
  • flip from windows context menu tool (71)
  • XSI Hiring (66)
  • XSIMAN (64)
  • [OT] dynamite v1.1 (55)

2007 Top 10 topics

  • xsi 6 stability issues (92)
  • Siggraph User Group Summary (90)
  • Industry needs more xsi artists! (89)
  • Vista and XSI? (68)
  • Weird Realflow problem in XSI 6 (68)
  • render manager (55)
  • FG Map Sequences (53)
  • Vista and xsi (51)
  • CAfe dropping XSI? (51)
  • monitors? (50)

2008 Top 10 topics

  • I heard a rumor: Autodesk to buy Soft??? (238)
  • XSI v7 Announced (147)
  • AD completes aquisition (105)
  • ICE: Artist demo (94)
  • that Friday ICE feeling (85)
  • AD completes acquisition (70)
  • Softimage Community (70)
  • Sharing ICE Compounds (68)
  • On the flip side of things (66)
  • Coming back from Maya (62)

2009 Top 10 topics

  • Autodesk Softimage 2010… (171)
  • what auto desk has done for soft image (107)
  • I want better looking particles! (79)
  • trying out the Arnold renderer (66)
  • exocortex final word (63)
  • Tornado (59)
  • where are ICE compound exchange? (57)
  • Arnold pic of the day? (57)
  • Softimage 2010: Space Journey (56)
  • ICE result never the same (54)

2010 Top 10 topics

  • Soft 2011 (198)
  • Thanks Autodesk. (125)
  • XSI – ICE UI brainstorming (106)
  • ICE Bullet physics… (84)
  • more lack of exposure (was Thanks Autodesk) (79)
  • Softimage Studios (78)
  • A Softimage message (76)
  • GEAR 1.0.0 Released (74)
  • Lagoa Multiphysics 1.0 (73)
  • Viewcube tip (68)

2011 Top 10 topics

  • Friday Flashback (330)
  • Softimage at Autodesk – an observation (212)
  • PyQt For Softimage (153)
  • Softimage 2012 (126)
  • “Power Extrude” (110)
  • 2012 AP (66)
  • GEAR 1.0.0 Released (65)
  • Requirements for task development? (61)
  • Mental Ray is it going anywhere? (59)
  • Clouds – Simul software technology (55)

Top 50 posters (2006-2011)

The top 50 posters accounted for 54% of all posts on the XSI mailing list.
Continue reading

ICE brain teaser


Early this week, this ICE “brain teaser” was posted on the XSI mailing list.

Given an array like this:
8,8,8,2,2,2,2,5,5,5,5,9,9,9,9,1,1,1,1,1,1
how can can I –without using any loops–convert it to an array like this
1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5

Martin Chatterjee came up with a nice solution using arrays.

As an exercise, I tried to do it using a [non-simulated] point cloud. Basically, the idea is to use the particle self.ID data set to index into the array without using a Repeat node.

Here’s what I ended up with. First, I set a boolean flag on each point to indicate whether the corresponding array element is the same as the previous, and then I do a cumulative sum of array elements.

My first try at this ended up as an ICE tree version of this algorithm, plugged into the On Creation port of Add Point.

var a = [8,8,8,2,2,2,2,5,5,5,5,9,9,9,9,1,1,1,1,1,1];
var a1 = new Array(a.length);

var val = -1;
var ix = -1;
for (var i=0;i<a.length;i++)
{
	if ( a[i] != val )
	{
		val = a[i];
		ix++;
	}
	a1[i] = ix;
}
LogMessage( a );
LogMessage( a1 );
// INFO : 8,8,8,2,2,2,2,5,5,5,5,9,9,9,9,1,1,1,1,1,1
// INFO : 0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4

But that didn’t work, because as I found out, I wasn’t able to carry attribute values over from one point to the next. In the example below, you can see that self.tmp is local to each point (which means it starts off at zero for each point). Instead of incrementing self.tmp each time, I end up setting it to 1 every time.

Rigid body dynamic (RBD) precision and subframe sampling


About precision and subframe sampling for rigid body dynamics…here’s my understanding of how these two are related. Note that nobody confirmed this when I asked around, but then again nobody gainsaid it either 😉

The precision determines how frequently the simulation is calculated. For example, if Precision=120, then there is at most 1/120 of a second between calculations.

The subframe sampling determines the number of samples per frame.

So, if you are have this:

  • 30 fps
  • Precision = 120 per second
  • Subframe sampling =2 per frame

Then the RBD simulation is updated/calculated 4 times per frame (120/30), and ICE takes 2 samples of those calculated values per frame.