Avatars and assets being unoptimized from stores is both a blessing and a curse for a creator.
You get to mix and match, take what you like, put it together easily when the meshes are all separate. You’re often also given the means to utilize film/animation grade assets to create better game ready assets you like for your needs. It also puts more responsibility on you as a creator for doing the right thing with the way you want your avatar to be.
But you may also be asking amateur creators and users to optimize their avatars before upload.
Let’s understand there are different goals and targets for optimization:
- Game-ready avatars made for mobile platforms. (Good, Medium, maybe Poor on mobile.)
- Avatars (Good/Medium) for an event with 80 or 100 users in a small room, or public instances like The Black Cat.
- Something you wear around 10-15 friends. (Good/Medium, could be semi-optimized Very Poor in some cases.)
- Photography/film assets (one or few users). An avatar which has the performance cost of 4½ optimized avatars, is Very Poor with six 4K textures for one outfit? Sure!
- Paripi animation avatars with particle guns, screenspace FX, etc. No limits, you’re in a showcase world and everyone’s there to show your avatar. Go crazy, the avatar performance stats matter less here than your actual framerate.
There is no one solution, it is part intuition and dependent on the project.
How to draw an owl:
- Draw some circles.
- Draw the rest of the f**king owl.
You’re already in the statistically skilled top 5.4% of computer users or “level 3” in levels of skill if you can handle a multiple step process of installing Unity Editor, registering an account with Unity, acquiring a personal license for Unity Editor, installing VRChat Creator Companion / ALCOM, and open an empty avatar project. Most of the population on planet Earth is unable to succeed in this task (without guidance), even in developed countries.
The four levels of computer skills, and the surprising number of adults who fall short | World Economic Forum
You may also be asking amateur users to spend tens or hundreds of hours away from their social activities on VRChat to learn a new skill (or twenty new skills) that may not translate into their work skills, on the side of regular jobs most adults have on their free time after work, shared with other responsibilities.
A video could tell you to add d4rkAvatarOptimizer to an avatar to optimize it, but the rest is dependent on intuition and understanding your personal needs to get the most out of it.
If I add d4rkAvatarOptimizer on two different avatars in different stages of optimization, I will end up with vastly different results.
Here’s a simple Rusk avatar by komado, after modifying the FX layer to remove gameobject toggles (and some optional texture atlassing to reduce from 6 materials to 3 materials):
Bam. One of the easiest avatars to optimize. Good rated on all platforms. Only a few skills required:
- Learning how to setup an avatar project and to upload an avatar.
- Adding d4rkAvatarOptimizer to your project and avatar.
- Deleting unused FX layers.
- Optionally merging or deleting physbones.
- Optionally using MA Mesh Cutter to remove unseen parts of the avatar.
And here’s another more complex avatar, RURU by Rhimaru, with a half dozen outfits provided before doing anything to optimize the FX layer by hand (8 out of 55 FX layers shown):
You open up the OptimizedLayer FX layer and find this monstrosity of a direct blend tree, for all the toggles to understand (and this is quite optimized):
Close-up screenshot of OptimizedLayer
There’s no handholding here, d4rkAvatarOptimizer is not a silver bullet to fix everything for you. You’ll have to figure it out. The effort to optimize that down? Learning several new skills:
- How to create and setup your own FX controller.
- How to create a new direct blend tree in your FX controller (preferably).
- Removing outfits from the project you don’t use.
- How to record new animation clips (without utilizing VRCFury if you prefer).
- How to setup UV tile discards in a material.
- How to setup a mesh for UV tile discards with PA Assign UV Tile, or in Blender.
- Optionally bake in hue shift customizations into the materials, remove unused decals, etc.
That’s at least six separate videos or articles worth of information. The results:
Clothes DBT
The fishnet mesh from one of the clothes available that you used to cover the top of your body? The high polygon, animation grade body base used?
Performance ranking
RURU picture set 1: A fishnet mesh, on its own transparent material on a Very Poor rated RURU. Results in overdraw for the transparent bits. Incompatible on mobile platforms due to transparency.
It can be a body texture to save triangles and texture memory, in an optimized version. Bake the custom normals from a high poly source into a lower poly body mesh and it’ll still look fine.
Performance ranking
RURU picture set 2: A fishnet texture projected onto the main body material, baked onto the body texture as an opaque “tattoo” (or an optional decal for a toggle) on a Medium rated RURU. Reduced or no overdraw. Compatible on mobile platforms.
Realizing you can optimize something like that with texture projection in Blender and fake transparency onto an opaque texture is intuition. At least two different skills for the fishnet alone, on top of basic understanding of how to use Blender is required. Add at least another four skills required for understanding good topology, how to remove edge loops in Blender, how to export the result from Blender as an FBX file with the correct export settings, and setting up your FBX in Unity for the lower poly body mesh.
You want a Manuka tail and ears from STUDIO JINGO on your avatar, with a custom hair? See the tail in the middle of the texture, ears at the top corners:
That 4K texture (10.7 MB) is costing you a lot of texture memory for the tail alone with wasted UV space.
Learn a new skill in Blender to pack the UVs better onto a 2K texture (2.7 MB), discarding the rest of the hair. No quality loss.
It’s intuition on optimization. The most basic answers on social media you would find is to reduce texture resolution of Manuka_hair texture to 2K, which would also reduce the texture quality on the tail.
Once again, it’s two skills to learn for a texture memory optimization: UV packing, and texture baking.
Those six materials were too much for your Rusk avatar?
Atlas the materials and textures.
This is several different articles/videos worth of skills to learn:
- Creating your own materials with lilToon or Poiyomi Toon, including understanding main color textures (albedo), masks, possibly normal maps, emissions, etc.
- How to use global masks in Poiyomi Toon, if you want it to be more optimized on texture memory.
- Baking some masks into vertex color data onto the avatar FBX in Blender, to reduce texture memory utilization without needing a mask texture with Poiyomi Toon.
- Stitching textures together with a Unity tool or in an image editor.
- Laying out the mesh UVs differently in Blender to support your stitched atlas texture and utilizing several UVs in the materials.
There, see how easy it is to “draw an owl” (optimize an avatar)?
“Just figure it out. There’s no playbook. You’re making the playbook. Draw the f**king owl.”
You set a goal for yourself, and find a way to achieve that.
You get better by practicing, doing more things.
It’s a lot of skills to learn.
But I’d take the animation grade, Very Poor rated RURU anytime over the Medium version for photography.