Block Out Character

Setup Reference

We are going to roughly block out the dimensions of our character and manually step through the entire process to get an avatar rendered in the ODK.

We want our Boxie character to be around the height of a Voyager so roughly ~1.8 meters tall. Too tall or wide and the character may not fit through certain areas or other assumptions might break too small traversal will look very strange and again some assumptions may break. That is why making characters between 1 m and 2 m is a hard requirement.

If you aren't already there switch to the Layout view in Blender and delete the Camera, Light, and Default Cube. This is also a good opportunity to save your file.

Let's download the Avatar Height Guide from above, and then in Blender create a Plane. We are going to apply the Height Guide to the plane to get a rough idea of how our avatar will compare to ones already in the Otherside.

If the sidebar on the right isn't already visible click on the small right arrow < to open it up.

We are going to edit the scale settings so the image is approximately to scale. It isn't pixel perfect but it will get you in the ballpark. Set the Scale X value to 3.825 and the Scale Y value to 2.150.

Now we can add the height guide to the plane so we can reference it when doing our block out. Switch over to the Shading tab.

With the plane selected press the New Button on top of the Shader Editor panel.

You can go ahead and just delete the node labelled Principled BSDF and then drag and drop the Avatar Height Guide file into the Shader Editor.

Connect the Color pin on the right side of the Image Node to the Surface pin on the left side of the Material Output node.

If you notice the color looks a little muddy. This is because by default Blender uses a View Transform called AgX. This view transform is useful for photoreal results in renders from Blender. Since we aren't going to be rendering our characters in blender we want to switch the View Transform to Standard.

In the properties panel on the right click on the Render Properties tab which looks like the back of a DSLR camera.

At the bottom there is a section called Color Management. Set this to Standard

Nice! Let's jump back over to the layout tab. At first you will not be able to see the image. We can easily change this by clicking on the dropdown in the top right hand side next to the four little sphere icons.

For now we are going to change our Lighting to Flat and change the Object Color to Texture

Now we can align the feet of the avatars in the guide to be aligned to 0 on the X axis. For this we will need to rotate the plane 90 degrees about the X-Axis and scootch it up 0.785 m along the Z-axis. I am also going to move it slightly to the right so the voyager is aligned with the center of the scene, 0.18 m along the X-axis.

Blocking Out

For my block out I am going to use 10 different primitive cubes scaled to represent the head, torso, arms and legs.

The simplest way to transform 3D objects is to click on the transform type on the left hand side. To work faster using keyboard shortcuts refer to the Blender documentation -> https://docs.blender.org/manual/en/4.5/scene_layout/object/editing/transform/introduction.html

You can add cubes just like we added the Plane above.

I added my cubes and lined it up pretty closely to the Voyager. I am not feeling very creative so I am not going to deviate from that general shape, but you do have some flexibility to change the proportions slightly to better match your character.

I am going to hide the avatar height guide by pressing the eyeball next to the plane in the outliner and switch the viewport back from flat lighting to studio lighting to get a better look at the shape of Boxie.

Take this opportunity to name the boxes something logical. The standard when creating characters is if you are using Left/Right is to always use the characters Left/Right and not the viewers. I also know what is coming next so I named the cubes for what bones will drive them once we get to weighting.

If you feel confident you are done with the reference image, you can delete that now.

Weighting

We call this weighting because it involves the weighted influence of a bone to every single vertex. For example with Curtis the stomach area might have weights from multiple spine bones so that it deforms smoothly as the spine twists.

There is a hard limitation in the Otherside that there can only be 4 bone influences per vertex. You don't have to manage this yourself, Blender will handle that on export of the GLB.

Obviously manually assigning weights to individually vertices is usually not feasible as there could be thousands of vertices and almost 90 bones.

In most cases you will use some sort of tool to help with weighting, usually starting with an automatic weight tool, and then if there are still issues using a process called weight painting to fix specific problem areas.

Blender has some automatic weighting tools and there are several free and paid addons that can may work better such as:

https://superhivemarket.com/products/voxel-heat-diffuse-skinning

or free one from the same author

https://github.com/meshonline/Surface-Heat-Diffuse-Skinning

This guide is for the simplest avatar collection so instead we are going to rigidly bind our skeleton. This means each box of Boxie will only be influenced by one bone. We will completely side step automatic weighting and weight painting and instead manually assign full weights to one bone for each box.

Download the ODK_Base_Skeleton from Resources and import it into Blender.

When moving between different software packages sometimes one may use one meters and another uses centimeters or one has the up axis as Z and the other has it as Y. In this case we can easily work around this by applying transformations in Blender to fix those issues.

With the newly imported Armature selected we can Apply -> All Transforms.

I am also going to to rename the armature for organization.

The ODK Base Skeleton doesn't exactly line up with our character. We will need to adjust the bones so that it fits better.

To enable moving bones select the armature and change the mode from Object Mode to Edit Mode

Armature Editing Tips

You can select bones in the viewport or in the outliner.

To move a bone and all it's children select the bone, and with the mouse in the viewport press Shift - G and then from the list select Children

Holding down the Alt key while rotating the scene with the middle mouse button will snap the view into Orthographic mode which makes it easier to line up the bones.

Now that the armature is lined up we can move onto binding the meshes to the armature. This process:

  • Makes the meshes children of the armature object

  • Creates vertex weights for each object

Since we are manually setting the weights we are going to skip the automatic weighting and create empty vertex weights.

Make sure we are back in Object Mode and select the armature object. While holding down shift select the rest of the objects.

With the cursor over the 3D Viewport press Ctrl + P to open the parenting menu and select With Empty Groups

The meshes should now be children of the armature object and have vertex weights assigned to them. Currently all vertex weights should be assigned to zero.

To start editing vertex weights click on the vertex weight tag next to the object, you can filter the list in the Properties Panel by unfurling the filter bar below all the weights and typing. I intentionally named all the meshes the same as the bones I was going to bind them to.

With the appropriate vertex weight group selected make sure you are in Weight Paint mode and either select Set Weight from the dropdown menu at top of the viewport, or press Ctrl + X on the keyboard.

Repeat these steps for all the other meshes that need to be rigidly bound. To switch between meshes that are activated for weight painting you can click on the dot next the mesh in the Outliner.

Export and Test

We can now export a GLB. I am going to only items that are visible, that way if you still have the reference image in the scene it will be skipped.

Make sure the format is glTF Binaryt (.glb) and under Include Visible Objects is checked.

To do a quick test of the avatar open up https://mml-io.github.io/avatar-tools/main/tools/gltf-avatar-exporter/ in a browser and drag the avatar into the window.

There shouldn't be any errors in the bottom left hand window and if you press Use Sample Animation the avatar should animate cleanly.

This tool will also do some minor adjustments and reposing to ensure that the avatar will work in the Otherside. To save the fixed avatar from the tool press the export button in the top right hand corner.

Last updated