Post

Hi #VRChat ! Just recently had people that were curious about my workflow for avatar optimization and figured it was the best time to share it. Keep in mind, this is *my* workflow and that doesn't mean it's the best, but this really works for me! Here's a thread! 🧵

So my typical workflow starts off with Modular Avatar. In my case, I use MA to put on outfits and accessories onto my avatar. Drag the prefab you want to wear and place it on the root of your avatar. Right-click on the outfit > click MA > and press setup "Outfit". This should bind the outfit.

As a quick check, ensure that when you click on the outfit that the MA Mesh Settings drop-downs are set to inherit, and the MA Merge Armature is set to Unidirectional meaning both sets of bones will be merged together! Repeat this for all the items you want bound to your avatar.

Now that your avatar is merged, let's check your VRAM Usage! We will use Thry's Avatar VRAM Calculator. In your top bar go to: Thry > Avatar > VRAM and open up the tree for textures. There will show you where your most expensive textures are.

When an issue is identified, you can click the button to the right to fix it. That's it. Your texture VRAM is going to drop significantly with every one of those adjustments. No, you do not need a 16k texture.

Next we are going to go to start discarding poly's on our avatar. For this example, I want to start deleting areas I'd normally be hiding with a shrink blendshape. In the hierarchy menu, click your body mesh and add the "AAO Remove Mesh by Blendshapes". You should see a few familiar blendshapes.

Click the checkboxes for blendshapes you would normally not see on your avatar if it was normally covered up with clothing. For instance, I'll be hiding my leg. You should see it update within the scene. When uploaded, these specific areas will be deleted from the mesh on upload. Repeat as needed.

At this point, you're probably looking at the SDK Builder and wondering why none of the optimizations we just worked hard on didn't actually do anything. You're right! Remember, this is a non-distructive workflow, so everything is done on upload. Take note of this page.

Go back to your hierarchy and right click your avatar and go to "Modular Avatar > Manual Bake Avatar" This will generate a pre-uploaded model for preview.

Go back to the sdk builder and change to the clone, look at the b-e-a-utiful optimizations that we've done. However, there is one more thing we need to optimize! Why do we have so many skinned meshes? We will merge that with D4rkplayer's avatar tool!

The great part about that, is there is not another step. D4rk's tool merges the meshes and removes unused shapekeys at the last step of upload. So delete the clone, and upload the non-clone avatar when you are ready, and then profit!

If you attach Trace and Optimize, AAO will do a bunch of automatic optimizations (including skinned mesh merging and blend shape baking/deletion) automatically as well (there’s a fair bit of overlap with D4rk, but AAO has a mission of never breaking your avatar with T&O so I tend to prefer that one)

1 repost4 likes

I try not to break anything or have performance tradeoffs with my "Basic" preset either. But I can't fix what I don't know about. There is ofc the constant issue of merging meshes breaking vertex id & tri id and that will always break systems that rely on them being a specific value :(

I did try that but it threw warnings with vixen. I'm sure I just need to tell it to ignore the error. I think it doesn't know what to do with empty game objects. I've never had issues with d4rks tool and it's something that is done without having to need a component.