Screenshots of the week


At one point, I thought about starting a tumblr page for ex-si support, mostly for posting screenshots of the ICE trees and render trees I see go by on the forums. I like tumblr, it’s nice and simple, but this blog takes enough of my time, so I decided not to fragment my efforts.

So, here’s some screenshots of the interesting ICE/render trees that I saw this week.

Fractal in ICE
By joquer on xsibase

Repeating cyclical emission
By Andy Moorer on XSI mailing list

Matching curve PointPositions to mesh PolygonPositions
By Florian Eberle on the XSI mailing list

ICE example kinematics path or curve U constraint
By Alan Fregtman on the XSI mailing list

Different shading on intances
By joquer on xsibase

The problem with Point Index to Location and deleted points


This is a gotcha that has cost people some time

To demonstrate this, I’ve set up a simple point cloud where I Add Points using a grid primitive. I’ve added AttributeDisplay properties to the point cloud, to show the point IDs and PointPositions.

So far, so good. But if I now delete some points, notice how the point IDs don’t change (there’s none of that “reshuffling” of point IDs that the docs say will happen) because point IDs are unique. So after I delete every second point, my point IDs are 1, 3, 5, and 7, not 0, 1, 2, and 3.

Consequently, if I use Build Array from Point Data to build an array of point positions, I get the positions for points 0, 1, 2, 3, which is incorrect. For point IDs 0 and 2, all I get is (0,0,0).

The problem is that Point Index to Location returns a valid location even when I give it the ID of a deleted point but that location doesn’t resolve to the correct point position (Build Array from Point Data uses Point Index to Location to build the array).

One workaround would be to do something like this in Point Index to Location:

hat tip: Grahame Fuller

Portal: No Escape – ICE used for live action short


I did all the particle work on the gun, gun blasts and the portals in ICE:

Honestly the setup couldn’t have been simpler. There’s a stretched sphere that acts as an emitter for when the gun shoots. All the particles it emits have an animated turbulize node on it. On the walls there is a disc shape that it collides with and spawns new particles – then there’s a ring they’re attracted to. The velocity and weight are also turbulized.

That’s pretty much it.

Everything was rendered with emRPC and sent over to Nuke for tweaking by the compositors.

Paul Griswold

Scaling about an arbitrary point


The animated gif above shows the result of scaling an object about a point that is not the origin. This is like moving an object’s center and then scaling the object.

Here’s an ICE tree that scales an object (a cube in this example) about an arbitrary point.

I didn’t freeze the transforms on the cube, so I used a StaticKineState property to hold the initial SRT values. Otherwise, when I had the cube.kine.global plugged into the tree, I ended up with some weird results sometimes.

A null named “pivot_position” is used to specify the scaling point.

First, we translate the scaling point back to the origin of the cube coord system.
Then we apply the scaling, and then we translate back to the “pivot position”.
Because the cube transforms weren’t frozen, I then multiple by the cube’s initial transfo matrix to get the final result.
References:
On-Line Computer Graphics Notes