Softimage SDK Programmer's Guide > Customizing with the SDK > Custom ICENodes >

# Custom ICENode Processing

An ICENode typically acts as a function by reading the input data, computing new values, filtering out the input data, and ultimately setting the output port being evaluated. ICENodes are processed in several phases: BeginEvaluate, Evaluate and EndEvaluate. The Evaluate phase is the function where the bulk of the ICENode algorithm is implemented and the input port data accessed.

Depending of the current graph configuration, Softimage will determine the size and the number of packets to send to the custom ICENode for evaluation. This is done in a multi-thread context where packets are processed in parallel by the Evaluate callback. For instance, suppose the portion of a sub-graph, on which a custom ICENode is connected, is evaluated in the context of an output mesh geometry of 3800 vertices on a 4 CPU machine. The packet size will be determined by Softimage, for example, to 500 vertices and will be used during the evaluation as follows:

- CPU 1: vertices 0 - 499

- CPU 2: vertices 500 - 999

- CPU 3: vertices 1000 - 1999

- CPU 4: vertices 2000 - 2499

As soon as the first CPU finishes, it will get the next available batch. A possible scenario could be:

- CPU 3: vertices 2500 - 2999

- CPU 2: vertices 3000 - 3499

- CPU 1: vertices 3500 - 3800

Each of these packets (or subsets) will go through the graph independently. A ICENode might be evaluating for many CPUs at the same time, but the same subset should not go through the same ICENode twice.

#### Topics in this section

- Port Data Access
- Port Data Indexing
- Iterating Over Port Data
- Multiple Port Connections
- Handling Port Polymorphism
- User Data
- CustomVector3ToScalar Example