SmartBody characters can synthesize locomotion using only a single walking cycle file. The motion synthesis uses the steering engine as a controller for the position objective and can follow the computed path.
Setup
The locomotion system requires a retargeted motion file and footstep annotations in order to work. A number of options can be defined to modify the behaviour of the character:
Attribute | Description |
---|---|
walkCycle | Name of the file that contains the walking cycle |
walkSkeleton | Name of the file that contains the associated skeleton of the cycle |
walkScale | The scale of the motion data, usually 1 for meters and 0.01 for centimeters |
walkSpeedGain | The desired speed of the motion. Default is 1 for no alteration |
LEndEffectorJoint | Name of the left foot on the skeleton. It represents the joint that goes in contact with the floor while walking |
REndEffectorJoint | Name of the right foot on the skeleton. It represents the joint that goes in contact with the floor while walking |
CenterHipJoint | Name of the joint that connects both lower extremities. Normally is on the middle of the hips |
FadeIn | Interpolation value needed for motion continuity between the fly phase and the landing phase |
FadeOut | Interpolation value needed for motion continuity between the departing phase and the fly phase |
TurningRate | Rate at which the character turns. If it is too high, the character legs will likely collide |
footPlantRight | Foot contact information of the right foot |
footPlantLeft | Foot contact information of the left foot |
startsWithRight | True if the motion starts with the right foot on the floor, false if it starts with the left one. Default is true |
After the parameters are set, the system can start to generate locomotion, a possible configuration looks like this:
brad.setDoubleAttribute("walkSpeedGain", .8) brad.setStringAttribute("CenterHipJoint", "JtPelvis") brad.setStringAttribute("footPlantLeft", "10,22") brad.setStringAttribute("footPlantRight", "0,6,29,36") brad.setStringAttribute("walkCycle", "ChrBrad@Walk01B") brad.setStringAttribute("walkSkeleton", "ChrBrad.sk")
The motion file needs to self concatenate. In order to achieve this, it runs through a smoothing process. It is assumed that the file provided was already segmented and has the following characteristics:
- It starts and ends on a similar pose, this pose is not repeated among the cycle.
- The cycle contains 2 full steps.
- The initial pose starts(ends) with one foot on full contact with the ground and one flying on the air.
- Both feet have a minimum distance at the start(end) of the cycle.
The picture on the left presents the starting-and ending- pose. The one on the right is when when foot contact starts for the left foot and ends for the right foot
Foot contact
The foot contact information assumes the walking cycle start with the right foot on the ground, if not, the motion is mirrored so it starts that way. Given that you will see a motion that starts with the right foot in contact with the floor anyway, the amount of information on footPlantRight and footPlantLeft will be the same regardless of the foot that starts in contact with the ground.
footPlantRight: It contains the information of the foot that starts in contact with the ground. It has to be a list of four integers:
- It is 0 and represents the first frame of the motion in contact with the floor.
- Is the first frame that is not on full contact with the floor, the toes can still be in contact.
- Is the first frame greater than the previous value that has a complete foot contact with the floor.
- Is the last frame of the cycle, the foot should be in contact with the floor at this moment.
footPlantLeft: It contains the information of the foot that starts and end on the air in the cycle. It has to be a list of two integers
- Is the first frame that is on full contact with the floor.
- Is the first frame greater than the previous value that is not on complete contact with the floor.
Limitations
Due to the nature of the controller and its low requirements, some limitations are encountered. The first one is that the style is fixed by the cycle, that limits considerably the speed to which it can deform without introducing artifacts. A second limitation is that it doesn't blend in or out of an idle position, if it begins to walk, there will be no motion connecting the cycle and the idle pose.
Regardless of the limitations is suitable to mention that this controller relies only on one motion file while the example one needs 20, each one with specific characteristics.