This is a contributors guide for those doing character work, such as rigging, and animation.
You can follow on of these guide to O3DE get up and running:
Multiplayer sample (MPS) project for the Open 3D Engine
O3DE multiplayer sample assets (this guides parent repository)
o3de-multiplayersample-assets/GettingStarted.md
This guide will help you get up and running with Digital Content Creation tools (DCC), such as Blender or Maya.
You must be aware of asset licensing restrictions present in this repository.
Some Assets have been developed by third parties and are subject to separate license terms (such as the Kitbash3D assets or Adobe Mixamo files). It is your responsibility to comply with the applicable licenses for such content should you choose to use these assets in any other project. Information on third party materials, and the applicable license terms, are referenced in or included with the asset artifacts (3d models, texture images, etc.), such as in separate LICENSE*.txt files accompanying the materials in each Gem or Asset subfolders.
If you are contributing new assets to this repository, all contributions must be freely available public domain content, wholly new works of art, or modified and ported conversions of assets with similarly permissible licensing. You must document the origin of assets even if modified and include licensing information for the assets within the assets subfolder (add a LICENSE.txt). Generally all new asset contributions must be made under a permissible open source license, such as: Creative-Commons license (such as LICENSE-CC0.txt or LICENSE-CC-BY-4.0.txt)
The main character model for the MPS game, is based on the YBot Mixamo character from Adobe (along with the actor using the Mixamo skeleton and animations.) This section covers the construction of the YBot model, with a target of a character with roughly 15K polys in the highest LOD, while trying to retain the visual quality.
This is the native download for the Mixamo YBot:
Gems\character_mps\Assets\Mixamo\Ybot\.src\native_mesh.fbx
The first thing we did, was make a 'High Poly' asset for use in a baking workflow.
This will allow us to have some natural creased edges and smooth topology to bake against.
Native_smooth_HIGH.fbx
character_mps\Assets\Mixamo\Ybot\.src\LODs\Native_smooth_fix_HIGH.obj
)Here is what the model body and UVs look like:
Gems\character_mps\Assets\Mixamo\Ybot\.src\Native_mesh_working.mb
Alpha_mesh_LOW.fbx
Then we create a bake set file:
Bake_set_working.mb
Native_smooth_HIGH.fbx
Alpha_mesh_LOW.fbx
Alpha_Bake_Set.fbx
Alpha_mesh_LOW.fbx
(this is the final model version we will now be importing up a level into the actually game asset files)Then we bring into Marmoset Toolbag 4 which we will be using as our bake tool:
I set up one bake file, it has 3 bake projects, to just generate only the color and normal map texture channels for each piece of the model: head, body, joints.
See: Marmoset_TB_Alpha_Bake.tbscene
I prefer to use .png files, and I generally bake everything at 16-bit (even though we will convert to 8-bit game textures later.)
Note: O3DE and the Atom renderer support the following (we need to make sure that bake projects are configured correctly):
Make sure to set up each bake project with an output path, the texture channels to generate, etc.
We perform each bake project (hit the bake button)
We load the baked texture channels into materials assigned to the low poly meshes, so we can preview the results (looks pretty clean, can't really tell at all we dropped from 55k to 15k. Woot!)
Then we make a second bake file, this time to capture other texture channels such as Ambient Occlusion (AO)
The data (models and textures) are all brought together in the final asset source file, which is a level up from /.src
Move/save the textures you want, from the Marmoset Toolbag bake output:
From: Gems\character_mps\Assets\Mixamo\Ybot\.src\Texture_Bake_Channels\*
To: Gems\character_mps\Assets\Mixamo\Ybot\textures
I generally convert the file to 8-bit before saving the in the final location. Note: with 16-bit normals to 8-bit, this will introduce a subtle dithering of the normals, which is actually an enhancement to the final compressed normals - although some modern games are now using 16-bit compressed normals for better fidelity.
Use good O3DE texture naming conventions
We made a Maya working file: Maya2023_ybot_yup_working.mb
First, imported the raw ./.src/native_mesh.fbx
this gives us the original skinned model, and the mixamorig (note: the rig is in the namespace, mixamorig:hips)
We unparent and pop the original model out, and place under a node called REFERENCE
so we can refer back to it, pull from it to copy skin weights, etc.
Then we put the skeleton rig under a root node called YBot
this will be the root node we export as the asset.
Then we import our new base model: ./src/Alpha_mesh_LOW.fbx
We place that under the root YBot
node.
We set up several materials.
Notes: the way source material conventions with the O3DE material component, is:
"< model.fbx name > _ < material node name > (we will come back to this later, but this avoids collisions with asset names.)
In the DCC source file, we name the material nodes descriptively based on what they are assigned to: head_MAT, body_MAT, etc.
We separated the assignments of materials for the right and left arms and legs, so that we could increase character variants by assigning mix-and-match material sets to the material slots later.
we used StingrayPBS materials, as these are supported for portable conversion; we can load texture maps into these, and those texture bindings will be converted into the atom game materials. (more on this later also.)
Note: Maya does not use standard MikkT tangent space, so your normal's are not likely too look correct :( don't worry about it.
This can now be exported so we can test the model and materials in the game engine, export as: ybot_mesh_test.fbx
Now we can bring this into a game level and validate the mesh and materials.
ybot_mesh_test.fbx
asset (aka ModelAsset)At this point, you'll see the mesh load and some default materials. Note: we call these the 'default dcc materials' (.azmaterials), these are owned by the FBX scene (and will update along with changes to that scene), they are the materials the mesh pipeline automatically generates from the materials nodes. They only exist as product outputs in the cache, and not in the source assets folder. But, we could later convert these to editable source materials that do live in the asset folder (but we aren't going to do that for this workflow.)
We used the Material Editor, to create 3 base materials: ybot_head_base.material, ybot_body_base.material, ybot_joints_base.material
Next we exported the Ybot Alpha_Mesh (the final optimized model), as an .OBJ and imported it into Mesh Lab to generate additions mesh LODs, I used this as well as mix-and-match of Maya reduction tools and some manual adjustments.
< to do: finish >
< to do: nest steps, setting up the Actor with Mesh LODs, skeleton LODs, etc. >
< to do >