#avatar-optimization

1 messages · Page 12 of 1

buoyant holly
#

if you have a root bone for like all of your hair you could control all of your hair with one physics bone component

drowsy fjord
#

how would I work around that?

somber raven
#

(oh, you deleted your message)

supple latch
#

I have a question about the best way to optimize without having to destroy my mesh.
Currently my Avatar weight in at around 41mb of DL. Recently i added a new armor to it that comes in 4 different meshes. There's a few extra bones (27 i think) and 3 materials. I made a few new animations to toggle them off or on and that's it. The materials are using .dds files and are very low resolutions but the model literally doubled in weight. It's up to 80+ now and considering all that was already on this model (weapons, sounds, VFX, etc ) it makes no sense to me that it doubled. Any ideas?

zealous wigeon
supple latch
#

the new mesh was included in blender on the model itself so it's already Autofixed from the first time i imported the model

zealous wigeon
#

Just in the file explorer

supple latch
#

well it's part of the whole model . it isn't seperate.

snow knot
#

It's not 100% accurate since it's just vram which won't include audio. But it'll help highlight any erroneously large textures or meshes

supple latch
#

i think it bugged out saying i have over 11 million blendshapes....

zealous wigeon
supple latch
#

yeah i definitly sure i don't have 11 MILLION blend shapes ...

zealous wigeon
#

Sorry, yes that seems really unlikely, so unlikely that I read polygons.

supple latch
#

normally i can change the quality of images i imported in unity but these new one don't let me do that

zealous wigeon
#

Might be worth trying to convert them to png then.

drowsy fjord
#

I dunno why but all of my PhysBones quite literally don't move no Quest desite fully being within limits of the "Medium" of 6 base components and 32 transforms.

drowsy fjord
#

nope.

#

nvm...

#

I had disabled the entire component

#

and everything inside it

#

I'd kinda want to do that

#

but not too sure how i'd pull it off

#

but as you can see it doesn't work as i'd expect...

#

i'd rather just have 1 root component while emitting the first 2 or 1 transforms from every child transform

#

but it does not seem to be possible

supple latch
#

is Png lighter than Jpg ?

drowsy fjord
#

PNG is uncompressed image

#

jpg is compressed image

#

so jpg is less heavier.

#

though... you probably should store it as .png

#

since you will compress it in unity to some other format anyways.

supple latch
#

thanks for the help. ill finish it up and see how bad it is now.

drowsy fjord
#

despite having Medium rating which is within official specs, half of my physbone components are completely disabled.

#

I find this quite strange.

#
  • they do not move even for myself.
#

solved it... I had some weird animation logic going on.

heady smelt
#

👍

tough panther
#

can someone help by telling me how to remove the number of bones

stuck saffron
#

how can I lose 2.6 mb quickly 😢 Ive already compressed and lowered quality of textures

#

and put high on mesh compression

buoyant holly
#

Potentially useful tip for quest models

ivory sluice
#

i confirm, it's bonkers

buoyant holly
#

Like nobody in VR chat is using a subdivide workflow for the final mesh so the occasional triangle is not the end of the world

ivory sluice
#

i do that on clothes and cylindrical objects, and tris like these are not a big deal on final topology, so overall it's a good practice

heady smelt
#

homestarrunner reference?

worn vault
#

whats the best way to lower the size of music files as much as possible so the avatar wont have an extremely large file, if i were to add music to each dance

snow knot
low mural
#

What are the best steps I can follow to optimize my avatar into Unity? I'm just editing an already existing model and have no knowledge of Blender, so only doing what I can do here. Already compressed the textures to limit VRAM usage and download size

nimble ingot
#

Also, got a question of my own. I know blendshapes tend to be worse for optimization the more there are, but does that apply to blendshapes that don't get used? I ask because I have some blendshapes that aren't used in any animations, but I've kept around for easy editing, and I'm wondering how much of a big deal it is that I get rid of them or not. For reference, here's what Thry's avatar evaluator has to say. Keep in mind I have the face as its own Skinned Mesh for polycount reasons.

#

I have around 110ish blendshapes, and I could probably delete maybe 25-30 of them without issue, but I get anxious removing things from avatars on the off chance I may need it later, so I'm wondering how much of a big deal it really is.

heavy knot
pulsar valve
#

d4rk's avatar optimizer can also remove unused blendshapes on build, so that you can leave them on the avatar without any drawbacks in Vrchat.

nimble ingot
#

Aah, didn't know such tools existed. Great, thanks, I'll look into that then.

low mural
nimble ingot
#

Based on some of these numbers, I'm assuming the avatar has a good deal of outfit toggles and animations on it, yeah? Well, the answer gets a bit complicated if so, and will just depend on a case-by-case basis for however such toggles work.

In short, assuming that I'm right about it having animation toggles for things like outfits or particle systems, the best first step would be to make a backup of your avatar, then go in deleting outfits that you'd never want to use. This can reduce vram usage and download size on it's own and would probably be a good first step.

pulsar valve
low mural
low mural
#

Well, it made a whole mess, I guess the only correct way to do this is go through Blender

pulsar valve
#

Ultimately, yes. I assume that d4rk just ended up breaking your toggles, since they probably weren't set up to account for the meshes being merged.

low mural
#

Honestly it might be fixable though if I spend the time to do it, buuuuuuuuuuuut

#

If I'm gonna spend the effort, it would probably be better spent with Blender

ivory sluice
#

that is the very poor ever

tame summit
#

660,000 polygons

#

thats crazy

quasi crane
#

do i need to worry about reducing polygon count or is this already simple enough?

tawdry drift
#

looks fine but you can turn on the stats here

#

your triangle # is what to look at

quasi crane
#

what is the best way to retopologise for a particular intended deformation?
i have this mesh

#

which deforms into

#

i could just subdivide everything but that's way too many tris
so what's the best way to retopologise it into something with lower polygon count but that still looks good when i extend the arm tentacle thing

calm spade
#

QuadRemesher is a great addon, you could otherwise shrinkwrap a different mesh onto that surface

#

Gonna be hard to do lower poly than this and have good deformation though

quasi crane
#

this was after a degenerated it

#

before it was like 6000 polys

quasi crane
#

oh nevermind there's a trial

autumn mirage
heady smelt
#

hey, how can i bring my avatar down 0.20 mb?

calm spade
#

No mesh, no texture catthumbsup

heady smelt
# heady smelt hey, how can i bring my avatar down 0.20 mb?

Crunch compression. Find all the textures, select the biggest ones. You can see the size on the right side bottom, when selecting one. Then enable crunch compression, click apply. You can also do this for all, by selecting the first, holding shift, selecting the last. If that's not enough, you can use VRCFury to optimize the blendshapes. You can also delete unecessary animations, like dances. But don't delete the proxy ones, they don't actually exist and are added in-game.

#

(I believe they were asking how to lower it by, not to).

calm spade
#

Oh Lmao

#

Crunch compression would do it

heady smelt
#

I always feel remorseful when lowering the quality or decimating, so I like to recommend alternatives *shrug

pulsar valve
#

Crunch Compression lowers download size, but not VRAM usage, so if that's something you want to consider, too, than you might be better off just actually lowering the resolution.

#

If you know how to, I believe deleting the Alpha layer of any textures that don't use it would help save space, too. Quest can't even use transparency anyway, so that would be all textures when optimizing for Quest.

heady smelt
#

Or hot. Big booba. You must choose. Combine cool and hot and you are unstoppable

misty shell
#

Trying to upload a quest version of an avatar but I'm at 22mb/10mb, and it's looking like the only way to get it any lower is to lower the poly count on the model.

I know that I could put the model in blender and use decimate to lower the poly count, but is there a faster way to just do it in Unity that I might have missed?

#

Also is there a good guide for how to properly decimate and export a model in blender? because I always screw something up in the export step and it ends up being very broken when I put it back in Unity

heady smelt
grizzled shard
# misty shell Trying to upload a quest version of an avatar but I'm at 22mb/10mb, and it's loo...

Can check what's contributing to filesize using the VRWorld Toolkit - it works on avatars too. Available as a curated package, docs here: https://github.com/oneVR/VRWorldToolkit

Textures are almost certainly the majority of that filesize. Use fewer textures, downscale textures, compress textures. Then audio sources. Mesh filesize might be bloated from unused blendshapes. Removing geometry should be your last resort.

heavy knot
#

what happens to avatar fallbacks if the PC build is Poor performance but the Quest build is good performance? I'm still able to select it, just wondering why this is the case

grizzled shard
#

Both platforms work independently of one another. A poor PC avatar is handled as "Poor" on the PC, and the good Quest avatar is handled as "Good" on the Quest. The PC only sees the PC version, the Quest only sees the Quest version.

heavy knot
#

the thing is, fallbacks are supposed to be "good" rated

#

Do people on PC just still see the fallback even though its deemed poor in it's performance rank

keen delta
#

My avatar was at 72 mb
I got it down to 62 mb
I need it at 10 mb. Is that even possible

ivory sluice
#

Reducing texture resolution and compressing them, or just removing the textures that are barely noticeable

And removing big animations too

calm spade
#

It's possible, but it depends what was on it to begin with

keen delta
#

I removed almost all emotes and every texture is low detail

calm spade
#

You should try user 1's world toolkit addon to get a breakdown of all the pieces of your avatar

keen delta
#

Is that like a download or something? I’m new to this so i don’t know all the stuff

calm spade
keen delta
#

Thank you so much

calm spade
keen delta
#

is that for worlds or will it work on avatars?

keen delta
calm spade
marsh bison
#

Do I need to manually sync VRCEmote, VRCFaceBlendH and VRCFaceBlendV or are they synced by VRC?

#

Also if ScaleFactor/ScaleFactorInverse is ro, how are we supposed to switch to the new scaling system, before GoGoLoco Scaling and similar break?

nimble ingot
marsh bison
#

So If I don't modify those, I can unsync them?

nimble ingot
#

Yeah, as long as you're not using the default Action layer. If I remember right, VRCFaceBlend(X) doesn't do anything by default, and VRCEmote is just used for legacy SDK 2 emotes. If you don't want those legacy emotes, you can just flat out delete all 3.

nimble ingot
marsh bison
#

So a while back VRC announced that they have a new scaling system in the works, that will allow more control per world and allow scaling limits per world.
And now I saw this in the documentation: https://creators.vrchat.com/avatars/animator-parameters/#avatar-scaling-parameters
And thought: excellent. I can just switch to those parameters instead.
But: Those parameters are read only.

This document is written with the assumption that you know a bit about Unity Animators.

nimble ingot
#

Oh, I see what you're asking now. Yeah, so, GoGo Loco and similar expression menu controlled systems just don't work, and there's no way to use an animation to drive those parameters. But, in the Quick Actions menu, the same menu as the Reset Avatar button, there's a dedicated universal height scaling option that goes up to 5.0m and down to 0.2m for all avatars.

#

It's read only for a similar reason that MuteSelf is read only. VRchat is handling the condition for the parameter already automatically, so you shouldn't be setting it yourself. Actually, the scaling system is already implemented.

marsh bison
#

Ah, so either gogoloco works , or it is in VRC by default. Then it makes sense. Didn't know that the scaling was already in that subsection, because gogoloco still worked fine for me last week

zealous wigeon
#

They added scaling at the start of this week.

nimble ingot
#

Yeah, it got updated, I think 2 days ago? Maybe 3? Very recently. Give it a try next time you're in game.

The parameters simply let you read your modified scale and trigger animations on it.

marsh bison
#

Okay, then I'm on outdated information. Thank you then.

nimble ingot
#

That link you posted should still be up to date, it's just that there aren't external scaling systems now because VRChat intentionally changed how scaling worked for their update.

snow knot
frosty crag
#

does anyone have any actual data comparing different methods of optimizations for which methods are the best. Seems like depending on the circumstance for the model, i can optimize it in one way but then take away from other options. I am asking because it seems like multiple people have different debates on different methods and I actually have yet to see anyone post the information about it to back up different claims. I am asking to decide on what way I want to go about working on this model.

#

The things I am referring to are things like how some people say its ok to use a toggle on a blendshape, while others will then say NOOO ITS BAD, then others say "just use separate avatars", etc. Not necessarily talking about textures right now but some stuff is gonna be within that vain I guess

snow knot
#

Like blendshapes for example will always increase your filesize. iirc fbxs can store blendshapes/shapekeys sparsely, aka they don't need to store a copy of the entire mesh for each shapekey, just the vertices that change with the shapekey. So it's not as bad as it could be, but too many can def balloon filesize.

Edit: didn't even mention the skinning cost for the meshes. Don't have the data for it but it does matter, though will matter less once we upgrade unity versions.

#

The "just use seperate avatars" crowd is saying that because all the resources for the alternate outfits/whatever you're adding to the avatar still need to be loaded into memory even if they're disabled on the avatar at the moment, cause the game needs to react instantly if you decide to toggle those on. Having that stuff on different avis means you're exerting less constant memory pressure on yourself and others even if they have to effectively download the same avatar just with a different outfit.

heady smelt
#

Also about blendshapes, the argument comes from here. https://creators.vrchat.com/avatars/avatar-optimizing-tips/#-except-when-youre-using-shapekeys
Using blendshapes to hide/show toggles, allows you to merge the mesh to another mesh. Gun can be merged with body.
Simple, fast, way to optimize low-poly stuff without exceeding the excellent/good bone limit. But when polygons go above 32k, blendshapes begin to become expensive. In rendering and file size, like Rune said. Solution then is often bones, as the alternatives for Quest are low.
(Weight the gun to a bone, merge the meshes, then use the bone to scale the size). Then, the armature that already calculates the mesh, doesn't calculate mesh+blendshape but just one extra bone. Exceptions exist, a 100k poly gun that's only be used 10% of the time, is better as a mesh toggle. Because the other 90% of the time, it won't be rendered as the mesh is off.

frosty crag
#

how ineffecient would it be if you had it where you used a system of alpha channels on to hide parts of a mesh. Is it that much worse on vram usage texture wise. Not sure if I am explaining this right but you just add the alpha channels together and toggle the visibility within a shader so the final alpha channel that gets applied to a atlas texture. Is this something that people have done before or is it one of those scenarios where it has weird lighting issues or just no performance gains vs other methods.

frosty crag
#

something like this: (just example)

heady smelt
#

There was a shader that pushed out the render zone of a mesh, so it became invisible as a toggle. But it was the SDK2 era, and it's not used anymore due to Quest incompatability. Tried to find it, couldn't.

frosty crag
#

I know most people that play this game don't care about performance and just throw anything and everything at the wall, but I have a pet peeve with doing stuff the inefficient way only to have to go back and correct it later. Its one of the reasons I was asking for visual data etc. To me I feel like I am calling a function and not able to tell/know if the function I'm running is in like O(n!). Probably bad example so my bad. But do you have visual representation of the info other than a wiki link thats simply text? Like test info that has been done etc? charts and stuff

bold wharf
bold wharf
#

The current "best" method of toggling stuff is shader based via UV tile discard. Poiyomi has an option for it, dunno about other shaders.
This is a good method because it:
A. Is one mesh one material reducing draw call count
B. Completely hides the affected area instead of simply scaling it down by simply not rendering it, saving performance.
It is not a perfect solution, for example a mesh toggle is still better for a prop you have disabled for like 90% of the time but for small accessories you might have or clothing options I'd say its pretty good.
Unfortunately its not all peachy and does have some drawbacks. Ofc not quest compatible due to custom shader, and in certain rare circumstances you might be able to see the outline of the hidden areas overtop specific materials.

zealous wigeon
#

But still, when it comes to its visual drawbacks, using alpha has far more issues since you need the shader to be transparent, instead of opaque which UV Discard can use, makes it so your avatar's stuff won't disappear behind other transparent objects.

quasi crane
#

how unoptimised would it be if i had 3 different materials rendering the same model with different shaders to get the effect i want

#

i cannot be bothered to learn how to add passes properly but i learned that if you increase the material count on a model in unity it rerenders the model for each material you add

quasi crane
#

nevermind i pulled it off with 2 lol

amber pike
#

i think its what... 8? before it drops to "good"? or "medium"

faint temple
#

I am trying to optimize an avatar that has a lot of particle system and accessories meshes that are hidden most of the time. I did an atlas texture for performance but I don't know the optimal way to make materials so I don't have tons of different materials. Is there a way to combine them ?

faint temple
#

Ok so for those that are interested, you do one texture and select Sprite 2D then use the editor and make one material with the texture then in the particle system you use that material and in texture sheet animation put the sprite mode and select your sprites.

marsh bison
#

This is just a part of my unity animators present in my controller. Is there some way I can put animators in subfolders, when selecting them in the Animation tab?

#

My list of animations is getting too long ( at least >64, probably closing in on 100 or more. really unsure), where it is taking too long to scroll all the way all the time.

snow knot
#

If they were more varied in name I'd've recommend pressing letter keys on your keyboard when the menu is up to jump to that point on the list. But those all start with the same name.

#

You could maybe make a second animaton controller that's just dedicated to making animations and deleting the states that are generated in that animator after you don't need them anymore as that clears them from the list.

nimble ingot
#

How does the VRC SDK determine Texture Memory Usage size? I'm getting conflicting info from it and external file size indicators. According to it, my texture is 22MB, but both the file size in Unity, as well as with Thry's Evaluator say it's more like 600KB instead. There's only 1 texture/material on this model because I'm building for quest, so I don't know where that 20MB+ is coming from.

proven dock
#

though I don't think that would affect Thry

nimble ingot
#

Tried it with and without, no real change in file size according to the SDK

keen delta
#

So I’ve put my textures to low detail and all the way down on crunch compress and I’ve deleted so many files and stuff on the avatar and it’s still 62 mb. I need it at 10 or less. What else can I do 😭

nimble ingot
#

How many textures do you have? If you're still running into issues after setting everything to really low detail it should work if it's a reasonable amount of textures. It's also possible meshes are contributing to file size, but normally not as much as textures do.

grizzled shard
# keen delta So I’ve put my textures to low detail and all the way down on crunch compress an...

VRWorld Toolkit world debugger works on avatars as well, and shows you what is contributing to the filesize. Lets you know what the actual culprits are: https://github.com/oneVR/VRWorldToolkit#world-debugger

GitHub

Unity Editor extension for making VRChat worlds. Contribute to oneVR/VRWorldToolkit development by creating an account on GitHub.

keen delta
#

Oh yeahhh I forgot i download that. So sorry. My goldfish brain isn’t working today

#

Thank you

quasi crane
#

how much worse is using 2 materials with different shaders for one submesh

#

compared to if i went to the effort of adding the second shader as an extra pass to the first one

rain vine
#

Hi, I'm brand new to doing anything avi related really and I am trying to make this one avi quest compatible. I've already managed to fix a bunch of stuff but I'm stuck on this one Phys Bone Transform Count value. What exactly does it mean, how can I have 184 of them when I only have 8 phys bone components, and how and / or what can I do about it? Thx!

novel snow
#

That’s how many bones are affected by those 8 components

#

You can only have a max of 64 on quest and you are almost over triple that limit

#

Also for the love of GOD don’t upload that avatar in that state

#

You should have at max poor ranking if you don’t want to cause ram issues or crashing for people

zealous wigeon
#

Yeah, that avatar is bad even on PC.

novel snow
#

Excessively so

rain vine
#

Any tips on how I could make it better?

novel snow
#

Merge all your meshes, decimate geometry, atlas UV maps and textures

#

Aim for having everything in Poor or better territory, and if that’s not possible, at max one or two very poor stats, but avoid using it in crowded instances if it ends up being very poor

#

I have a total of one very poor avatar on my entire account and it’s solely because it has 63k tris on Quest

grizzled shard
# quasi crane compared to if i went to the effort of adding the second shader as an extra pass...

From an actual performance standpoint, not much difference. The extra pass might be slightly more performant than the extra material but it would be so small a difference as to be hard to measure. Do whichever is more convenient.

From a VRChat standpoint, its performance ranking doesn't measure shader passes but it does measure material slots, so more materials might bump you into a worse performance rank.

tulip rose
rain vine
#

Thank you all, I got it down by removing the physbone script on the hairroot and instead using one parentobject with the scipt to control ~16 transforms for the two long strands of hair hanging down infront of the avi as I felt those were the most important.

steel sphinx
#

Anyone know how to work with NardoDragon? I'm trying to use the quest version of the avatar, but I don't know how to translate my PC textures and materials into a single material the quest version uses. The unity package didn't have materials to reference or modify, and there doesn't seem to be a blend file for the quest version.

tawdry drift
fathom timber
#

does anyone here want a tutorial on how to make clothes into shape keys in blender to make stuff quest comp? I'm bored af and got nothing to do when I get home

stray tangle
somber raven
#

It’s already hard enough to make Shape Keys to shrink clothing into the Body. It ain’t that simple.

#

So use UV Tile Discard in supported shaders provided you have a UV1 configured, or go the lazy method and have separated Skinned Meshes.

marble rain
# fathom timber does anyone here want a tutorial on how to make clothes into shape keys in blend...

before anything create a bone for each cloth piece. and make sure it's weight painted.
second make sure the bone for each cloth piece has no parent or child.
third make sure that the bone name and the vertex group name is the exact same, otherwise it wont work.
fourth when everthing is confirmed to be working in blender then merge everything.
five ensure everything is merged correctly and that each bone for the clothes still exist.
sixth. if everything is in order. Export the FBX and uncheck leaf bones. and import into unity.
seven in unity check that everything is as it should be.
eight unity should recognize each bone for each of the cloth as it's own object.
nine. you can create a animation for each that simply shrinks the bone to something like 0.00001 on each axis.

or you can use UV discard however i am unsure if this works for Quest. you can use Blend shapes but i wouldn't atleast not before the next unity upgrade

static hatch
#

Which Format should I be using for normal maps?

heady smelt
static hatch
#

I noticed in some cases it reduces avatar download size like when I switch from DXT5 -> DXT1

tame summit
#

compared to textures or blendshapes, how detrimental is polygon count to VRAM usage?

#

70,000 polygons is the cap that declares the avatar as very poor, but i wonder if it’s really bad to be just over that? 80k? 100k? 150k?

#

i’ve seen avatars in public lobbies that have like, 800k. which doesnt seem to be killing everyone around them somehow

#

but is still painful to read in an avatar detail description X_X how do you even manage to get that high???

calm spade
#

There's also a distinction to be made between people who are always displaying very high polygon models, vs others who have a lot of outfits and props disabled, which aren't always actively rendered

#

Very high polycount is very detrimental for the Quest however, because Oculus suggested a maximum of 1M polygons in view as the performance threshold. And given how many users are running around with 100-200k poly avatars, it's unfortunately affecting Quest users greatly, and they might not be aware of it

snow knot
#

Oof, even at 20k polys per avi on quest (the max for a non-very poor). An instance w/ the max # of people (80) is 1.6 million polys. Ofc that's assuming they aren't running into other issues at that player count. I know my fps is limited by my cpu at those player counts even on pc

stray tangle
#

the 1% is when you can crunch the texture super hard (lower quality) while still looking fine, in which case DXT5nm crunched will save a little bit of download size

#

BC5 takes up the same amount of vram as BC7 or DXT5nm, but uses the available bits most efficiently, resulting in the best visual quality. with that extra quality, you might be able to lower the resolution as well.

hardy dagger
#

Would someone mind posting an example of optimized physbones?

grizzled shard
# hardy dagger Would someone mind posting an example of optimized physbones?

Optimizing is generally "to-taste", of using only the amount of bones/components needed to get the effect you want.

A common technique is to have several similar bone chains converge on a root bone that holds the PhysBone component, allowing one component to service multiple chains at the same time. Example: hair

Another is to merge adjacent bone chains that move similarly into one, since they move similarly merging them into one chain reduced the number of bones but allows similar movement.

Or just reducing the number of bones in a chain. A few bones weightpainted well can achieve good effects.

hardy dagger
#

Got any visual aid for that?

grizzled shard
#

what, like this?
example of two bone chains converging on a root bone, can have single PhysBone component drive multiple chains

hardy dagger
#

Like over here

#

If you haven't realized it yet, I am a complete new at unity

grizzled shard
# hardy dagger Like over here

The HairRoot is a bone, and it has many children bone chains like Hair1_L, Hair2_L, etc. A PhysBone component in HairRoot would be able to effect all the hair bones with at once. This is good because fewer PhysBone components is better.

In what context are you trying to optimize? What is your current number of PhysBone components & affected transforms? Consider which performance rank you want to achieve: https://creators.vrchat.com/avatars/avatar-performance-ranking-system/#pc-limits

The Avatar Performance Ranking System allows you to see how much a user's avatar is affecting performance via analysis of the components on that user's avatar. You can also use it on yourself to see how performant your avatar is.

hardy dagger
#

When I got the avatar, its 25 for components and... 113 for transform

#

If you're wondering, yes people have managed to get it quest compatible

grizzled shard
# hardy dagger When I got the avatar, its 25 for components and... 113 for transform

Those are higher than the cap for Medium rank, but fit within the Poor rank, so your avatar would be rated Poor if we just take the PhysBones into account. That's a perfectly acceptable ranking, but I applaud you for trying to optimize.

The tips I suggested previously would need to be done in 3d modeling software, like Blender, which is a whole other can of worms. Let's stick to what can be done in Unity.

You'll want to check all the PhysBones and see if you want to keep or remove it. The left-hand panel you screenshotted earlier is the Hierarchy. Near the top there is a search bar. Type in t:script and it will filter to all objects that have a script, like the PhysBone script.

grizzled shard
hardy dagger
#

Seemed fine when I last saw it but anyway, got the objects with scripts showing

grizzled shard
# hardy dagger Seemed fine when I last saw it but anyway, got the objects with scripts showing

If your goal is to qualify for PC Medium performance rank, you'd need to remove 9 PhysBone components to reach 16 max. There's also limits on the effected bones but removing components will hopefully fulfill that.

To reach Medium you'd have to qualify for Medium in every category. Before embarking on this check that there aren't any other categories that would keep you out of Medium.

hardy dagger
#

Well poop. Only really 1 thing I can reasonably remove with Unity

grizzled shard
#

To be clear you'd be only be removing the component, not the whole object. With an object selected the right hand panel "Inspector" shows all the components that make up the object (transform plus anything else). You can leave the object (and transform) alone and remove the other components individually.

hardy dagger
#

Hmm

grizzled shard
#

If you still want to reach performance rank Medium but can't remove enough in Unity, you'd need to do it in 3d modeling software like Blender.

Before diving that deep I'd suggest uploading and testing your avatar in VRChat, making sure everything works as expected on your avatar.

Blender is free, and is available on Steam or standalone. Your avatar may have come with a .blend file, which plugs into Blender directly, or failing that the .fbx model file can be imported back into Blender.

Actually modifying the bones is a bit out of scope for me, though.

hardy dagger
#

WHELP! Time to learn Blender then 🥲

grizzled shard
#

Good luck! Keep backups!

hardy dagger
#

Good thing the avatar is from a package so if things go south, I can always re-open that

latent zodiac
#

How do you reduce Physbone Transform count?

modest oyster
grizzled shard
# latent zodiac How do you reduce Physbone Transform count?

PhysBone transforms are bones that are being driven by a PhysBone component. To reduce the transforms being driven, you can set exclusions on a PhysBone component for bones you no longer want affected, or remove PhysBone components entirely.

grizzled shard
latent zodiac
#

oh thanks, i'll take a look

white dawn
#

10mb max hits diffrent 😢

snow knot
#

Honestly, any reasonably optimized avatar for quest should fit in those 10mb. Like you really shouldn't be sticking every clothing toggle and multiple 2k textures on a quest avi. That's not quest optimized. That's quest compatible at best, quest hostile at worst.

calm spade
#

lmao

#

I like Quest hostile

#

I'll use that

marble rain
velvet crow
heavy knot
#

is there even a reason for them to require Read/Write mesh anymore due to the Server now generating performance ranking data

#

basically gets rid of it having to go to CPU memory with it off

calm spade
#

The SDK still needs to know catthumbsup

heavy knot
#

the editor could easily grab that data elsewhere without needing Read/Write on

#

a good example being QHierarchy

visual tinsel
calm spade
#

I'm not saying it can't be improved, just that it currently needs it KEK

visual tinsel
#

😢

heavy knot
#

I mean the builder tab is already getting an update

#

wouldn't hurt to add it to that

red tendon
#

How I get past this part?

heavy knot
#

get past?

#

just click open project on the top right and it'll open the project

#

it seems you already did that though

visual tinsel
#

Might be lacking a Unity Install

heavy knot
#

thought VCC basically forces you to install unity before you get to the general main screen if you don't have it installed

sudden jewel
ivory sluice
#

thank you tup
very cool

heady smelt
#

Does using multiple different shaders (3 to be precise) affect the performance on an avatar? I know more mat slots have an affect, but I'm not sure about shaders

grizzled shard
heady smelt
#

Okay good to know

marble rain
marble rain
grizzled shard
marble rain
#

huh. he said 3 different shaders. and even then you can only use one shader per material. so it does not really matter if you use 3 of the same one or 3 different. well its all up to what the shader does. but regardless of it. a Shader requires a Material.

sudden jewel
#

also in VR thanks to Single pass stereo, you only incur one draw call per pass

marble rain
ivory sluice
#

vrc always used single pass, they will update it to single pass instanced on the future from what i know

marble rain
#

Right. That's what I thought. Since single pass instanced cant be used with. Legacy render pipeline

balmy escarp
#

is it more computationally expensive to have more meshes than one? Trying to do some optimization, but still want to be able to do glittery hair n shit, which I know is hard to set up if you don't have a separate mesh

#

Like to be able to have a toggle to turn the glitter on and off, I need a separate mesh to do that easily. Not sure if it's possible to toggle a mask on and off concurrently while toggling the glitter or not

#

secondly, if the first question is yes, do you think it'd be more computationally expensive to separate the eyes and animate them via sprite sheet or to have 5 materials (one for each texture swap)?

marble rain
final osprey
#

do you not like people who make heavy unoptimized avatars to kill your performance? go upvote my post in #feature-requests

stray tangle
#

there's a skinning cost to have vertices in a mesh even if those areas are invisible due to shader tricks used to hide it

#

if all of it will always be enabled, yes having it as one mesh will be slightly better. it would likely be even better if it was only one material, but that also depends if you have any computationally expensive effects on any of the materials

#

sometimes having a heavy effect on a separate material is better than having it on the same material as the rest with a mask

golden hollow
#

someone knows why the autofix option does not appear?

novel snow
#

It depends on the error

#

Not all errors have automatic fixes and require the user to actually you know

#

Fix it themselves?

balmy escarp
#

got it

pale meteor
#

i'm thinking of adding alot of toggles to my avatar, but i'm nto sure how low quality i should make them, i have one here that i decimated from 50000 to 5000, is that good? or should i aim for lower

sharp galleon
#

I mean, the fact you are even trying to decimate and such means you already are trying and doing better then unfortunately a large amount of people

pale meteor
#

i'm pretty sure i have an idea for that

sharp galleon
#

If you are able do to that then you really improved the performance

#

10 materials is a lot for a single asset in a game engine

pale meteor
#

i know right, but i was too lazy to try to fix it, but i'll give it a shot because i have an idea for that

sharp galleon
#

If you fail, but at least tried, then you did your best

#

If they are solid colors or simple textures, you could fairly easily make a texture atlas

marble rain
trail berry
#

Does anybody have a video that teaches someone to combine the eye and face material? Just want one for both and i see female avis do it all the time-

#

Atlas wasn't the way i wanted to do it- but i feel like there is a different way?

pale meteor
cold yarrow
trail berry
#

ooooh alright 0-0 thanks kazin

buoyant holly
# trail berry ooooh alright 0-0 thanks kazin

A simple tutorial on Texture Atlasing/Texture Baking using Blender 2.8+.

Links in Video:
Pumkins Tools: https://github.com/rurre/PumkinsAvatarTools/releases/tag/0.9.5b

=TIME STAMPS=
0:00 - Intro
0:08 - Disclaimer
0:30 - Combine Your Meshes
0:42 - Removing Leftover UVMaps
1:04 - Removing Unused Materials
1:17 - Creating Baking UVMap
1:40 - ...

▶ Play video
cold yarrow
#

oh nice

buoyant holly
#

and arranging the UV'S yourself you could do stuff like scale down objects that don't require much detail like if you have any props that are practically solid colors

#

or like the Interiors of shoes

echo trout
#

hard part is getting this to be my fallback avatar

#

for quest users

sharp galleon
# echo trout for quest users

thats why I made my fall back literally a 2D rendered image of my avatar, with a front and back, that moves its mouth like South Park for lip sync

echo trout
#

he calls it the dorito

sharp galleon
#

aw yes, someone of culture

pale meteor
hybrid orchid
#

i cant export my avatar!

#

what should i do?

ivory sluice
#

file>export>fbx should work

white dawn
#

this is on pc, i hope its a bug 💀

marble rain
#

yeea. it is lol

#

Poor is 32 components.

#

medium 16

#

you should report that to them

white dawn
#

i was getting scared for a second

modest oyster
#

Try restarting the project. the sdk panel is buggy sometimes and doesn't update properly, especially when switching between android/pc platforms

granite crystal
#

More materials used on avatar makes more CPU load, or they processing only on GPU side?

lone tiger
#

Both CPU and GPU.

granite crystal
#

And "skinned mech renderer" component turned off by animation means no CPU GPU load for its materials processing?

tulip rose
#

Effectively 0, yes. As the enabled flag is the first check of optimization.

lone tiger
sick relic
marble rain
#

just dont add more materials then necessory. and disabling the entier object is better

serene spade
#

Is there a way I can optimize an avatar that's already been created?

#

Like if I buy the files from the creator.

stray tangle
serene spade
#

I always make sure to find the creator on a site like booth or gumroad. If I can't then I assume the files are unobtainable.

zealous wigeon
# serene spade Is there a way I can optimize an avatar that's already been created?

Well yeah, a competent creator (don't trust creators that upload for you) will give you the files to the avatar.
With those files you can do whatever really, but you'll have to know how to set an avatar up and deal with the changes you've made to it, at least if you optimize it in Blender.

While you have barely any options for optimizing in Unity, Polytool (paid, gumroad ||https://markcreator.gumroad.com/l/Polytool||) is an option for making quick and rough optimizations automatically.
D4rk's avatar optimizer (||https://github.com/d4rkc0d3r/d4rkAvatarOptimizer||) can't do near as much, but it can help with some things.

serene spade
#

Thanks for the answer btw.

floral burrow
balmy escarp
#

how resource intensive are non-primitive colliders for vrchat?

#

I'm thinking of just setting my body as a mesh collider so I can achieve much less clipping, as the clothes on the model are skintight. Weight painting and bringing the mesh into the body simply aren't doing enough to fix this

#

I don't want to shrink the body mesh to the point where it's incredibly noticable

#

point and case

#

it also clips at the crotch

#

but I can't fix the crotch unless I loosen the suit or bring the body inwards, which is noticable due to the shape of the suit

#

secondly, are these bones necessary if that mesh is combined with the body mesh and the bone has no weight painting attached to it?

floral burrow
stray tangle
#

also, mesh colliders are not allowed on avatars. you really shouldn't try to do a cloth simulation for the whole outfit

balmy escarp
#

Unfortunate lol

stray tangle
#

if you use the Data transfer modifier to do it, you can also specify a vertex group as a mask to specify where to do the transfer

balmy escarp
#

Multiple times

stray tangle
#

how close is the topology of the suit compared to the topology of the body?

#

the closer the topology, the better they will deform together

balmy escarp
#

not very 😭 the body is composed of a triangular mesh and the suit is composed of squares. I bought this asset from a gumroad shop 🥲

stray tangle
#

the body was pre-triangulated? cringe

balmy escarp
#

VRoid ‼️

stray tangle
#

either way, the vroid model would still be made of quads, they're just been triangulated

somber raven
#

Oof. Yeah, once it’s Triangulated it becomes that much more difficult to work with.

hardy hound
ivory sluice
#

avatars fly with primitive colliders, basically box colliders

granite crystal
#

I had an avatar with many materials, where several materials was applied to each mech. I decided to bring some optimisation, so.. i made some mask textures for meches, then applied matcaps from poiyomi shaders using masks, making only 1 material for each mech and maintaining its different looks like for metal/leather/cloth... But in the end i got still the same fps impact, but more videomemory (cause of mask textures) and more avatar size... Sooo... maybe splitting mech to several materials wasnt a bad solution after all?

calm spade
#

Are you unable to combine your meshes ?

granite crystal
#

its not about combining meshes, its about reducing amount of material-per-mesh

calm spade
#

Do you have different materials on every single meshes ?

#

As in, none of the meshes share any of the same materials

granite crystal
#

yes. i HAD different materials per mesh, and some of them share the same material (but for unity its the same as if it was different materials)

#

now i have 1 material per mesh, but making it by masking and matcaps was not a good idea..

calm spade
#

How many meshes do you have ?

granite crystal
#

well, about .... 40-50

calm spade
granite crystal
#

yes, but i have only ~10 enabled at the same time

#

its very customisable avatar

calm spade
#

Well, the memory and size won't change even if those meshes are disabled, so if performance ends up being the same, I would say you should go by batches/drawcalls specifically for each setup and chose whichever is best. Obviously if you end up in the very poor of memory side, definitely want to avoid that

granite crystal
#

I dont care about videomemory size as far as it can be traded for some fps for me

#

but reducing material count by adding texture masks took videomem and gave me no fps

calm spade
#

Well, people can run out of video memory, but less likely to run out of FPS sweat Seeing what the build manager window shows you for the stats would be helpful

#

How are you testing your framerate for this ?

granite crystal
#

i can suspect, that it is cpu cache bottlenecked, cause my cpu and gpu far from max load

#

i go in steam vr mode and heavy world, where fps is about 40-50, then trying my avatar and very light one atandart avatar

#

and comparing fps impact

calm spade
#

Are you using framerate override launch argument ?

#
VRChat

📘Advanced OptionsThese options are more advanced and designed to help creators debug issues with their creations.There are several launch options available for VRChat.If you are using Steam, you can set these easily in the Properties for VRChat, found by right-clicking on VRChat's entry in your gam...

granite crystal
#

no, never heard of

calm spade
#

If not then the test isn't worth much

granite crystal
#

i can see clearly, that in desktop mode max fps for me is 60, and 75/90 in vr, depending of what i set in oculus settings

#

anyway im testing in conditions, that is not hitting max fps

stray tangle
#

and in a lot of cases, the resolution of masks can be a lot lower than the main texture

marble rain
#

and your fps is as low as it is cause of to many meshes. each mesh will cause a drawcall unless you got more materials in each mesh. since each material = one draw call. to solve this is extreamly easy. merge any mesh that can be merged and toggle on by either UV discard or use a single bone for each to allow a toggle on/off system

buoyant holly
#

And running out of video memory does result in standalone headsets crashing

marble rain
#

well thats just because your memory is tied to system and gpu.

#

since it has direct access so it does not slow down on the quest for instance.

#

or as its known SOC

feral ether
#

Help! My polygons multiplied between export & import. 😭

#

2147483647

#

how

proven dock
#

enable mesh read/write

#

(disregard everything but the pointed-to checkbox, I just found this image on Google)

proven dock
#

tldr is that if the performance check can't read your mesh then it's going to assume it has the most polys it's capable of having

fickle tapir
#

Hi i was wondering if anyone knew how to optimize my 43 mb avi for quest? I've looked at all thr files and saw that 40+ mb is the fbx file itself. Im new to blender with beginner knowledge of unity

sick timber
fickle tapir
#

xD yea i just looked at them all lol. would deleting some shrink the size?

sick timber
fickle tapir
#

And how would i go about deleting these things? Thanks for the help!

sick timber
#

This one

stray tangle
analog oracle
#

Hey folks, I am currently trying to optimize and organize my state machine and animations a bit better so that the avatar UI I am making is a bit more extensible. I realize its not a necessarily what this channel is about, but I figure it may be the best place for it.

Currently the State machine has 5 states:

States:

UI Disabled: Param [Int] (UI/State/Current = 0)
UI Enabled: Param [Int] (UI/State/Current = 1)
Dashboard State: Param [Int] (UI/State/Current = 2)
Status Bar State: Param [Int] (UI/State/Current = 3)
Media Control State: Param [Int] (UI/State/Current = 4)

State transitions:

Depending on which contact/button was clicked I set the UI/State parameter via OSC.

These states have a blend tree inside of them that are motion timed to a parameter related to the enabled/disabled state of the related page being displayed, ie UI/State/Dashboard/InState where on the animation, the 0th keyframe is the gameobject disabled, and on keyframe 1 it is enabled.

Depending on the current UI/State int value I set the related page UI/State/{CurrentState}/InState float value to 0 or 1 in OSC so that the motion time kicks in and control the enabled/disabled keyframe for its related animation

There are currently 4 animations for these.

Animations:

UI_State_Pages_Enabled: This enables the background and static assets that are displayed on each page, such as the side bar for navigation.
UI_State_Pages_Dashboard: Displays dashboard page
UI_State_Pages_Status Bar: Displays status bar page
UI_State_Pages_Media Control: Displays media controls for spotify and currently played song

With that said, this is the current state machine and it just feels a bit messy and I am wondering if there is a better way to do the page switching with leaving people options to easily add their own pages/states:

#

Let me know if there is anything else I can explain about the implementation details, or if I missed a super simple option. I tend to overengineer my projects. One idea I was just doing the page states all in one animation and just use motion time to control which state I was in, but I was worried that it may not be as scalable

analog oracle
#

Disregard all of that, I had a fundamental logic flaw

median pilot
#

Could somebody offer some insight on what this issue is when i try to combine materials through CATS atlas? Using blender 3.6 and the latest plugin version

radiant shadow
#

blender 3.6 < too new

zealous wigeon
#

And then you might want to check that you are using the most up to date material combiner (the CATS discord links to a developer version of it as well)

#

(Developer version in this case basically doesn't mean anything, not had any issues or bugs with them)

split delta
#

Quick question:
Is it better to have 2 meshes both with the same material pointing to a large atlas?
Or 2 meshes each with their own material, one pointing to the large atlas, and one pointing to a smaller texture?

buoyant holly
split delta
buoyant holly
#

and might be good to see if you can find a UV layout to fit everything to minimize the amount of wasted pixels on your texture?

split delta
#

I think I can get everything on one material and one skinned mesh but I was just too lazy to redo animations which referenced separate meshes lol. It seems like I'll have to do it anyway~

median pilot
zealous wigeon
buoyant holly
untold acorn
#

Is there a tool that can help me identify where an avatar used a constraint. I'm trying to optimize it's cpu load.

proper grail
#

I dont remember if it works for constraints but put "Scripts" in the unity hierarchy search box

untold acorn
#

Thank you

errant yoke
#

how many materials/textures is maximum for Quest?

ivory sluice
#

4

fathom lark
#

hey everybody, for some reason my avatar has the bounds 2838.1, 2838.1, 2838.1and I can't seem to figure out why (Can't find the source of these massive bounds) - anyone has got an idea how I could figure it out? Thank uu!

#

here a picture of the issue

grizzled shard
fathom lark
grizzled shard
#

Bounds do look fine, yeah. They're near the center and the extent is less than one in any direction.

#

Check your avatar's scaling, that its actually the size you think it is. You can spawn the Unity default cube by right-clicking in the hierarchy, Create -> 3D -> Cube. Put it next to your avatar and look. It's 1m tall.

fathom lark
#

should be fine ig?

buoyant holly
fathom lark
#

Found the problem - what is that thing used for? Just removed it from the avatar, very weird stuff - it was used to play a sound for a knife....

grizzled shard
#

I'm not sure, not much purpose in it being that far out. Possibly the creator didn't know how to turn an audio source on and off, and instead moved it very far away to turn it "off".

onyx harness
#

That's... not far away, it's scaled up.
Once upon a time, before contacts were a thing, we used particle death to set parameter values. It was very jank and if people were culling you it would break a lot so you'd toss a 1000^3 cube on the model so you're never being culled no matter which direction the players were looking. But that was pre-contacts. idk if people still use systems like that

cold yarrow
#

ooh that's interesting, I didn't know that

fathom lark
#

it is so good I finally found out what caused this, these bounds were so utterly horrible XD

#

Now I would love to continue with optimizing the polycount and further stuff, however there is no *.fbx file available, only an *.asset file - does anyone know how I could convert / unpack this to fbx? I researched some stuff, but wasn't able to solve it yet

buoyant holly
fathom lark
#

but i still love it, that's why i wanna optimize it

buoyant holly
#

just wondering because avatars are normally supposed to come in fbx so I was asking to make sure you didn't end up with a ripped Avatar?

fathom lark
#

100% not ripped, person created it and avatar is even watermarked

#
  • used to be in avatar world of the person, that's how i initially found it
cold yarrow
#

exceptionally strange it's a .asset file then

#

Can't think of a good reason to do that.

fathom lark
#

i thought that might be normal, some person told me i gotta unpack it?

cold yarrow
#

it's not at all normal

fathom lark
#

hmm oki, ima try to msg the creator but ig the person won't answer too soon xdd

fathom lark
# cold yarrow it's not at all normal

yeah when googling the first thing i found on yt was some program called ripper which is basically used to reverse engineer avatars, so i thought i might've googled the wrong stuff

buoyant holly
fathom lark
#

idk why like only the main fbx is an .asset file, there are prefabs and everything but i haven't figured out yet how to deal w the .asset one

buoyant holly
digital thistle
#

that or they dont want people changing stuff idk, seems like an odd way to go about it

fathom lark
buoyant holly
#

could we see the store page to see if there's anything suspicious?

fathom lark
#

no store page, the avatar was completely gone and i had to contact the creator

buoyant holly
#

very suspicious?

digital thistle
#

maybe they lost access to the files and ripped their own avi as means to get it back

fathom lark
fathom lark
#

though it was only uploaded by the original author and then it disappeared, had to look a good amount of time to contact the creator

digital thistle
#

all we can do is speculate. hopefully they get back to you soon !

buoyant holly
#

and we're just being overly paranoid to make sure you don't get in trouble

fathom lark
fathom lark
buoyant holly
#

so sounds like you'll need to learn to do Avatar maintenance by yourself

fathom lark
#

yeah i already optimized it

#

without the fbx though further steps won't be really possible

digital thistle
#

there are some tools for unity that deal w mesh decimation and texture atlasing but idk if those require the actual .fbx file and how well they would do

cold yarrow
#

yeah I'm betting if you have to pull that file apart, it's going to be a bunch of work

buoyant holly
fathom lark
fathom lark
buoyant holly
#

and in future it might suggest your next Avatar base you work with be someone who hasn't disappeared

fathom lark
buoyant holly
#

https://store.steampowered.com/app/1486350/VRoid_Studio_v1221/ a potential Anime Avatar making tools that might be handy in the future if you wanted to try to make something a little more custom?

VRoid Studio is a 3D character maker that lets you use your imagination to easily create your own original characters. By making your 2D characters able to move in a 3D space and usable in anime and game production, your creative range will greatly expand. The VRoid Project has started with the hope that many creators will have fun exploring the...

▶ Play video
#

at the very least it's a pretty decent place to get parts to kit Bash from

fathom lark
digital thistle
#

id recommend just watching blender tutorials in general then so you can get a model set up because there really isnt much that you need to do thats 'vrchat specific'

#

if youre like me and prefer reading documentation over video tutorials, pretty much everything you need to get the vrchat side of things up and running is on the vrc website

buoyant holly
digital thistle
zinc estuary
candid shard
#

so this is my current setup for buttons on my tablet that i've made, multiple receivers that have their own bools, is there a way to do this in a more efficient way then it currently is or is this about as efficient as i can get it?

#

thought i might be able to use the same method i use for the slider but i'm unsure how i'd know if a specific button has been pressed as there isn't rly a "in-between" a certain number

digital thistle
#

depending on what you wanna do with it you might have to fiddle w the armature i imagine but dont quote me on that

onyx harness
full cedar
#

hey once vrchat updates to the 2020 unity update will avatar creation still work basically the same way?

#

like will avatars and avatar downloads have to be updated for the new unity update?

zealous wigeon
zealous wigeon
full cedar
#

oh cool!

#

nothing to worry about then

#

thank you

tame summit
marble rain
#

upgrade once they tell you to. which wont happen for a while

thin steeple
#

If you have a texture thats 512x512

IS there any performance benefits to telling unity that 512x512 is the max settings, in the texture settings?

thin steeple
buoyant holly
#

that setting is more there for when you want to squish textures to be smaller resolution then the source files

thin steeple
#

I figured i'd ask the silly questions x3

#

Thankies 💙

buoyant holly
#

you can also set those settings per platform so for like the quest to build something you can make it more lower resolution

gloomy patio
#

Hey question, what rank should i make my android build? (VERY bare bones avi, removed everything, merged and using optimization tools)

i was wondering bc the mobile build, and i wanna have a nicer looking opti avi :3

digital thistle
#

its often quite difficult to get decent performance rating with android builds because of the "low" tris limit, i try to shoot for poor or medium usually, if i can be bothered

gloomy patio
#

Im going for med with around 64K ish polys :3

digital thistle
#

on quest? that wont be possible

gloomy patio
#

maybe poor i guess

digital thistle
#

if youre over 20k your avi is marked as very poor iirc

#

^ from the link i sent

stray tangle
#

and very poor isn't allowed on android

digital thistle
#

you can def have very poor quest avis but they wont be shown by default

#

unless you mean actual mobile android, then i wouldnt know

tulip rose
#

Yeah, the phone app does not support it at all. Quest does, for now, but it's also better to not hit very poor all together lol.

digital thistle
#

yeah, getting under 20k is just one hell of a task for most people, so i dont blame them. i try to be aware of my toplogy and tris count and even my base mesh hits around 18-20k for body and head. humanoid models, especially semi-realistic ones are difficult to keep low and looking good

tulip rose
#

A lot of my quest bases came from the 10k is very poor days of vrchat. Like most if my quest avis are medium lol

digital thistle
#

i can for sure manage med if i delete the base mesh under the clothing - which i do - but yeah theres no way ill ever make a full base, with head and body, thats 10k total

#

im a little too attached to the detail i manage with 20k for that (which i am still fairly proud of as it is less than most commercial vrc bases)

modest blade
#

Greetings. I was profiling the performance of one of my specific use avatars.

Most of the part of the avatar looks fine, but in the profiler, Animators.Update is taking significant performance after I did all optimization as I know. Please refer to the attached image.

I have a little knowledge of this, so I simplified and reduced Layers and Transitions as much as possible, and also avoided using Any State. I used BlendTree Toggle to merge most simple layers for toggle. Still, the performance is still not ideal.

I would like to know if there are any methods OTHER than
Reduce Layers
Reduce Transition
Avoid Any State
BlendTree Toggle
Split Avatar

Please note, that the avatar is for specific use to direct a campaign/event and it is preferred not to split.

Keywords:
Animator
Animators.Update
Director.ProcessFrame
PreLateUpdate.DirectorUpdateAnimationEnd
PreLateUpdate.DirectorUpdateAnimationBegin

bold wharf
#

Most comprehensive benchmark of animator performance I know of (in relation to VRChat)

burnt plover
#

tryna upload an av for quest, but my file size is 10.48 when it needs to be 10

every single texture on the av is compressed to 50 and on normal quality, what do i do?
cuz im lost

nova hornet
#

Blendshape optimizer and direct tree optimizer should help lower the file size a little bit
The other 2 things just fix common issues so I recommend doing them 😊

wheat breach
#

I have a question about optimization: which is more optimized, having seperate skinned meshes that toggle on and off, or having blendshapes to hide the mesh?

stray tangle
#

a mesh "hidden" with shape keys is still rendered

#

and to top it off, you're making it worse by adding the cost of the blendshape skinning

ivory sluice
#

If each sub mesh has a different material it's better to do toggles

wheat breach
#

I had someone tell me to weight the mesh to an additional bone and then scale the bone to 0 in unity as a toggle, and that confused the heck out of me

ivory sluice
#

That will work badly for a skinned mesh, scaling it down to 0 won't hide it, it will make polygons stretch a lot if you move some bones

stray tangle
#

^ you'd need more than just one bone scaled to 0

#

which would end up probably being worse

wheat breach
#

I understand, thank you very much!

marble rain
stray tangle
#

the cost of the blendshape itself will be reduced, sure, but the cost of the mesh still having to be skinned and shaed is still there, when it wouldn't be if you disabled the mesh

marble rain
#

eh still has a huge effect on it.

marsh bison
#

In terms of optimizing avis:

  • use Direct Blend Trees
  • have as little animator controller layers as possible
  • keep transition amounts reasonable

What else?

marble rain
#

honestly vrchat should add in a way to show what object is enabled and disabled. so you have two different counts

marble rain
marsh bison
#

Materials itself or Material Slots?

marble rain
#

i typically recommend 4 materials top

marsh bison
#

hahaha

marble rain
#

eh Materials and Material slots go hand in hand

marsh bison
#

not an option for me sadly

marble rain
#

why not?

marsh bison
#

I have like 6-7 different materials that I wanna be able to toggle between

marble rain
#

you can use UV discard for that

marsh bison
#

UV discard?

stray tangle
# marble rain eh Materials and Material slots go hand in hand

not exactly. a material itself is just like a json, it's just a list of properties. if two materials share the same textures, but use different settings, and you swap which material is used in a single slot, there is little to no performance cost

marble rain
#

allows up to 15 toggles per material.

#

yeea its in Poiyomi's shader

#

it does however require you to go into blender and set it up

stray tangle
#

it's just that animating material swaps is annoying

marsh bison
#

material swaps are easy?

marble rain
#

you cant have a material without a material slot.

stray tangle
#

I wouldn't say that's an accurate statement but you do you

marsh bison
#

you can have 6-7 materials that share a material slot

marble rain
stray tangle
#

load another what exactly?

marble rain
#

material.

marsh bison
#

if you change a material you change a material

is that what you are saying?

#

because materials and texures are two different things

marble rain
#

if you change a material to another material you need to rerender it.

#

even if it has the same texture inside.

marsh bison
#

yes, but I'm not asking about optimizations when toggling stuff

stray tangle
#

not sure what you mean by that. it does not matter if one frame you're rendering the mesh using a certain material and the next you're rendering it with a different material. if both materials are practically the same, there is no performance difference

#

anyways, we're getting off topic

marsh bison
#

I'm asking about improvements I can do whenever my avi is there.

marble rain
#

less materials is what i said C0D3

stray tangle
marsh bison
#

Like If I have an avi that has 800 layers it is going to tank perf.

marble rain
#

oh yea no that will

#

800 layers is far to many

marsh bison
#

so I'm looking for stuff that will just improve fps in general.

#

As I can't really optimize my shaders as I already use poyiomi

marble rain
#

Draw calls and Animation layers are the two biggest offenders. mostly.

stray tangle
#

you can certainly optimize your Poiyomi materials. reducing vram usage can help quite a bit

marble rain
#

you can through. if you have 8 materials slots. you can reduce that 100%.

marsh bison
#

Yeah vram is another toppic for me

marble rain
#

depends are all your textures 4k?

marsh bison
#

I have 24 materal slots

marble rain
#

jeez.

stray tangle
#

in general you shouldn't use 4k textures or higher

marble rain
#

that should be reduced to much lower numbers

stray tangle
#

unless you're atlasing a lot of stuff

marble rain
#

eh.

#

a 4k texture is fine lol

marsh bison
#

You cannot have a material on an object without a material slot, right?

stray tangle
#

you can do a lot with a 2k texture

marble rain
#

you cant

stray tangle
marble rain
#

you have two options to have less materials. you can combine meshes, or you can do UV discard with the combined meshes. that would allow toggles to work

marsh bison
#

and for something to have a material it needs a material slot, right?

marble rain
#

yes.

#

thats why i said Material is depended on a material slot for it to render.

marsh bison
#

I have 17 skinned mesh renderers and 24 material slots. so yeah

marble rain
#

oh yea no get that far down lol

#

you can most likely reduce that to 4 pretty easy

marsh bison
#

Nope, how

marble rain
#

Atlas

#
  • UV discard
marsh bison
#

I have 3 different horn meshes I can toggle between

marble rain
#

would allow 60 Toggles.

#

those 24 materials you got. are they all 4k?

#

allows you to toggle combined textures in a mesh

marsh bison
#

so how do I make 3 differnt horn meshes render in 1 skinned mesh renderer

#

is that doable with uv discard?

marble rain
#

you go into blender. combine all of it and then you need to change your UV map for each one

#

well combine it so there are 4 materials.

#

and yes

#

UV discard would allow it

marsh bison
#

Can I make 5+ differnet meshes render in 1 skinned mesh renderer?

#

because there is the limit of 4 UV Maps iirc

marble rain
#

you can make as many as you want in one skinned mesh

#

as long as you have more materials

marsh bison
#

What is the technical implementation of this?

#

How does this work?

marble rain
#

Each material with poiyomi supports 16 Toggles

marsh bison
#

Can each material be toggled independently from each other?

marble rain
#

yep

#

everything you want to not show. can be disabled

#

or enabled

#

it all depends on the UV you setup

marble rain
marsh bison
#

How about mixing different material settings in a single uv discard?

stray tangle
# marsh bison What is the technical implementation of this?

UV maps typically only use the 0 to 1 coordinates. however, if you move UVs to a different whole number tile, the texture will map the same (since textures repeat by default), but the shader can use those different coordinates to do things like discard the mesh in certain tiles

marsh bison
#

I am technically inclined and have written a c++ programm with a vertex and fragment shader

marble rain
#

eh. different material settings is abit more on the it wont most likely since whatever change you make affects everything in that material

marsh bison
#

so I do know how stuff works a little

marble rain
#

but that said you could most likely have multiple UV's for it

#

but it depends on what your requirements are.

marsh bison
#

"do things like discard the mesh in certain tiles" can I control what parts of my mesh gets discarded?

marble rain
#

like what kind of settings in the material

#

yes

#

thats related to the UV

#

depended on what UV tile you want to discard

#

and what ever that tile has in it

stray tangle
#

this is on the same UV map. you can also choose to set up the discarding on a second UV map to not make a mess out of your primary one

marble rain
#

indeed

marsh bison
#

won't that require me to have larger textures, because I now need to make my textures fill the whole 4x4 grid?

marble rain
#

no

#

the UV grid will function as if you still have that one large UV

marsh bison
#

So I am still locked to a single texture

marble rain
#

no

marsh bison
#

huh?

marble rain
#

okay so

stray tangle
marsh bison
#

dunno what UDIMs are

marble rain
#

Uv discard.

stray tangle
#

if you have 3 sets of horns with different textures, you would need to atlas or bake those textures in order for them to be one material

marble rain
#

or well no

stray tangle
#

no, UDIMs have nothing to do with UV Discard

marble rain
#

well for UV discard to work well you need to do atlas regardless otherwise the point of it is defeated.

stray tangle
#

let's put it this way instead

marsh bison
#

right now those 3 different horn meshes have the same mats, so I don't think I'll need atlasing

stray tangle
#

imagine you have a 3 piece suit, all one mesh, all one material. you want to toggle each piece of the suit individually.

what you could do is put one piece in the 0,0 tile, another in the 0,1 tile, and another in the 0,2 tile

#

then, by using UV Tile discard, you can choose which of those tiles you want to discard, effectively toggling them as if they were separate objects

stray tangle
#

then just join the meshes and keep only one material slot

#

I'd also ask yourself if you really need 3 different sets of horns

marsh bison
#

idk. I like to have options

marble rain
#

then UV discard is your choice to optimize

#

since it allows exactly what you want

marsh bison
#

also my avi is over the tri limit anyways, so it is very poor anyways.

marble rain
#

thats fine. poly is less of a importance over Draw calls

#

or Vram usage.

#

etc

#

but reducing the amount of Skinned mesh and materials you use you would see quite a increase

#

and you would also have less people complaining lol

marsh bison
#

eh. I already have people complaining cause of Kanna Protect and overlay shaders

marble rain
#

haha

#

less reason for them to complain if you optimize imao

stray tangle
#

what kind of overlay shaders?

marble rain
#

but yea check out the link i sent. it should tell you how UV discard works

marsh bison
stray tangle
#

are you saying you have shaders on your avatar that overlay over other peoples views?

ivory sluice
#

That is something to complain for yes

#

You could make these ovelay shaders local using the IsLocal parameter

stray tangle
#

and should

ivory sluice
#

Ye

marsh bison
#

but overlay shaders read the encrypted mesh

#

Not 100% sure about how kanna protect manages to render the encrypted mesh properly with given right keys though

ivory sluice
#

I really doubt you'd need a screenspace shader for decoding a shuffled mesh
But idk maybe it has something special

It still can be annoying for some users as you said

marsh bison
#

But I guess I'll look into UV discard next

#

should allow me to get rid of like 2-4 Skinned mesh renderers

stray tangle
#

just be aware that if custom shaders are disabled, all sets of horns will be shown

#

unless you set your Fallback shader to VRC/Hidden, which will not render any

marsh bison
#

Ah thanks. I was also wanting to UV Discard some nsfw boobs...

stray tangle
#

why is that a separate mesh

#

or material

marsh bison
#

the base was started in poi 7.3 times

#

sooooo no uv discard back then

#

sooo just use different meshes for everything

mighty brook
#

Need help with physbones and stuff😅 trying to port this avatar to quest but physbones are apparently the major issue

snow knot
#

Like too many physbones/bones affected by physbones?

proven dock
#

but I guess you covered that with "unless you're atlassing a lot of stuff"

stray tangle
#

precisely lol

proven dock
#

(haven't set up uv discard yet, could get it down to ~10 materials if I did)

#

Oh and on the note of reducing my poor to medium, is there an easy way to combine physbones on e.g. 8 hair or skirt strands?

#

the parameters are all exactly the same for all of e.g. skirt_1 skirt_2 etc, the problem is the bones they're on are parented by a humanoid bone

#

(I'm fine with losing the ability for multiple hair segments to be grabbed at once, especially if I e.g. divide the hair into 3 parts instead of the 9 it currently is)

stray tangle
#

just create a new bone to act as a root in Blender

#

for the hair, just extrude a new bone out of the Head bone, rename it "HairRoot". select the first bone in each hair strand, shift click HairRoot bone, ctrl + P > Keep transform

proven dock
#

ok saving that to my scratchpad thanks

pulsar valve
stray tangle
#

I suppose the only difference is that if you extrude, you'll need to manually uncheck Connected to be able to move the bone somewhere else

pulsar valve
#

I just get worried that it would affect how the physbones react, since it'd be a different origin point. With a duplicate, you know for sure they should react exactly the same as before.

#

But I'm not actually sure if that does matter in the end.

tepid garnet
#

Is there a streamlined way in blender to re-uv that takes like several materials or a bunch of selected faces and just bakes or moves the texture on those? Sorta what material combiner plugin did but without wasting 95% of your uv space/vram.
AFAICT baking needs to be done one source material at a time and requires an annoying shader node to get right before hand.

#

maybe I should give tuxedo another look, last I checked it was a bit overkill for what I want.

stray tangle
#

apparently the Simplebake addon can too

tepid garnet
# stray tangle Tuxedo can do this pretty well

afaict Tuxedo always bakes everything into one material and mesh when I need to keep quite a few things out of it.
A bit too much click and forget for me, even with all the options, I'm looking for something I'll run a few times as a tool on an avi.

tepid garnet
stray tangle
#

it can absolutely do what you want, but it's a little less straightforward

tepid garnet
#

although I've split by material enough times that maybe I should just not worry about it

#

anyway, thanks for pointing me in a couple good directions!

proven dock
#

eg if I say 1/3/4/5/6 are one material, 2/8/9 are another, and 7 is a third (all on the same texture)... for example, 2/8/9 might be stuff I want a different matcap on and 7 might be transparent because eyes

#

which material combiner can do, haven't tried tuxedo or packmaster or any of those

#

thing material combiner sucks at though is packing, especially if I want to run it twice (eg adding a swimsuit without going back to my unmodified version)

tepid garnet
#

Maybe I could use material combiner first with a stupid high res, then seperate by material, then re-uv with uv packmaster, then bake just the one mat to the new uvs

heady smelt
#

Can somebody please help optimize my avatar?

#

I don't really know what I'm doing

tulip rose
heady smelt
#

disregard

#

I am going to change to a different base

heady smelt
novel sinew
#

Can someone tell me what all contributes to the avatar size, particularly for quest, or help me make it small enough to fit on quest?
I've got 8 materials, 6 textures between them and the resolutions are as follows. ( All on low compression as that appears to make it smaller according to unity. )
2048
512
512
1024
1024
128
I've got hand colliders, left and right ears, plus the tail. And that's everything for the physbones.
What else could I possibly do?? I've uploaded this avatar in the past without removing anything and I'm just unsure of what I managed to mess up, or do wrong.

tulip rose
novel sinew
#

Ah, nevermind! Bit of a dumb here.

#

Uh, well it's the body mesh. But there's not much I can do about that as I've got 0 experience with messing with stuff like it, and have no idea why it's big in the first place ;p

buoyant holly
#

Lots of blend shapes or vertices can contribute to the file size of a avatar mesh

ruby isle
waxen estuary
#

oh

#

I personally fail to see the point of mesh compression right now

#

what I really wish vrc had was randomizing the vertexes where it’s servers would store the key to derandomize it.

#

to help fix the whole ripping issue.

civic plume
#

People say that that’s not possible. But the way you just described it makes so much sense

#

If the process for ripping involves taking the avatar code, isn’t that technically a breach of privacy since only the creator is supposed to know it unless the avatar is public?

toxic rivet
#

which would be pointless

#

encrpytion only works against a middle man attack, not the expected target

#

either way the client needs the key to decrypt

proper grail
#

if it were possible, big cinema would have done it by now.

proper grail
civic plume
#

People use modded clients to be able to take the code/model, right? Is there not a better method than “easy anti cheat” that can completely remove any chances of modded clients being able to connect to servers at all?

toxic rivet
#

you can do it without ever having to install the game

civic plume
#

How would they get the code then?

toxic rivet
#

its almost like your avatars are stored on your pc in a cache to minimize bandwidth usage

#

and most mods don't attack vrchat on PC they do it on quest which has no anti cheat since anticheat doesnt really exist on the android platform

#

the entire concept of adding encryption to stop avatar ripping is quite pointless as it would be an excessive amount of time to both implement and execute and it would be broken in less time than it took to implement since the key has to be returned to every user in the lobby to decrypt to see said avatar or world, companies spend thousands of dollars on ways to secure the bundles of the game files such as Epic games who use AES encryption in the game engine only for them to get broken within a few hours, its a endless cat and mouse game that wastes time money and resources to implement its only useful in a case where it protects against an attacking party such as with HTTPS traffic between client and server like with password security.

civic plume
#

So we rely on the individual mesh scrambling components like “Kanna Protecc”. If people from the community have figured it out and gotten it to work, why can’t the dev team just implement something similar into the sdk?

marsh bison
#

Kanna protecc is useless if you know the current avatar parameters of the other person.

heavy knot
#

those systems can easily be cracked in matters of days at most, vrchat wouldn't want to make those kinds of easy systems

marsh bison
#

Which is hard on pc, but not impossible.

toxic rivet
civic plume
#

yet they implement easy anti cheat, one of the most notorious for being bypassed but hey who’s counting

marsh bison
#

I wouldn't know how to inject into EAC, but I know such things exist

toxic rivet
#

dont have to

heavy knot
#

as there's not much of a market to cracking it as not many avatars use it

toxic rivet
marsh bison
#

How would you modify the game without loading a dll or injecting something similar?

toxic rivet
#

other ways exist just less known

marsh bison
#

I guess you could get the avatar parameters of a remote avatar by literally proxying the vrc traffic I guess

toxic rivet
#

eac works against the normal every modder not people who know what they are doing, anti cheat can very much be treated like encrpytion in how it works, it works until it doesn't and then it gets a patch and then it gets bypassed again, endless cat and mouse game of burned money and resources

civic plume
#

I think I understand now

toxic rivet
#

also with kanna protect and dexprotect, its only a matter of time

marsh bison
toxic rivet
#

when it becomes standarized it then becomes a target

#

then its a matter of time

#

entire billion dollar game companies try to do this

#

even the PS2 utalized a type of "encrpytion" with is textures called swizzling

#

and that has stopped no one from preserving and decompiling the games

marsh bison
#

BattlEys is also not perfect, seeing as cheats exist for Destiny 2

civic plume
toxic rivet
#

i love injecting unsigned code into kernel space

marsh bison
#

Aren't you confusing that with Vanguard?

toxic rivet
marsh bison
#

ah okay

toxic rivet
#

battle eye injects unsigned code into ring 0

marsh bison
#

if battle eye can do that, why can't hackers?

toxic rivet
#

you can use battleeye against itself to inject your own code

marsh bison
#

lol

toxic rivet
#

they inject unsigned verified code

#

find the payload replace it with yours

#

and it just goe "yeah okay"

#

same thing happens with Mihoyo and genshin impact with Mhyprot2

#

it was being used in a similiar case as an attack vector to bypass user privilege's and effectivly rat peoples systems

marsh bison
#

fun

toxic rivet
marsh bison
#

But yeah, seeing as how mesh and texture data needs to be decrypted on the end computer at some stage there will always be a way to get avatars.

toxic rivet
#

yes

#

encrpytion is pointless in this usecase

#

encrpytion has its purpose and this isnt it

marsh bison
#

Assuming that everything is secure, but you get access to all data your gpu gets you can still recreate the avatar (because your gpu can).

#

encryption is for end to end.

#

and the gpu is effectively the end....

toxic rivet
#

you dont even need the modified kernel for that part

marsh bison
#

hah, far too complex. Just inject a dll to hook all the graphic api calls lol

toxic rivet
#

would have to be a signed dll or else it would piss off EAC

marsh bison
#

Don't eac injectors exist?

toxic rivet
#

they exist but your asking for 1 account per day to use it

#

public = patched

#

its almost like EAC has an entire deparment dedicated to reversing bypasses like just how denuvo has a department for reversing game cracks

#

and most of the time injectors are public on github so not much reversing required

#

once again its just a cat and mouse game which creates wasted money and resources on both sides

marsh bison
#

hell, just make an injector that hides the dll via kernel level struct modification. There are some gnarly technices people could use...

toxic rivet
#

then eac just wouldnt trust the kernel

#

its the same problem back when eac first launched in vrchat and it resulted in a lot of peoples system dlls failing signature checks

marsh bison
#

you can do that without modifying the kernel iirc

toxic rivet
#

i love Xinput.dll failing signature check

marsh bison
#

didn't read fully, but I think this is what I was referencing: https://memn0ps.github.io/rusty-windows-kernel-rootkit/

#

This opened my eyes somewhat as to what can and can't be done.
Also I think you can write self signed drivers/kernel modules and make windows accept them in normal mode.

toxic rivet
marsh bison
#

I think some of VoiceMeeters or VAC's drivers are actually unsigned

toxic rivet
#

that goes via trust

heavy knot
toxic rivet
#

if it hasn't encountered that driver signature before as they use a trust system to see how often that signature is used across pcs through analytics

marsh bison
#

And I use a modified/patched NVIDIA driver

marsh bison
#

and eac just accepts that

Edit: Just to clarify, I used NVCleanstall to do that.

toxic rivet
#

dont reminds me of that person yesterday that said to delete roslyn compiler xd

marsh bison
#

delete system32, it contains spyware Kappa

toxic rivet
#

remove conhost.exe its used by hackers to make terminal pop up :3

vocal canyon
#

Hi, I've been having this issue for probably over a year and a half now, but I want to make an optimized avatar and I want to use cats to make a texture atlas but I physically am unable to do anything due to not being able to use cats. I've just left cats alone and just did other blender work for avatars but I literally want to be able to get rid of this error. Can anyone help? 😭

radiant shadow
#

cant see wich blender version this is either 2.9x with old cats or 3.5 with indevsomewhere (never got it to work myself just pukes up an error once and second time it will import av)

#

nm i see it, 3.6 will not work

zealous wigeon
marsh bison
#

Release cats will work with blender 2.93 LTS

velvet crow
#

Doesn't CATS work on all blender versions if you just set the correct python? I had it working in 3.4, but haven't used it since then because I didn't need to

stray tangle
dreamy basin
#

what are the minimum stats for a fallback?

zealous wigeon
#

You need to upload for both PC and Quest for it to be allowed to be a fallback.

dreamy basin
#

nice thank youuuu

lyric dock
#

That feeling when

low mural
#

I don't get it.
I have this avatar from booth to which I added a few things (outfits and scripts such as GoGo). Obviously the performance is worse than it was originally, but what I don't get is why is it still worse even after disabling every single component that was added (armature and physbones included)?
And it's not something small either, we're talking something like a 40% difference in FPS.
Could it be that it comes from too many FX layers (there's something like 25)? That's the only thing I can think of

#

Plus neither my CPU or GPU is used more from it (both sitting at around 30% use), it kinda feels like it's the engine itself which struggles and not my computer?

hybrid shale
#

i dont think disabling things make it stop exsisting

#

it still count towards whole avatar

low mural
tulip rose
velvet crow
velvet crow
#

And like catboy said, things like mesh vram, texture vram, and blend shapes on the main avi count towards it too.

tulip rose
#

Yeah, blend shapes are trash for fps.

low mural
tulip rose
#

Its all active always active
but yeah, do you have always active blend shapes?

velvet crow
#

The mains things to do are:

  • Check texture memory, which is the easiest to resolve
  • Try to combine FX layers into blend trees, which isn't too hard for toggles (and having 3-5 layers is not a horrible thing)
  • Remove any unused blendshapes
  • Check the poly count of your objects and if they're too high
  • Consider how many materials your avatar has, since each one incurs draw calls.
#

And again, use the profiler in Unity to test the performance and breakdown which parts are taking the longest to compute/render

#

in my opinion, your avatar shouldn't take more than 2 ms total to render, preferably <1 ms

low mural
velvet crow
#

Any blendshape that is not 0

low mural
velvet crow
#

So like if you set a blendshape to 60% because you like how it looks, it's always on

tulip rose
#

That would good amount

velvet crow
#

I know VRCFury apparently has a way to remove unused blendshapes easily, and their whole process is non-destructive, but I've never used it

low mural
tulip rose
# low mural Oh, well, then I got a lot more

blend shapes are additively calculated per frame after the bone transforms.
Meaning if they are always more than 0, they are moving, applying the change, then reverting, and starting over. Every frame.

velvet crow
#

Window > Analysis > Profiler

#

It allows you to see how long a single frame takes to render at any given point, and all of what makes up those frames

#

Generally you want to use the Profile Analyzer to get a good average/median, but just finding a specific frame that seems about average is fine

low mural
tulip rose
#

Yeah its a weird trend vrc has to just, chuck 400 blend shapes in for all the things you wanna have. Then just leave like 15 on at all times.

velvet crow
#

Avatar model creators want to allow their avis to be customizable so they can get more sales, but it has the side effect of: most people don't give two shits to try to optimize anything, especially because it's not super easy or convenient and requires effort

tulip rose
#

Yeah..

#

Honestly this video is a good watch for anyone who wants to dig into optimizing their avi: https://youtu.be/JFBQeNON64Q?si=8oMovqAi7dD8TDlA

Suited up in FBT, hopped into VRChat, joining up on your friends -- finally, some time off!
W-wait, what's going on? Where'd my frames go?!
Avatar Performance in VRChat isn't as simple as a 1-2-3 tutorial or guide. Tupper is here to talk you through where avatar lag comes from, why it's there in the first place, and what you can do about it.
(an...

▶ Play video
velvet crow
#

I hope to make a "master class" of sorts that breaks down the basics of each step into really short and digestible videos so I can just send them to people when they need help

low mural
#

So, after running the profiler, 2/3 of rendering time is from "Garbage Collector" (whatever this is) and Scripts

tulip rose
#

GC is the thing to make sure unity dose not randomly run itself into the ground.

#

Thats normal

velvet crow
#

yeah that's kinda normal. There should be a more specific section of calls that indicate the avatar rendering

#

like look where you see Animator.Update() in blue or something

#

that and it's siblings should be the avatar rendering

low mural
#

Animator.Update sits at 0.54ms

velvet crow
#

There should be two of them. Is that the total time between them?

#

Usually the first one is about 0.2ms and the second one is anywhere from 0.15 to 0.7+

#

You could reduce your FX layers, but I'd see if there's other parts of your avi that are struggling. You can also check shaders by seeing how long the GPU is spending. You should see a GPU section in that profiler that details some of that, though I haven't look much at it before

low mural
velvet crow
#

yeah, I'd probably start there since it's the easiest

low mural
#

Though the whole rendering takes around 11ms average, so there might be something else too

velvet crow
#

Well, some of that may be the editor loop

#

if you see the big gray bar that says editor loop, that contributes to most of it usually.

low mural
#

I don't, by the way I've ran it with the emulator on, was this the correct way to do it?

#

Ah, yes I do, but it doesn't contribute to a lot

lyric dock
low mural
#

Application.Tick is already at 10.27ms and EditorLoop brings it to 10.60

#

The profiler gives me nothing about the GPU rendering time though, it displays "GPU:--ms"

velvet crow
lyric dock
#

However I noticed it was very poor rating on quest lmfao

#

So I brought it into Cats to decimate the mesh a bit

bold wharf
low mural
low mural
#

I think that I got what was wrong. Physbones are still being calculated even if disabled it seems, as deleting the disabled ones restore my performances to what it should be.

stray tangle
#

components, total transforms, collision checks

low mural
stray tangle
low mural
stray tangle
#

disabling the Physbone components via the checkbox should in theory stop them from executing

#

if not it's likely a bug

low mural
#

Well, they don't appear in-game, but they still definitely impact the performances. I don't know what's happening under the hood but that's my observation

waxen estuary
#

hmm is there a way to have transforms not counted as just Bones and only as PhysBone Transforms as well as any sub transforms that it parents?

velvet crow
velvet crow
#

I see now. That's really interesting.

I had assumed that disabling them would stop them from being calculated. But I guess that's not the case? I just remember seeing physbones being rendered in debug view, even if you are using the avatar hider.

If physbones are causing a significant performance loss, it may be just the way that you have them configured. For example, I would double check that there's no physbones overlapping. Like if two or more scripts are affecting the same bone(s).

bold wharf
proper grail
#

iirc there was a comparison of all the funny layer combining and the best result was a defaults layer on top and a direct blend layer with only the off toggle animation

bold wharf
errant flint
#

Hi guys, so I commisoned an customized avatar. I have a strong pc 4090 so idc about optimization bcz I want like a high quality avatar. But the avatar is rated very poor not green. So what is better to do here? First time i buy avatar from scratch.. so idk

#

What do u recommend me to do?

slate sinew
waxen estuary
errant flint
#

Why

waxen estuary
#

Also consider other users as well, not everyone can handle your avatar with 1.5 GB VRAM.

#

Consider cases where there is world with over 100 of your avatar

#

you will blow out your 4090 in less than 30 seconds 💀

errant flint
#

Haha

slate sinew
#

No kidding lmfao

cinder shale
#

The horror the avatar would be on quest

waxen estuary
waxen estuary
#

no need for your 115 8K textures.

#

💀

errant flint
#

Yeah but will quality be less?

cinder shale
errant flint
#

Or how that work

waxen estuary
#

(especially when there is no difference between 8k and 4k)

errant flint
#

Maybe I can have 1 avtar with very poor quality(high quality) and other optimized?

#

For meeting more people...

cinder shale
waxen estuary
#

Yeah and what if you forget to switch them? 💀

errant flint
#

I see, haha

waxen estuary
#

Also vrchat evolves and as gpu’s age so does their speed decrease

errant flint
#

I litteraly told the guy who made my avtar. "I have a 4090, and i want high quality avatar, so don't optimze it" 😶

waxen estuary
#

Because age destroys things.

cinder shale
#

Good thing imposters are coming out soon...

errant flint
#

😦

waxen estuary
#

yeah

low mural
modest oyster
#

Before atlassing anything, what exactly does the avatar have on it? 133 materials and 115 skinned meshes is actually insane, is this like 10 different avatars combined into one?

waxen estuary
#

imposters so that way we can blow out his 4090 FASTER