Collections and CEL

Collection Expression Language, or CEL, is used to describe the scene graph locations on which an operation or assignment acts. CEL statements can also be used to define collections that may then be referenced in other CEL statements.

There are two different purposes that CEL statements are used for: matching and collecting.

Matching is the most common operation, and is used as scene graph data is generated. Many nodes in Katana have CEL statements that allow the user to specify which locations the operation defined by this node act on. For instance, CEL statements are used in MaterialAssign nodes to specify which locations in the hierarchy have a particular material assigned to them. As each scene graph location is generated it is tested against the CEL statement to see if there is a match. If it is, the operation is executed at that location. This matching process is generally a very fast one to compute.

Collection is a completely different type of operation, a CEL statement used to generate a collection of all locations in the scene graph that it matches. Depending on the CEL statement this can potentially be expensive as to evaluate it may have to open every location in the scene graph to check for a match. Collecting is usually done as part of a baking process or to select things in the UI (Find and Select), but also has to be done for light linking if you use an arbitrary CEL expression to specify the lights.