MAKING 3D ITEMS - BLENDER

Rigging

21min

Blender Compatibility Considerations

The ZEPETO rig is set up in Maya, and uses Maya's default joint orientations. In Maya, joint chains can be aligned to any axis, whereas in Blender, bones are strictly pointed along the Y-axis. While it may look strange, for compatibility with the ZEPETO avatar, it is important to not change the bone orientation of default bones.

Document image


Blender doesn't support binding meshes to a posed armature in the armature's non-rest pose. When binding weights to the armature, use an armature applied at the desired rest pose in pose mode or a duplicate rig with an A-pose set as the rest pose.

What’s Rigging?

Rigging is the process of applying the data to make an item move with the ZEPETO avatar. Without rigging, an item won’t move with the avatar in the app. Through the process of rigging, we’ll tell our item how to follow the avatar’s skeleton. More technically: In 3D applications, the 3D geometry of a character is often controlled by joints or bones. These joints or bones are special 3D objects that don't show up in rendering that set rules for how a character will move, often serving as pivot points. Rigging is the process of saving data that tells a mesh's vertices how closely they should follow a given joint or bone. In Blender, this type of data are called "vertex groups." Weights can be numerically assigned or "painted" onto a model. As virtually painting on influence is more approachable than assigning decimal numbers to individual vertices, we'll be focusing on this method of weight painting to save time and sanity. Joints and bones serve similar functional purposes in 3D software, with slight differences that go along with their terminology. Joints represent a single point in 3D space with no software-defined preferred directions. Maya uses joints and generally tends to align joints with their X-axes pointing to the next bone on the chain. Bones functionally also represent a single point in space, but have software-defined directions that it expects other characters to follow. Blender uses bones, with their Y-axes designed to point to the next bone on the chain. This difference between bones and joints creates a few issues in how the rig is handled in Blender that we need to work around.

Rigging Requirements

  • The "hips" and "hips_scale" bones must be included
  • Generally, try to prevent the mask from poking through your item while weight painting
  • Make sure the body and items don't collapse in on itself when the armature is moved
  • Maximum skin weight influences are fixed at 4
    • These are Blender’s defaults, but to manually set the weight influences, go into weight paint mode for the item mesh. In the Weight menu in the 3D viewport, select “Limit total.” Expand the menu that appears at the viewport’s bottom left and ensure that the “Limit” value is set to 4.

Generally, dresses use the bones of the upper and the lower sections of the rig, while other items have a more constrained selections. The mask object that comes with the Creator Base Set has the weights from the ZEPETO avatar. It's useful to use the weights from the mask object as a basis for weighting items. To transfer the mask weights to the item's weights, use Blender's Weight Transfer functionality.

Process

Use Creator Base Set Contents

Use the mask and armature objects included in the creatorBaseSet_zepeto.fbx file. These objects have a defined set of object names, bone names, and bone orientations that ZEPETO studio will look for to make an item work in the app. It's important to keep the names similar to not confuse the conversion process later in Unity.

Non-T-Pose Rest Poses

Blender applies its initial weighting data to an armature’s “rest pose.” This means that if you modeled items in an A-pose and try applying it to a T-pose rest pose armature, the item may shift out of the correct position in the initial binding operation. To get around this issue, it is useful to bind the item to an armature that has its rest pose set to the item’s modeled pose. A useful method to having a non-T-pose rest posed armature is to create a duplicate of the original armature and mask, applying the rest pose to the newly duplicated armature, and rigging the clothing item based on the rest pose. For organizational purposes, the duplicated mask and rig should be renamed based on their new pose. Putting each armature and mask set in their own collections can also help with organization. Applying a rest pose to the armature is relatively simple:

  1. Pose the armature in your desired pose
  2. Select the attached mask element, and find the Armature modifier in the Modifier Properties tab a. In the dropdown menu in the Armature modifier, select “Apply”
Document image


3. Select the armature element and go to Pose Mode

  • Select all bones and go to the Pose menu at the top of the viewport
  • Go to “Apply,” then “Apply Pose as Rest Pose”
Document image




4. Return to object mode and select the mask element

  • In the Modifiers tab, add a new Armature modifier
Document image

  • In the Object target spot, find and select your posed armature
Document image


Now the armature has a new rest pose applied to it and the mask element will follow this new rest pose.

📘 ZEPETO has specific rotations for the A-pose that appear on ZEPETO template items with a top element

The ZEPETO A-pose has rotations across 4 total bones:

  • Shoulder bones “shoulder_L” and “shoulder_R” are rotated by -7.5 degrees on the Z-axis
  • Arm bones “upperArm_L” and “upperArm_R”

It can be easier to apply rotations on bones using Euler XYZ rotations rather than Blender’s default quaternion settings. Change these rotation axes in the Bone preferences tab for ease of use.

Document image

Document image


General Workflow

Use the mask and armature objects included in the creatorBaseSet_zepeto.fbx file. These objects have a defined set of object names, bone names, and bone orientations that ZEPETO studio will look for to make an item work in the app. It's important to keep the names similar to not confuse the conversion process later in Unity.

  1. Ensure the armature fits the item and is set in it's rest pose
  2. If the clothes are modeled to fit a T-pose, the unaltered creator base set armature will work by default a. If the clothes are in ZEPETO's A-pose you may need to set the armature to fit the A-pose
  3. Select the costume item, then the armature
  4. Apply a parent to the armature with empty weights
Document image


5. Transfer the weights of the mask to the item

  • Select the mask, then the item
  • Move to weight paint mode
  • Use the "Transfer Weights" operation in Weights > Transfer Weights
  • Make sure the Transfer Weights operation is done "By Name"
Document image

Document image


6. Rotate joints to check if the weights on the item are set properly

  • Edit the joint weights using the weight brush tool. Make sure that deformer weights are normalized.
Document image

  1. When bone weight correction is complete, reset the transforms of all the bones

🚧 The ZEPETO avatar uses scale bones to adapt the base avatar to multiple body sizes.

When the skeleton has both a scale bone and a non-scale bone, apply weights to the scale bone and leave the non scaled bone with no weights.

Blender’s symmetry and bone naming system prevents the provided rig from having easily mirrored vertex groups using built-in weight mirroring tools. Weight symmetry has to be manually applied or mirrored via an add-on.

Skirts

Rigging skirt elements requires some additional attention. Skirts are more challenging to rig in ZEPETO due to the standard behavior of anything with leg elements. Skirts will follow the legs of an item like an expanded set of pants. This can lead to the middle section of the skirt stretching when the legs are moved apart. This is unavoidable, but through some careful weight painting, the stretching can be smoothed out.

Rigging Cleanup

A-pose to T-pose

When the rigging binding and correction is complete, the rig has to be reverted to the T-pose to export. To do this, we’ll take our item rigged to the A-pose armature and put it into a t-pose, apply the item in the T-pose, and rebind the item to the T-pose skeleton. In more detail:

  1. Select the A-pose armature in pose mode.
  2. Move the armature bones back into T-pose a. For the ZEPETO A-Pose, this can be easily accomplished by rotating the shoulder_L and shoulder_R bones by 7.5 degrees on the Z-axis and rotating the upperArm_L and upperArm_R bones by 40 degrees on the Z-axis
  3. Select the item in object mode
  4. In the modifier properties tab find the armature modifier
  • Click the dropdown menu and hit apply
Document image


5. Add an armature modifier to the item

  • Point the armature object to the original creatorBaseSet T-pose armature
Document image


6. Make corrections to the item’s mesh or to the item’s weights for any errors that appear from the weight transfer

Due to how deforming works, meshes moved back into T-pose are likely to lose some volume in the shoulder/upper-arm area on return to T-pose. Editing the mesh to add volume back is a relatively simple fix. Use the T-pose Mask as a reference for mesh boundary areas.

Deleting bones

When all weights have been finalized and are ready to export, delete bone sets with no influence on the item. ZEPETO studio limits the number of bones an item can be uploaded with to 100. Deleting unused bones preempts this bone count issue, as Blender’s exporter will export every bone in the skeleton, even if they lack vertex groups or weights. If an item requires many additional bones, it may be necessary to remove non-scale bones to reduce bone count. If required, delete non-scale bones with a corresponding scale bone, except if they are twist bones or the hips bone. The item will break if the hips bone is not included.

Document image