In ICE, attributes are always associated with elements, either objects or one of their component types such as points, polygons, edges, and so on. For example, NbPoints and NbPolygons are attributes of objects, while PointPosition is an attribute of points and PolygonPosition is an attribute of polygons.
Some attributes are common to many different geometry types, like PointPosition. Other attributes are specific to particular object types, for example, PolygonPosition is available only on polygon meshes, PointU is available only on curves, ID is available only on point clouds, and so on. Some other attributes are available on specific elements or properties, for example, IsElement is available on clusters, Weights is available on weight maps, Colors is available on vertex color properties (CAVs), and so on.
Note that some attributes that are specific to point clouds appear in the explorers of the Get Data and Set Data property editors when dealing with other types of geometry. For example, BlobBlend appears to be available for polygon meshes, NURBS surfaces, curves, and even lattices. While it is possible to get and set these attributes on other geometry types, they have no effect except on point clouds.
Getting Data, Setting Data, and Context
You can get data by explicit string references or at locations.
• When you get data by an explicit string reference, you get a set of values with one value for each component. For example, if you get “sphere.PointNormal”, you get one 3D vector for each point of the sphere object; in other words, the context is per point of sphere.
• When you get data at a location, the context depends on the context of the set of locations that is connected to the Source port of the Get Data node. For example, if you start by getting “grid.PointPosition”, then use that to get the closest location on sphere, and in turn use that to get PointNormal, the data consists of normals on the sphere but the context is per point of the grid. If instead you started by getting “grid.PolygonPosition”, the context would be per polygon of the grid.
You can set data using an explicit string reference only. You cannot set data at locations. To set an attribute, you must be in the appropriate context. For example, to set PointPosition, you must be in the per point context of the appropriate object. Not all attributes can be set.
Inherent, Predefined, and Custom Attributes
Attributes can be inherent, predefined, or custom.
• Inherent attributes represent data that is always available in the scene. For example, PointPosition represents the XYZ coordinates of the points of a geometric object. Some inherent attributes can be set, like PointPosition, but others are read-only, like PolygonArea.
• Predefined attributes are recognized and used by certain basic nodes. However, unlike inherent attributes they are dynamic, meaning that they do not exist until they are set. For example, PointVelocity is used by the Simulation nodes to update PointPosition, but the PointVelocity attribute does not exist in the scene if has not been set by something in an ICE tree. The factory compounds in the Emitters task typically set the initial velocity, and in addition the Simulation nodes set the current velocity based on Force and Mass. If you get a dynamic attribute before it has been set, you get the default values: these are zero for most data types, false for Booleans, identity for matrices, black for color, etc. However, the Simulation nodes may use different default values when calculating motion if attributes have never been set. All predefined nodes can be set, except for ID which is read-only.
• Custom attributes are also dynamic and can always be set. For example, AgeLimit is a custom attribute that is set by some of the Emitter compounds and used by Modulate Value by Age Percentage and Delete Particle at Age Limit, among others. In addition, you can set your own custom attributes and use them for any purpose. Some custom attributes may appear to be per object until you drive them using a per point attribute, such as by randomizing them based on particle ID, after which they become per point attributes.
How Data Is Interpolated at Locations
When you get data at locations:
• Attributes that belong to points, edges, and samples are interpolated from the surrounding components. The exceptions are certain NURBS-related attributes such as PointBinormal, which are calculated directly at locations on NURBS surfaces and curves.
• Attributes that belong to polygons and objects are not interpolated. The values returned are always those of the underlying polygon or object.
• When integers and Booleans get interpolated, they get rounded to the nearest value.
When you use an explicit string reference to get transformation-dependent attributes such as positions, vectors, rotations, and so on, the raw, untransformed values are returned. These are typically expressed relative to the local space of the object that owns the components. For example, if you get “grid.PointPosition”, the values are relative to the grid's local reference frame.
When you get data at a location, the following attributes are automatically converted to the reference frame of the “self” object (that is, the object with the ICE tree):
• PointPosition
• PointNormal
• PointTangent
• PointBinormal
• SurfaceGeometricNormal
• PointReferenceFrame
• EdgeReferenceFrame
• PolygonRefFrame
Other attributes are unconverted when you get them at a location. They are expressed in terms of the local reference frame of the object that owns them.
Autodesk Softimage v.7.5