Hi there. I have moved to a new website at I'm no longer updating this one, but I'm keeping it around so the Internet wouldn't break. See you there.

Cubic Bezier Curve Node for Softimage ICE

Bezier curves are handy little things, especially the cubic variety. A while back I was playing around with ICE rigging in Autodesk Softimage, and I found myself in need of a cubic Bezier curve compound. I initially built one using the native ICE nodes, but although the tree was rather simple and consisted of nothing more than a few math nodes, the compound was simply too slow to be usable. So I set out to build a custom C++ ICE node to do the job.

Here it is in action:

SO_CubicBezierCurve in action

SO_CubicBezierCurve in action


Here’s what it looks like in the ICE tree:

SO_CubicBezierCurve node in an ICE tree

SO_CubicBezierCurve node in an ICE tree


Here’s the formal description from the source code:

 SO Cubic Bezier Curve is an ICE node for Autodesk Softimage 2011 SAP and above that computes a position on a Bezier curve, where the curve is defined by four input control points (P0, P1, P2, P3), and the distance along the curve is controlled using a parametric input parameter “S.”

It’s possible to replicate this functionality using nothing more than the basic ICE math nodes, but my tests showed that the performance in that case is unacceptably slow; typical results were 500 milliseconds per evaluation for the native math nodes compared to 20 milliseconds for the C++ implementation.

And finally, the binaries:

And a simple test scene:

And the source code:

I’m unable to provide a Linux build since I don’t have access to Softimage on that platform, but building from the source code provided above should be simple.

Sorry for being rather terse and short on the details, but I imagine this plug-in to be of interest to technical directors for the most part, and I’m assuming that the information provided here is good enough for that audience. But do contact me if you need any help.

A final thought

It’s expected for a custom C++ ICE node to perform better than an equivalent ICE compound, but the one order of magnitude performance advantage is a bit puzzling. The only thing I can conclude is that there’s a certain fixed overhead incurred during the evaluation of every ICE node. And this overhead adds up quickly when evaluating many simple, interconnected ICE nodes.

tl;dr: A single, monolithic ICE node >> a complex ICE compound.

1 Comment

# By Steven Caron on May 13, 2012, 12:30 am

thanks for sharing!

Powered by: