Softimage SDK Programmer's Guide > Working with the SDK > ICE Nodes >

# What is ICE?

An ICE (Interactive Creative Environment) tree is a special kind of operator that you create yourself consisting of a set of interconnected nodes that represent data and functions. It's very similar to building shader trees in the Render Tree.

The object model and C++ API both have an interface representing these atomic units called ICENodes or ICENodes. Each ICENode must have at least one output port and may have one or more input port(s) organized in groups (similar to operators). The interfaces for these are ICENodeInputPort or ICENodeInputPort and ICENodeOutputPort or ICENodeOutputPort. You can encapsulate a graph of ICENodes in a special container called an ICECompoundNode or ICECompoundNode, for convenience, reusability, or privacy, just like a function or a subroutine in programming. Because this is primarily a way to build particles, the ICEAttribute or ICEAttribute interface gives access to the attribute data set that belongs to scene objects such as geometries and properties.

The operator is called an ICETree or ICETree because it is the entry point to the ICE Tree for a Softimage scene element. When you add an ICE Tree to an object, you are basically applying the ICETree or ICETree operator to the object, so you use the ApplyOp command.

You can build custom ICENodes with the C++ API as self-installing plug-ins. You define your custom node with the ICENodeDef class and code the main logic (computation) in the Custom ICENodes callback. The Evaluate callback uses the ICENodeContext object to get the input and output port data. For more information, see Custom ICENodes.

You can also see the Inspect ICE Attributes example that demonstrates how to navigate through the ICE attributes of a geometry or property and how to log all attribute values. This example is located in the examples folder of the Softimage SDK installation directory.