In fact, the only thing Puppeteer does is link an object's position,
scale and rotation (PSR) data to another object's PSR data. The way it links these, and
the way this data can be changed in the process, is what Puppeteer
is all about. Next to that Puppeteer has an extremely flexible
way to define the two objects. In fact, it is completely object-independent.
This means that you can either attach the tag to one of the objects
in question, or put it somewhere else completely and make it find
the two objects you're looking for. Furthermore, there are a few
handy features built in to define exactly what relationship the
two objects have. You can define exactly what position-change
of the one object does to the rotation of the other object for
example, by simply moving and rotating the two objects in 3D space!
Furthermore, Puppeteer's window is completely non-modal, meaning
that any change you make is displayed in real-time in the editor.
This allows for a very easy setup compared to typing your own
code.
|
You can think of Puppeteer as a channel in a sound-mixer: there
is data coming in, being modified, and being sent out again. The
input and output in these cases are the objects, and the data
is the object's PSR data, intead of the soundwave. There are a
few stations the data passes by in the process. I'll explain them
all in turn below, together with the interface elements that drive
them.
|
The Source object can be seen as the input object. It's the object you're going
to be using to influence the Destination object, which, in turn, can be seen as the output object. In Puppeteer,
the source and destination objects can actually be the same object!
You can, for example, use Puppeteer to make an object rotate in
P by 90 degrees for every 100m it moves in Z.
You define the source and destination object in the upper-left
and upper-right area of the Puppeteer window. There you can choose
various methods of definition. With the exception of Custom, these
are all relative methods, so they take the object the Puppeteer
tag is attached to into account.
The method This object refers to the object the Puppeteer tag is attached to, plain
and simple. The other options: Parent object, Child object, Previous object and Next object, all work relative to the object the tag is attached to. So Parent object will, for example, use the immediate parent of the object as
the source object. With all these four options, you can also set
a Level, with which you can broaden the scope of the option. For example,
if you set the source object to Next object, and the Level to
4, Puppeteer will use the fourth direct neighbour of the object
the Puppeteer tag is attached to. Keep in mind, that Previous
and Next will regard objects as if they are folded in the Object
Manager. They will look for objects in the same level of the hierarchy,
not to their parent or childs. Likewise, Child will look only
for the first child of an object, or the first child of that if
the level has been set. It will disregard other childs of the
object completely. Parent will take the direct parent, or the
parent of that if the level has been set. It will disregard the
neighbours of the parent object.
There are three other object types: Selected object, Custom, and
Custom in parent space. Selected object is more of a function than an object type. It will simply look
which object is selected in the Object Manager, fill in it's name
into Puppeteer's name field, and set the object type to custom.
Custom, then, is the mode you are most used to in Cinema4D. It simply
allows you to fill in a specific object name, and Puppeteer will
search all objects to find the first object with that exact name.
Custom in parent space is similar to Custom, in that it searches for an object with
a certain name. The difference with this type of search is that
the search can be limited to just the objects that are at the
same level, or deeper than, the object the tag is attached to.
So it will search all objects that are a child of the same parent
as the tag's object, and all their child objects. On top of this,
you can also set the Level parameter here. Setting it to two for example will search all
child objects (and their child objects, etc.) of the parent of
the parent (thus: two) of the tag's object, broadening the search
with one level in the hierarchy. The main use of this type of
object definition will become clear if you want to create a Puppeteer
driven structure, and use it multiple times in the same scene.
With Custom, each structure will find the first object in the
whole scene that has the desired name, so all structures will
use the control-object of the topmost structure! If set to Custom
in parent space, with the Level set correctly, you can limit the
search of each structure to just the objects within it's own hierarchy.
Next to the name field is an extra button: Set Custom. Like the Selected object option in the popup-menu, this will
fill in the name of the currently defined object (like the Parent,
or This object) and set the object type to Custom.
|
Between the two object definition areas are two extra settings:
Strength and Active.
Strength defines how strong the overall influence of the Puppeteer tag
is in relation to previous expression tags. Cinema4D calculates
all expressions on an object from left to right (that is, expression
tags that are on the left in the Object Manager's tag display
area are calculated first). Also, it calculates a document's timeline
first, and any expressions after that. Suppose you have an object
that is animated to rotate in H, and add a Puppeteer somewhere
that makes the same object rotate in H as well. The strength value
is then used to decide to what extent the Puppeteer tag influences
the object's H rotation. If it's set to 100%, Puppeteer will have
full influence. If it is set to 50%, the object's H rotation will
be a mix between the animated rotation and the rotation caused
by the Puppeteer tag. Similarly, adding another Puppeteer tag
to the right of the last tag, also affecting H rotation and set
to 50%, will mix the result of the last mix (50% animation, 50%
first Puppeteer tag) once again. Effectively this will result
in the animation having 25% influence, the first Puppeteer tag
also having 25% influence, and the second Puppeteer tag having
50% influence.
The Active checkbox allows you to completely turn off the Puppeteer tag.
It is advisable to turn Puppeteer off when doing the first settings,
like linking the correct data together and setting the curve (more
on both further below), and only turning it on when doing the
final tweaks. Since the Puppeteer interface is completely non-modal
and works in real-time, any mistake you make accutely changes
the destination object, and a mistake might mean inadvertedly
sending your object into infinity!
|