What this blogpost is all about
This blogpost will expand further on the previous topic of character rigging and animation in Cinema4D. It will tackle the question, how a rig can be connected to a modelled geometry, how the created character can be animated and what role topology and edgeflow play when rigging a model. Furthermore, it will also explain the role of controllers and constraints when animating a rig.
Connecting the rig to the character / geometry
Parent – based rigging
Parent-based rigging is the most simple way to connect a piece of geometry and can be great for animating usually inanimate objects, like lamps or balls or smaller robots, such as claw-hands or the like. To parent – rig a geometry, simply make the geometry you want to animate a child of the joint you want it to affect. This allows for the geometry to the be influenced by only its parent joints, which makes it a great tool for animating basic shapes and geometry quickly. Furthermore, it also allows for the use of parametric objects when animating, since there is no need to access the points / vertices of the object.
As a result of its rudimentary functions and due to these limitations, however, it is not suitable for animating more complex geometry.
Point weighting, weight management, normalisation and point – weight – based animation
Point weighting, in comparison to parent – based rigging, is much more precise in how it affects the rigged geometry. The main difference between the two is, that instead of each mesh / piece of geometry being assigned as a child of one joint, with point weighting you can, as the name implies, weigh each singular point / vertice to multiple different joints. Point weighting, in this regard, controls how the edge flow and overall topology react to the movement of the joint. As such, for effective point weighting and weight – based animation to be possible, it is imperative to have a clean, artifact-free topology and consistent edge flow.
The weight – assigned in percentage – thereby describes, how much the movement of a joint affects the weighted geometry. The difference hereby is, that one point / vertice can be weighted to multiple joints at the same time and thus be affected by their movement. The percentage of the weight, in such a case, controls how much the point gets affected by the joints movement.
To give an example, if a point were to be assigned 50% weight of one joint A and 50% weight of another joint B, if you were to rotate joint A by 90° along the z-axis, but did not rotate joint B at all, the points would only rotate 45° (or, as assigned before, 50% of the weight). It is thus possible to say, that the assigned weight displays, how much control any given joint has over a point. It is important to note, however, that, in order to get clean animations and proper control over the points, each point needs to be assigned a total weight of 100% to the different joints, so it needs to be weighted at 100%. This is called normalisation and it ensures, that no point remains unaffected by the movement of the joints / remains stuck in place, when you move the rig along and thus deforms the topology and mesh in undesirable or unforeseen ways. As such, 100% absolute distribution is the goal when point weighting a mesh.
Simple weighted character mesh of a flying bird. The different colours show the weight distribution of the mesh to the different joints of the rig.
Of course, it is possible that, even with 100% absolute distribution, some parts of the mesh get squished or deform in a weird way when moved / rotated past a certain point. To prevent that, the fan-bones, mentioned in the previous blog entry, can be used. By simply assigning weight to the fan bone instead of its two parent joints, the rotation and movement of the mesh can be smoothened out and blended together in a way that prevents the undesirable squishing and / or deformation from occuring. Furthermore, a fan bone’s pole vector allows for a more precise control of the direction the topology deforms in, similar to how a joint’s pole vector allows for a more precise setting of the bend.
Constraints and controllers
To prevent self-intersections during movements and, as another way to influence and refine how a rigged mesh operates when animated, it is possible to use constraints. Contraints, as the name implies, constantly update and constrain certain parameters or properties of any object, joint or bone they are assigned to. This way, the assigned object can, for example, be made to follow a selected target or change its rotation or position depending on different situations. The set target for any given constraint is what is most commonly known as a controller.
Two good examples on a possible application of constraints would be the AIM and the PARENT constraint.
The AIM constraint
By adding the aim constraint to joint and setting a random object (e.g., a cube, sphere, camera, null, etc…) as a target (controller), the joint’s general direction and rotation as well as the direction of that joint’s bone will always follow the movement of the selected target, no matter, where in the workspace it is moved to. This can, for example, be used to rig a character’s head or eyes, so they follow an object’s movement or make them always focused on the camera.
The PARENT constraint
While the aim constraint mainly limits the direction an object is facing, without affecting its actual position, the parent constraint constrains the object it is applied to to the selected parent object and ensures that the position and rotation they have relative to each other remains the same. That way, if you move the parent object, you also move the constrained object / joint the same way, while, if you were to rotate the parent object, the constrained object would be rotated and moved around, so their relative postion would remain the same.
Here, it is important to note that, unlike the aim constraint, which assigns just one target for the object to follow, with the parent constraint it is possible to set multiple such targets. When doing so, it is possible to regulate the strength with which each target affects the constrained object and even to blend two different influences together.
Just by looking at these two examples, it should already become obvious why, when rigging an object, proper use of constraints can not only help make the animators work easier, but become outright necessary to ensure a smooth and impeccable animation flow.
Controllers
As mentioned before, the set target for a constraint is usually called a controller. Here it is important to note, however, that, by setting a null object or similar target as a controller, and using the proper constraints, the animation of a mesh can become way easier since, instead of having to animate each movement of any given part of the mesh by hand, it becomes possible to just animate the respective controller and, due to the previously applied constraints, have the mesh react accordingly and, if set properly, correctly and as desired. This is another reason, aside from ensuring proper movement and deformation, that makes constraints and controllers paramount to rigging and character animation in general.
Next steps:
Advanced tools:
- Muscle Object
- Pose Morph
- Character Obect
- Phase
- XPresso and User Data sliders
Sources:
1. Maxon Training Team.: Intro to Rigging in C4D: Part 2 – Point Weighting, https://www.youtube.com/watch?v=oiEUwM7vdCg [26.01.2024].
2. Maxon Training Team.: Intro to Rigging in C4D: Part 3 – Constraints & C-Motion, https://www.youtube.com/watch?v=sUkRFEQGTqU [26.01.2024].