Optimization of ICE Data
Beware of ICE optimizations. If you try to set data but never use it anywhere in the scene, it never actually gets set because of how ICE is optimized. This applies not only to custom attributes, but also to dynamic attributes — for example, if you try to set PointVelocity but don’t use a Simulate node to update point positions, then PointVelocity does not get set.
Among other things, this can have the following consequences:
- Caches may be missing data that you expect to be there.
- If you freeze a tree that initializes data before creating a different tree that uses that data, the data will be missing.
ICEAttribute.IsDefinedproperty [OM (http://softimage.wiki.softimage.com/sdkdocs/ICEAttribute_IsDefined.htm)|C++ (http://softimage.wiki.softimage.com/sdkdocs/sicppsdk/html/classXSI_1_1ICEAttribute.html#IsDefined)] of the SDK is sometimes misleading.
You can force data to be evaluated and set in a couple of ways:
- Display the data values in the viewport. See Displaying Port Values (http://softimage.wiki.softimage.com/xsidocs/ICE_trees_DebuggingICETrees.htm#Xes517561).
- Use the data to set real data in the scene, for example, set weight map values or use the data in the render tree.