The pointcloud location is the simplest geometry type in Katana, and in addition to the standard geometry.arbitrary.* and geometry.point.P handling KtoA extends it with quite a few attributes to make it useful in a variety of situations.

Added Attributes

Point-based instancing

If the attribute geometry.point.instanceSource or geometry.instanceSource is present, the pointcloud switches to generating point-based instances.  The additional attributes that are honored in this mode:

 

Note that the per-instance transformations are applied in the following order: scale, quaternion rotation, rotation (in XYZ order), translation (geometry.point.P),  and finally the matrix.  All of these (except for geometry.point.P) can be omitted.

Instance Arrays

Point-based instancing can also be accomplished using instance array locations, which has a different attribute layout than pointcloud instancing.  The following attributes are honored:

 

Note that the per-instance transformations are applied in the following order: scaling, X rotation, Y rotation, Z rotation, translation, and finally the matrix.  At least one per-instance transformation attribute needs to be included.

Common Instancing Attributes

Finally, arbitrary user data (geometry.arbitrary.*) attribute groups are also applied.  If the scope is point (Arnold varying) then it will apply each varying value as primitive scope (Arnold constant) user data on each instance.  In this way, arbitrary data can be doled out to each individual instance to customize them.  Abitrary data can be explicitly restricted to one (or more) of the instance source children by specifying the geometry.arbitrary.paramname.match string array, where each string is a subpath to the particular instance source child you want the arbitrary data to apply to.  E.g. if the instance source has children prim, primgroup/prim1 and primgroup/prim2, and the pointcloud location has geometry.arbitrary.myAttr.match with a string primgroup/prim1 in it, that arbitrary data will only be applied to the instance created from primgroup/prim1.