Kinematic Tools

There are quite a few solutions for kinematic dependencies around. Development of the Collie Tools version began before XPresso was around, and before some of the other solutions were distributed. If you use one of the other solutions already, there may be no need for the Collie Tools kinematics, but Collie Tools provides a common idea and design for several kinematic dependency models, and will continue to offer rich special solutions in the near future.

What problem do they solve?

The kinematic tools are a set of expressions that allow linking one object to another. Normally, objects are linked already to their parents, so they move when the parent does. The kinematic toolset allows linking of any two (or more) objects, independent of their tree hierarchy.

For example, the expression "Copy Transformation" will allow you to link the rotation of a cylinder with the rotation of a cube that may be found anywhere else in the tree.

It is possible to do all that with XPresso as well. XPresso will give you even more options, allowing you to link anything with everything through arbitrary mathematical formulas. XPresso is a very powerful tool, and I highly recommend learning how to use it. However, there are a few disadvantages in using XPresso. First, you have to set up the connection, which takes time (unless you use templates). Second, the finished connection may be a complicated graph with lots of nodes, and difficult to understand. Third, the XPresso expression will appear as a very unspecific node in the tree view, telling you nothing at first glance. Fourth, the XPresso tooltip is not very useful. Fifth, the XPresso expression cannot be localized (translated) with the usual concepts of C4D... These disadvantages are not really heavyweight, and the experienced XPresso programmer may even prefer his tool to any possible special expression.

Collie Tools' kinematic expressions handle the most common connections: make an object move like another, make an object rotate like another, point at an object, occupy a position between two other objects. Although there may be extensions in the future, they do not handle exotic cases like "connect the scaling of one object with the red glow in the texture of another". With XPresso, you can realize such a connection, but that is not the purpose of the Collie Tools.

The Collie Tools will provide the basic few connections, which actually cover perhaps 80% of what you need in a scene. They have a unique icon each, so a mere glance at the tags of an object will tell you how it's connected. Better yet, pointing at the tag with the mouse will give you a dynamic tooltip that shows the most important values of the tag without ever opening it in the attribute manager.

Which kinematic dependencies are available?

These are the kinematic dependencies that currently exist:

...with more to come. Click on an expression for an explanation.

What do they have in common?

The common feature of all these kinematic dependencies is that they offer a "local name search" to look for the source of the transformation values. Prior to V8, where the "links" were introduced, the source objects could be searched only by name, and the name search always started at the first object in the scene, returning the first object with that name. It is easy to imagine that you got into trouble when you had several objects with the same name, which is not uncommon in mechanics, especially when you copy and paste whole assembly groups.

In those cases, you had to rename the source objects in all assemblies, so that the name search yielded only one unique object.

To prevent that unnecessary work, I programmed a method to limit the name search. Take, for example, a "Point At" expression where you want an object called "Zeiger" point at an object "Target". "Zeiger" holds the tag, but there are several objects called "Target" in the scene. We need to find the correct one. (Image simplified for better understanding - yes, I mixed German and English names here...)

Local Search Step 1

Now you may enter in the attribute manager of the tag a "Start Levels Up" value. That means, for the search you don't start at the first object in the scene, but you start at the current object and go upwards "Start Levels Up" steps - that yields some parent object of the current one. You exclude all objects that are farther up, and all children of these objects. A large part of the branch is pruned for the search, and most likely you will find only the object you desire.

Attributes of Point At tag

The following red frame shows the objects that are the start for the name search for a "Start Levels Up" value of 1. If the value is 0, only the objects on the current level are used as start for the search. If the value is higher than 1, then the search will begin even farther up.

Local Search Step 2

The other value, "Search Levels Down", determines how many levels down the search will stop (counting from the start level). A value of 0 means: don't consider any children of the start level. A value of 1 means: consider all direct children of the start level, but not the children of these children.

The following red frame (in a slightly different hierarchy) shows the objects that are found with a "Start Levels Up" value of 1 and a "Search Levels Down" value of 1. The children of "Zeiger" are not considered in the search!

Local Search Step 3

If the local name search does not find the desired object, it will show an error on the console. (It can not show a dialog in the GUI because the tag is executed very often, and you would get a fulltime job just clicking dialogs away.)

As you can see, with carefully chosen limitations, you can determine what objects will really be found, and prune the search to your current assembly. This way, you can connect several similar copied assemblies without having to rename objects.

Cinema 4D version 8 uses a different approach. Here, symbolic links that are independent of object names are used to connect dependent expressions. As the attribute manager screenshot above shows, the Collie Tools support that method as well. The local name search is still supported as alternative for compatibility reasons and special cases.


Back to Main Manual Page