SOFTIMAGE|XSI 7 poster from 2008
Tag Archives: ICE
Friday Flashback #432
Remember physical media? And software in boxes?
Friday Flashback #414
17 July 2008
The last SOFTIMAGE|XSI launch event
Friday Flashback #380
Friday Flashback #362
Friday Flashback #348
Friday Flashback #275
ICE!
design by tim borgmann for softimage
Using ICE to do UV remapping on instances
I was playing around with Softimage, trying to set up a puzzle:
At first, I was using actual geometry and snapping to put together the puzzle, but then (after watching a Cinema4D tutorial that used the Cloner to assemble the pieces) I decided to use ICE to position the puzzle pieces. Halfway through that, I realized that the texturing was going to be a problem. There doesn’t seem to be an easy way to apply a texture to multiple ICE instances, and then make the texture stick when the instances fly away.
After trying a bunch of stuff (and crashing a lot), I took a look at the UV Remap parameters on the Image node:
Then I created a 8×8 grid of 64 instances, and put all the possible min/max values in an array:
If you look at the point IDs, and the array, the pattern is pretty obvious, and it allows you to use modulo and integer division to index into the array and get the right min/max values for each instance.
Finally, the shader tree that gets the UV remap values and plugs them into the Image node:
Friday Flashback #210
Softimage company profile: 2008 interview with Kevin G. Clark, Global PR Manager for Softimage.
Mentioned: Jurassic Park, XSI 7, the ICE Platform, “big in Japan”, Metal Gear Solid 4, Ubisoft Assassin’s Creed cinematics, Lionhead Studios Fable II
https://vimeo.com/118918477
hat tip: Sven C
[ICE] Converting integers to strings
Thanks to Mootzoid emTools, it’s easy to convert an integer to a string:
Note that you get padding too, so it’s easy to do things like generating replacements for the [Frame] token.
The emTools string compounds are convenience compounds:
For fun, I tried to create my own integer-to-string converter using the stock nodes. I did by dividing by 10 until the quotient (the result) was zero; with each division, I take the remainder and stick it at the front of the string. And by setting Max Repeat to 4, I get padding on my strings (so for integer 45 I get “0045”).
Note the use of Delay Set Data. The integer division compound uses Modulo and Division by Scalar. The 2char compound simply uses a Select Case to map a single digit to a string:
It did occur to me that I could do it all with a single Select Case 🙂
The catch is that the Select Case node has ten thousand cases.
That’s really slow when you create that node in an ICE tree (for example, by importing a compound that uses it). It also takes a long time to create ten thousand cases, even with a script.
case_node = Application.AddICENode("$XSI_DSPRESETS\\ICENodes\\SelectCaseNode.Preset", "pointcloud1.pointcloud.ICETree") string_node = Application.AddICENode("$XSI_DSPRESETS\\ICENodes\\StringNode.Preset", "pointcloud1.pointcloud.ICETree") Application.ConnectICENodes("{0}.case0".format( case_node.FullName ), "{0}.result".format( string_node.FullName ) ) Application.DeleteObj( string_node.FullName ) Application.SetValue("{0}.case{1}_string".format( case_node.FullName, 0), "{0:0>4}".format(0), "") Application.SetValue("{0}.default_string".format( case_node.FullName, "9999", "") for i in range(1,10000): Application.AddPortToICENode("{0}.case{1}".format( case_node.FullName, i-1), "siNodePortDataInsertionLocationAfter") Application.SetValue("{0}.case{1}_string".format( case_node.FullName, i), "{0:0>4}".format(i), "")