Integer division in ICE

Dividing an integer N by itself doesn’t always give you 1.
I think it’s a problem in the Divide by Scalar node (the division is probably returning a scalar like 0.99999999, and then that is truncated to zero when it is converted to an integer).

A workaround is to do all your division with scalars, and then use modulo to determine whether you Round or Floor the result. Here’s an example compound by Guillaume Laforge:


Context matters: Using weightmaps with point clouds

A weightmap is per-point, but it’s per-point on the emitting geometry, not the point cloud. So you can’t just do a plain “get weights” if you want to use the weightmap to control particle values like Velocity or Speed.

Instead, you use get a location, like the particle emit location, and then get the weightmap value at that location. Then you’ll have a particle per-point context to work with.
When you get the weight at a location, you get an interpolated weight value.

Linking an ICE compound to a help page

The short answer is that you can’t do it, not really. The best you can do is provide a URL in the compound properties
and then right-click the compound and click Open Netview on URL.

For ICE compounds, a CompoundNode property is loaded into the PPG when you inspect the compound.
This CompoundNode is like a proxy container for the actual compound, and it takes care of populating the PPG with the required controls, and finding the right help page. To do that, it just takes the name of the compound and constructs a URL like (Hmm, having just said that, I figure if you had a local version of the help, then you could stick your own help page there, and Softimage would find it.)

For shader compounds it’s a little better, because you can put something like this in your PPG Logic, and it will work.

#ppg logic start
from win32com.client import constants

def OnInit():
    Application.LogMessage( "OnInit" )
    PPG.PPGLayout.SetAttribute( constants.siUIHelpFile, "" )
#ppg logic end

hat tip: everybody on this thread

About transformation matrices…

You don’t necessarily have to understand everything about transformation matrices to use them. Just understand then when you multiply a point by a transformation matrix, you’re applying scaling, rotation, and translation to that point all at once.

If you do want to understand more, you can use ICE to visualize what goes into a transformation matrix:

And you can do some reading 🙂

Getting ICE attribute values with greater precision

As you know, in Softimage all scalar (aka floating point) values are displayed with 3 (or sometimes 4) decimal places. For example: 0.333 instead of 0.33333333333…

One way to display the attribute value with greater precision is to use the Log Values node, and multiply the attribute value by some power of 10 (to get more digits). Hat tip to Leonard Koch for that suggestion.
The above Log Values outputs this:

# INFO : 4000 - elt 0: 3333333504.000000

You could also use scripting. But note how I get 0 for the attribute named _tmp, even though it is clearly set to 0.3333333333333 in the ICE graph.

x = si.Selection(0)
y = x.ActivePrimitive.Geometry.ICEAttributes( "tmp" )
if y.IsDefined:
	print "tmp = %.10f" % y.DataArray[0]
y = x.ActivePrimitive.Geometry.ICEAttributes( "_tmp" )
if y.IsDefined:
	print "_tmp = %.10f" % y.DataArray[0]

# tmp = 0.3333333433
# _tmp = 0.0000000000

Finally, here’s a quick hack using a proxy parameter and the SDK explorer:

Screenshots of the week

Softimage Creatives London user group

Gear Eyelids

More Making Of from RodeoFX
ICE used for the MGM ground crowds, the falling money (and some of the bills being sucked into the vents) and the fancy motiongraphic’y “projection” animated cubey stuff on the walls of the building shot.

Space Invaders

Icy Conditions

Strands through surfaces
by caledonian_tartan