#avatar-optimization
1 messages · Page 12 of 1
Hmm that's true but different parts of hair have different rotation which then has different parameters per phys bone
how would I work around that?
(oh, you deleted your message)
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?
Did the newly imported mesh have blendshapes and have you done the auto fix that the VRCSDK have told you to do about them?
When you import anything into Unity it will convert a copy of it to a Unity special format that Unity then uses, so the file format imported should not matter if it properly imports.
the new mesh was included in blender on the model itself so it's already Autofixed from the first time i imported the model
And what is the size of the armor model file itself?
Just in the file explorer
well it's part of the whole model . it isn't seperate.
Can also use thry's vram calculator to see which parts are taking the most memory. Like if it really is the mesh, or is it the textures.
https://github.com/Thryrallo/VRC-Avatar-Performance-Tools
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
i think it bugged out saying i have over 11 million blendshapes....
You sure it doesn't?
yeah i definitly sure i don't have 11 MILLION blend shapes ...
Sorry, yes that seems really unlikely, so unlikely that I read polygons.
normally i can change the quality of images i imported in unity but these new one don't let me do that
Might be worth trying to convert them to png then.
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.
Do they move in playmode?
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
is Png lighter than Jpg ?
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.
thanks for the help. ill finish it up and see how bad it is now.
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.
👍
can someone help by telling me how to remove the number of bones
how can I lose 2.6 mb quickly 😢 Ive already compressed and lowered quality of textures
and put high on mesh compression
Potentially useful tip for quest models
i confirm, it's bonkers
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
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
homestarrunner reference?
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
If you haven't played with the compression settings on each file yet, that's a good place to start.
https://medium.com/@made-indrayana/understanding-audio-compression-settings-in-unity-e879a821023f
Understanding audio compression formats in Unity and why setting the right compression type is important for your game.
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
That's a little vague of a question without knowing specifics. What do your performance rankings look like in Unity? It's hard to make suggestions without knowing what is or isn't a problem.
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.
yes but thankfully there's tools like VRCFury to remove non used blendshapes for you non destructively
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.
Aah, didn't know such tools existed. Great, thanks, I'll look into that then.
A mess. It looks like a mess. But no worries though, as I use it almost exclusively in private, it's just for my peace of mind to know that I did what I could do (and it's still good to know if I need to do similar things on other avatars that I might use in public)
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.
Again, d4rk's avtar optimizer might be able to help. Usually the Material Slots and Skinned Mesh Renderers are things you have to reduce in Blender, but d4rk can try and do it at build.
You're correct, though I'm using every single toggle on this avatar, I already removed those that weren't in use
Interesting, I'll take a look at that
Well, it made a whole mess, I guess the only correct way to do this is go through Blender
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.
Toggles, materials, constraints, the whole package
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
that is the very poor ever
do i need to worry about reducing polygon count or is this already simple enough?
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
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
oh no not lower poly than this
this was after a degenerated it
before it was like 6000 polys
is there a free equivalent?
oh nevermind there's a trial
- Instant meshes Remesh
- Speedretopo
- Retopo MT
are all free Blender addons
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).
I always feel remorseful when lowering the quality or decimating, so I like to recommend alternatives *shrug
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.
When the concept of your avatar is already so 😎 it doesn't really matter
Or hot. Big booba. You must choose. Combine cool and hot and you are unstoppable
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
For decimating, https://youtu.be/8MkgXcidxg4?t=187. Don't know about exporting.
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.
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
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.
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
My avatar was at 72 mb
I got it down to 62 mb
I need it at 10 mb. Is that even possible
Reducing texture resolution and compressing them, or just removing the textures that are barely noticeable
And removing big animations too
It's possible, but it depends what was on it to begin with
I removed almost all emotes and every texture is low detail
You should try user 1's world toolkit addon to get a breakdown of all the pieces of your avatar
Is that like a download or something? I’m new to this so i don’t know all the stuff
Yeah, give this unity package a try
https://github.com/oneVR/VRWorldToolkit/releases/download/V2.1.5/VRWorldToolkit_VCC_V2.1.5.unitypackage
Thank you so much
Did you manage ? Let me know if you need help!
is that for worlds or will it work on avatars?
not yet i went away from my pc for a little bit
Will still work for avatars, you just have to click the build & test button if I remember correcty
Thank you. I’ll try it
Do I need to manually sync VRCEmote, VRCFaceBlendH and VRCFaceBlendV or are they synced by VRC?
It is not stated in the https://creators.vrchat.com/avatars/animator-parameters/#avatar-scaling-parameters page, where those parameters are introduced.
This document is written with the assumption that you know a bit about Unity Animators.
Also if ScaleFactor/ScaleFactorInverse is ro, how are we supposed to switch to the new scaling system, before GoGoLoco Scaling and similar break?
Those need to manually be synced. They're example parameters given to you by default, but aren't part of another system that would need to be synced anyway.
So If I don't modify those, I can unsync them?
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.
Also, I'm afraid I don't understand this question,
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.
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.
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
They added scaling at the start of this week.
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.
Okay, then I'm on outdated information. Thank you then.
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.
I personally like thry's vram calculator, though it only checks mesh and texture filesize
https://github.com/Thryrallo/VRC-Avatar-Performance-Tools
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
It honestly is a matter of trade-offs and really depends on the model, both it's starting state and where you want to end up.
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.
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.
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.
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.
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
Regarding blendshape performance:
https://gist.github.com/d4rkc0d3r/f77c1e96d4aeefd0d1eaf13fb096a2de
Regarding performance of various other things:
https://notes.sleightly.dev/benchmarks/
Using alpha as a toggle method isn't the best due to the fact that rendering multiple layers of transparency overtop each other can get expensive fast. Iirc this is called overdraw and is recognised as something you should try to avoid in game dev. This is particularly bad for mobile GPU's and is one of the reasons transparency isn't allowed on quest.
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.
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.
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
its not... too unoptimized
nevermind i pulled it off with 2 lol
i think its what... 8? before it drops to "good"? or "medium"
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 ?
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.
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.
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.
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.
is it crunched?
though I don't think that would affect Thry
Tried it with and without, no real change in file size according to the SDK
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 😭
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.
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
Oh yeahhh I forgot i download that. So sorry. My goldfish brain isn’t working today
Thank you
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
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!
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
Yeah, that avatar is bad even on PC.
Excessively so
Any tips on how I could make it better?
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
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.
A transform is a chain of game objects. To have a physbone work at all it needs a bone chain of 3 transforms, or to have endpoint (which is two transforms.)
For every bone you add after that is +1 transforms.
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.
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.
join the nardo discord and then verify your purchase, youll get more catered help there specifically for the nardo
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
you really should not use shape keys to toggle clothes.
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.
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
Which Format should I be using for normal maps?
.png? Unity/SDK will use its own compression, so .jpg/others that are already compressed will lose more quality.
My bad, I was referring to this
I noticed in some cases it reduces avatar download size like when I switch from DXT5 -> DXT1
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???
It does have an affect, and it's on the GPU. GPUs are powerful and can reasonably handle a few million polygons without struggling, but it becomes an issue when too many people have a mindset that because they can, they should.
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
interesting. thank you!
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
in 99% of cases, you should be using BC5 compression
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.
Thank you!
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.
Got any visual aid for that?
what, like this?
example of two bone chains converging on a root bone, can have single PhysBone component drive multiple chains
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.
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
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.
"Quest compatible" is a really, really broad heading. There's only two blockers to uploading an avatar for Quest, the shaders and the filesize. Beyond that, the sky's the limit. It can be as wild and unoptimized as those 600k+ polygon behemoths. It will be hidden by default on Quest, yes, but it will upload.
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.
Well poop. Only really 1 thing I can reasonably remove with Unity
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.
Hmm
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.
WHELP! Time to learn Blender then 🥲
Good luck! Keep backups!
Good thing the avatar is from a package so if things go south, I can always re-open that
How do you reduce Physbone Transform count?
TIL you can use the search bar like that! I've been wishing for a way to do that for so long
Its crazy how hidden the documentation for it is. Here's some more options: https://docs.unity3d.com/Packages/com.unity.quicksearch@2.1/manual/search-syntax.html#scene-provider
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.
uh
I understand those words
how do you set exclusions ?
That would be the Ignore Transforms in the PhysBone component's settings: https://creators.vrchat.com/avatars/avatar-dynamics/physbones/#transforms
PhysBones is a set of components that lets you add secondary motion to avatars, permitting you to add motion to things like hair, tails, ears, clothing, and more! Using these well will make your avatar seem more dynamic and real.
oh thanks, i'll take a look
10mb max hits diffrent 😢
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.
aye? why my name :D?
Blender is honestly easier than dealing with Unity. It just takes a bit of time to learn.
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
The SDK still needs to know 
the editor could easily grab that data elsewhere without needing Read/Write on
a good example being QHierarchy
It can read just fine without it :S
I'm not saying it can't be improved, just that it currently needs it 
😢
How I get past this part?
get past?
just click open project on the top right and it'll open the project
it seems you already did that though
Might be lacking a Unity Install
thought VCC basically forces you to install unity before you get to the general main screen if you don't have it installed
Posting to all avatar channels:
We've just opened up the #1139216499123437668 forum! Use this forum to make posts on specific topics and get responses in a more organized way. You can ask questions, post guides, instructions, and more!
Check out the first post here: https://discord.com/channels/189511567539306508/1139228456090087495
These channels will remain open, but we may close some less active ones over time.
thank you tup
very cool
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
The performance impact of multiple shaders is negligible compared to the material slots.
Okay good to know
eh. a Material is required for a shader. so thats outright false.
Yes. 3 different shaders would mean 3 Materials. which means 3 Draw calls in desktop mode and 6 draw calls in Vr mode.
The comparison is between 3 material slots using the same shader, vs 3 material slots using different shaders. The difference between these two options is negligible and is dwarfed by the 3 material slots in the first place.
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.
depending on how many passes each shader uses. a shader can have multiple passes, which each incur a draw call
also in VR thanks to Single pass stereo, you only incur one draw call per pass
Since when did vrc change to that? Thought you guys still used the other one.
vrc always used single pass, they will update it to single pass instanced on the future from what i know
Right. That's what I thought. Since single pass instanced cant be used with. Legacy render pipeline
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)?
yes. each Mesh adds more overhead. less is far more desireable. and you can still do glittery hair. all you need is one material that uses poiyomi and mask out the hair so it only affects that. and for the eyes. you could look into again poiyomi there is a thing in there that allows to switch between different eyes with one material.
do you not like people who make heavy unoptimized avatars to kill your performance? go upvote my post in #feature-requests
it depends what is enabled at any given time
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
someone knows why the autofix option does not appear?
It depends on the error
Not all errors have automatic fixes and require the user to actually you know
Fix it themselves?
got it
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
for PC, you did pretty good. Especially if that’s just a single material with a normal mesh and not one rigged with bones or blendshapes
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
it's not really that good of a 3d model, so it has like 10 materials, i could try to fix that though,
i'm pretty sure i have an idea for that
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
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
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
use material combiner in blender. try and max out at 4 materials typically. is what i suggest.
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?
oh i didn't know about that, i was gonna remove it from my avatar but i guess the day is saved, it it works i guess
you could make a new UV map and bake materials into one. There are tutorials for that, and also tools like SimpleBake to make it easier
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 - ...
oh nice
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
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
one of my friends litterally has just one polygone that moves when he speaks
he calls it the dorito
aw yes, someone of culture
too lazy to watch a tutorial so i found out myself, he's beautiful 💀
file>export>fbx should work
this is on pc, i hope its a bug 💀
yeea. it is lol
Poor is 32 components.
medium 16
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.
you should report that to them
i was getting scared for a second
Try restarting the project. the sdk panel is buggy sometimes and doesn't update properly, especially when switching between android/pc platforms
More materials used on avatar makes more CPU load, or they processing only on GPU side?
Both CPU and GPU.
And "skinned mech renderer" component turned off by animation means no CPU GPU load for its materials processing?
Effectively 0, yes. As the enabled flag is the first check of optimization.
Also it is actually better to disable skinned mesh renderer like that than disable the entire gameobject.
Is there a reason supporting that?
just dont add more materials then necessory. and disabling the entier object is better
Is there a way I can optimize an avatar that's already been created?
Like if I buy the files from the creator.
if you have all of the files, you can do whatever you want with them. just make sure that you're getting it from the creator, not from shady site
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.
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.
Thanks for the answer btw.
Thanks.
Source: Trust me bro in all seriousness looking for an answer to this as well I haven't been able to find any definitive information
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?
Bones with no weight will have no effect on mesh deformation when animated
that bone is for the wrist cuffs, I personally think it looks nice having those with physbones on them
also, mesh colliders are not allowed on avatars. you really shouldn't try to do a cloth simulation for the whole outfit
Unfortunate lol
have you tried doing a weight transfer from the body to do the clothing weight painting?
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
Multiple times
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
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 🥲
the body was pre-triangulated? cringe
VRoid ‼️
either way, the vroid model would still be made of quads, they're just been triangulated
Oof. Yeah, once it’s Triangulated it becomes that much more difficult to work with.
Nothing is stopping you from doing mesh colliders tho. Thats like. The main way you makes your avatar fly
avatars fly with primitive colliders, basically box colliders
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?
Are you unable to combine your meshes ?
its not about combining meshes, its about reducing amount of material-per-mesh
Do you have different materials on every single meshes ?
As in, none of the meshes share any of the same materials
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..
How many meshes do you have ?
well, about .... 40-50

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
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
Well, people can run out of video memory, but less likely to run out of FPS
Seeing what the build manager window shows you for the stats would be helpful
How are you testing your framerate for this ?
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
Are you using framerate override launch argument ?
📘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...
no, never heard of
If not then the test isn't worth much
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
you're likely not optimizing your masks well enough. many shaders allow you to channel pack masks for various things, like Poiyomi's
and in a lot of cases, the resolution of masks can be a lot lower than the main texture
lower memory useage will not give you fps. it will prevent memory to be put into system memory which is slow AF and will tank your fps and cause extreme stuttering. so keeping it as low as possible is ideal dont go over 100 mb at any case for an avatar. infact keep it around 50 ish
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
And running out of video memory does result in standalone headsets crashing
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
enable mesh read/write
(disregard everything but the pointed-to checkbox, I just found this image on Google)
forgot to ping, see above
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
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
Do you have a lot of blendshapes/shapekeys?
xD yea i just looked at them all lol. would deleting some shrink the size?
For sure. Each set of blend shapes is a new set of mesh transformations (for every vertex), so find some you don’t use and delete them first.
And how would i go about deleting these things? Thanks for the help!
Usually, you can import the model into blender, go to the mesh data tab and find the shapekeys list
This one
poly count is probably the biggest factor. blendshapes, uv maps, vertex colors, etc, all add to the file size too, but their impact depends on the poly count.
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/Stateparameter 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/InStatewhere on the animation, the 0th keyframe is the gameobject disabled, and on keyframe 1 it is enabled.
Depending on the current
UI/Stateint value I set the related pageUI/State/{CurrentState}/InStatefloat 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
Disregard all of that, I had a fundamental logic flaw
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
blender 3.6 < too new
Well first of all you should use the developer version of CATS, it can be gotten from the FAQ channel in the CATS discord.
The version on the github only works on Blender versions below 3.0, it is a mess why it is like this.
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)
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?
either way that's going to be two different draw calls so I guess the question would be whichever method uses the least amount of vram between the two
Ahh, that's what I was thinking. I wasn't sure if the same material would be the same draw call even if there were 2 meshes associated with it, but that does make sense.
Thank you!
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?
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~
downgraded the version of blender to 3.5 and installed the development version of CATS, still no use....
What file format are the texture files and try reopening all textures in blender because the material combiner needs image files to work, if Blender has lost where the textures are stored on the computer then it doesn't work.
Is there a tool that can help me identify where an avatar used a constraint. I'm trying to optimize it's cpu load.
I dont remember if it works for constraints but put "Scripts" in the unity hierarchy search box
Thank you
how many materials/textures is maximum for Quest?
4
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
Is there an object that is very, very far away, or one that is very, very large?
Is your avatar scaled the way you think it is? For comparison, the default Unity cube is 1m tall.
Are the bounds of your mesh set appropriately? Should show a square-ish shape when selected, can view and adjust here: https://cdn.discordapp.com/attachments/730948173379535022/1143965091528704122/image.png
I was never able to see the square-ish shape, which should indicate the bounds - i have no idea why - the bound params should be fine:
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.
yes
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....
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".
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
ooh that's interesting, I didn't know that
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
question where did you acquire the avatar?
private sale, person sadly gone atm ig
but i still love it, that's why i wanna optimize it
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?
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
exceptionally strange it's a .asset file then
Can't think of a good reason to do that.
i thought that might be normal, some person told me i gotta unpack it?
it's not at all normal
hmm oki, ima try to msg the creator but ig the person won't answer too soon xdd
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
that's not a tool normally used for Avatar creation
yeah that i realized after watching a tutorial abt it
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
potentially because they might have lied and ripped the avatar?
that or they dont want people changing stuff idk, seems like an odd way to go about it
rather this one, i have also checked the avatar name and everything before, couldn't find anything like it
could we see the store page to see if there's anything suspicious?
no store page, the avatar was completely gone and i had to contact the creator
very suspicious?
maybe they lost access to the files and ripped their own avi as means to get it back
really don't care as long as it's not ripped and i supported the original author
that could be the case, i asked for the avi and they said they have to fix some stuff, so that's why i paid a reasonable amount, it was a free avi before though
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
all we can do is speculate. hopefully they get back to you soon !
and we're just being overly paranoid to make sure you don't get in trouble
yeah i don't really wanna bother them, that's why i asked here, they seem like somebody who doesn't wanna bother with vr anymore ig
yeah i totally get that, i just wanna optimize it, bc i hate unoptimized avatars
so sounds like you'll need to learn to do Avatar maintenance by yourself
yeah i already optimized it
without the fbx though further steps won't be really possible
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
yeah I'm betting if you have to pull that file apart, it's going to be a bunch of work
https://docs.unity3d.com/Packages/com.unity.formats.fbx@2.0/manual/index.html I suppose you could try this
did actually try that, however it didn't seem to work properly, i'll make sure to try again - thank you!
No problem haha, I wanna learn anyways:)
and in future it might suggest your next Avatar base you work with be someone who hasn't disappeared
XD yeahhh i knew what was coming ig, they were not replying much from the beginning, but it was my first vrchat avatar ever and holds great emotional value to me 
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...
at the very least it's a pretty decent place to get parts to kit Bash from
hmm idk, i've seen a bunch of vroids and watched videos about vroid avatars, really never liked them and would love to dive into unity&blender more
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
Requirement: Set up the SDK first!
https://creators.vrchat.com/avatars/avatar-performance-ranking-system/ this ones also useful for optimization so you know what your limits are
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.
Does that mean it would probably be possible to transfer a VRchat avatar(ethically) to unreal engine? I’m learning unreal engine and I find VRchat artists make the coolest models.
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
i mean yeah, in the end avatars are just 3d models, which you can definitely put into unreal
depending on what you wanna do with it you might have to fiddle w the armature i imagine but dont quote me on that
Greater 0.4 Less 0.5 as the 2 conditions of a transition would be any value between 0.4-0.5
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?
The only differences will be in in the different UI and that you don't really have to care about blendshapes above 0 costing as much performance.
No, everything transfers over seamlessly.
don't upgrade your unity project, the sdk update will come later ^_^ you don'tahve to touch anything as mack said
upgrade once they tell you to. which wont happen for a while
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?
they said very soon in the blog post. I already downloaded the 2022 version they're using, to prepare
that's not going to make any difference
that setting is more there for when you want to squish textures to be smaller resolution then the source files
you can also set those settings per platform so for like the quest to build something you can make it more lower resolution
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
as in what optimization rank? https://creators.vrchat.com/avatars/avatar-performance-ranking-system/#quest-limits heres the limits for quest
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.
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
Im going for med with around 64K ish polys :3
on quest? that wont be possible
maybe poor i guess
and very poor isn't allowed on android
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
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.
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
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
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)
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
Most comprehensive benchmark of animator performance I know of (in relation to VRChat)
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
reduce resolution
Non-Destructive Tools for VRChat Avatars
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 😊
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?
for real world performance, definitely mesh toggles, especially if the meshes already use different materials
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
If each sub mesh has a different material it's better to do toggles
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
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
^ you'd need more than just one bone scaled to 0
which would end up probably being worse
I understand, thank you very much!
with the new unity upgrade coming sooner then later. it no longer really matters to much. with blendshapes
I wouldn't say that
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
eh still has a huge effect on it.
In terms of optimizing avis:
- use Direct Blend Trees
- have as little animator controller layers as possible
- keep transition amounts reasonable
What else?
honestly vrchat should add in a way to show what object is enabled and disabled. so you have two different counts
Lowest possible materials. dont go crazy.
Materials itself or Material Slots?
i typically recommend 4 materials top
hahaha
eh Materials and Material slots go hand in hand
not an option for me sadly
why not?
I have like 6-7 different materials that I wanna be able to toggle between
you can use UV discard for that
UV discard?
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
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
it's just that animating material swaps is annoying
material swaps are easy?
thats not exactly what i said but okay lol. i said Materials and material slots go hand in hand
you cant have a material without a material slot.
I wouldn't say that's an accurate statement but you do you
you can have 6-7 materials that share a material slot
as soon as you change whats inside a slot even if its the same texture it will load another.
load another what exactly?
material.
if you change a material you change a material
is that what you are saying?
because materials and texures are two different things
if you change a material to another material you need to rerender it.
even if it has the same texture inside.
yes, but I'm not asking about optimizations when toggling stuff
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
I'm asking about improvements I can do whenever my avi is there.
less materials is what i said C0D3
it would help to know more about what you're actually trying to optimize
Like If I have an avi that has 800 layers it is going to tank perf.
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
Draw calls and Animation layers are the two biggest offenders. mostly.
you can certainly optimize your Poiyomi materials. reducing vram usage can help quite a bit
you can through. if you have 8 materials slots. you can reduce that 100%.
Yeah vram is another toppic for me
depends are all your textures 4k?
I have 24 materal slots
jeez.
in general you shouldn't use 4k textures or higher
that should be reduced to much lower numbers
unless you're atlasing a lot of stuff
You cannot have a material on an object without a material slot, right?
you can do a lot with a 2k texture
you cant
for something to be rendered on your screen, it needs to have a material
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
and for something to have a material it needs a material slot, right?
I have 17 skinned mesh renderers and 24 material slots. so yeah
Nope, how
I have 3 different horn meshes I can toggle between
would allow 60 Toggles.
those 24 materials you got. are they all 4k?
@marsh bison here https://www.poiyomi.com/special-fx/uv-tile-discard this is what i am talking about
UV Tile Discard (previously known as UDIM Discard) provides an efficient way to toggle portions of a model on and off at runtime. This is done by placing portions of the model on different UV Tiles, and then discarding specific tiles at runtime.
allows you to toggle combined textures in a mesh
so how do I make 3 differnt horn meshes render in 1 skinned mesh renderer
is that doable with uv discard?
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
Can I make 5+ differnet meshes render in 1 skinned mesh renderer?
because there is the limit of 4 UV Maps iirc
you can make as many as you want in one skinned mesh
as long as you have more materials
Each material with poiyomi supports 16 Toggles
Can each material be toggled independently from each other?
yep
everything you want to not show. can be disabled
or enabled
it all depends on the UV you setup
i assume you mean what you need to od?
How about mixing different material settings in a single uv discard?
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
Yes, plus how it works.
I am technically inclined and have written a c++ programm with a vertex and fragment shader
eh. different material settings is abit more on the it wont most likely since whatever change you make affects everything in that material
so I do know how stuff works a little
but that said you could most likely have multiple UV's for it
but it depends on what your requirements are.
"do things like discard the mesh in certain tiles" can I control what parts of my mesh gets discarded?
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
yes. Poi's UV Tile discard allows you to use up to 16 UV tiles (4x4 grid), and discard the mesh in each one individually
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
indeed
won't that require me to have larger textures, because I now need to make my textures fill the whole 4x4 grid?
So I am still locked to a single texture
no
huh?
okay so
it's still like one material. this isn't the same as UDIMs
dunno what UDIMs are
Uv discard.
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
or well no
no, UDIMs have nothing to do with UV Discard
well for UV discard to work well you need to do atlas regardless otherwise the point of it is defeated.
let's put it this way instead
right now those 3 different horn meshes have the same mats, so I don't think I'll need atlasing
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
then this makes it even simpler, because all you need to do is shift the UVs for the second set of horns by one tile over, and two tiles over for the third set
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
idk. I like to have options
also my avi is over the tri limit anyways, so it is very poor anyways.
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
eh. I already have people complaining cause of Kanna Protect and overlay shaders
what kind of overlay shaders?
but yea check out the link i sent. it should tell you how UV discard works
water commonly breaks, and also some of the lighing in the club oreon if you look in the mirror.
are you saying you have shaders on your avatar that overlay over other peoples views?
That is something to complain for yes
You could make these ovelay shaders local using the IsLocal parameter
and should
Ye
Kanna protect works by shuffling the mesh. It then unencrypts the mesh in the shader using avatar parameters.
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
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
But I guess I'll look into UV discard next
should allow me to get rid of like 2-4 Skinned mesh renderers
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
Ah thanks. I was also wanting to UV Discard some nsfw boobs...
cause the mesh is different this way, and the base came this way.
the base was started in poi 7.3 times
sooooo no uv discard back then
sooo just use different meshes for everything
Need help with physbones and stuff😅 trying to port this avatar to quest but physbones are apparently the major issue
Like too many physbones/bones affected by physbones?
I use a 4k... key word "a", for an avi that's poor due to material slots
but I guess you covered that with "unless you're atlassing a lot of stuff"
precisely lol
(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)
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
ok saving that to my scratchpad thanks
Personally, I would just duplicate the Head bone, parent the dupe to the original, and then make the dupe the Root bone.
you will get the same thing either way, and extruding from the head means you skip the step of needing to parent the duplicated head bone to the head bone
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
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.
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.
Tuxedo can do this pretty well
apparently the Simplebake addon can too
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.
I'll check out simplebake, it may be what I'm looking for.
you can unparent the meshes for what you don't want to bake
it can absolutely do what you want, but it's a little less straightforward
that'd take splitting the mesh along uv seams into different objects and rejoining, then merging by distance. I try to avoid the latter if I can in case I have overlapping parts.
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!
What I want ideally is "everything in one atlas, but keep the meshes separated, and combine materials specifically to my liking"
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)
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
In what way?
Just be wary of any comissions if you're offered any. Go to VRCTraders in #community-servers-old. Just saying
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.
This tool will show you the hot spots on your avatar, and what is talking up the most amount of space:
https://github.com/Thryrallo/VRC-Avatar-Performance-Tools
Oh, nice! How do I access it after importing? I can't find anything on that top bar, or in any sub-menues within it.
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
Lots of blend shapes or vertices can contribute to the file size of a avatar mesh
There is a Mesh Compression setting in the FBX settings. Setting it to Medium or even Low may reduce filesize of it
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.
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?
you just described encrpytion
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
if it were possible, big cinema would have done it by now.
this funny button may eat important edge loops and cause strange deformations
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?
no ripping doesnt require mods at all
you can do it without ever having to install the game
How would they get the code then?
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.
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?
pretty much
Kanna protecc is useless if you know the current avatar parameters of the other person.
also this
those systems can easily be cracked in matters of days at most, vrchat wouldn't want to make those kinds of easy systems
Which is hard on pc, but not impossible.
actually pretty easy
yet they implement easy anti cheat, one of the most notorious for being bypassed but hey who’s counting
I wouldn't know how to inject into EAC, but I know such things exist
dont have to
Kanna has yet to be cracked
as there's not much of a market to cracking it as not many avatars use it
:3
How would you modify the game without loading a dll or injecting something similar?
dont have to modify
other ways exist just less known
I guess you could get the avatar parameters of a remote avatar by literally proxying the vrc traffic I guess
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
I think I understand now
also with kanna protect and dexprotect, its only a matter of time
literally every anticheat ever
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
BattlEys is also not perfect, seeing as cheats exist for Destiny 2
Fair point. At the time it was brand new it felt too good to be true, but people always find a way you’re totally right
atleast it aint battle eye
i love injecting unsigned code into kernel space
Aren't you confusing that with Vanguard?
both
ah okay
battle eye injects unsigned code into ring 0
if battle eye can do that, why can't hackers?
they can
you can use battleeye against itself to inject your own code
lol
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
fun
there is a reason why people don't inhouse make anticheat and prefer to use freely available anticheat, and that is the exact reason
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.
yes
encrpytion is pointless in this usecase
encrpytion has its purpose and this isnt it
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....
if you want full access to Vram just use GPU passthrough in a virtual machine with a modified kernel
you dont even need the modified kernel for that part
hah, far too complex. Just inject a dll to hook all the graphic api calls lol
would have to be a signed dll or else it would piss off EAC
Don't eac injectors exist?
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
hell, just make an injector that hides the dll via kernel level struct modification. There are some gnarly technices people could use...
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
you can do that without modifying the kernel iirc
i love Xinput.dll failing signature check
didn't read fully, but I think this is what I was referencing: https://memn0ps.github.io/rusty-windows-kernel-rootkit/
Introduction This post will go through some of the basic rootkit techniques, using one of the first publicly available rootkits made in Rust as a proof of concept https://github.com/memN0ps/rootkit-rs/. Many anti-cheats and EDRs are utilizing Windows kernel drivers using rootkit-like techniques to detect game hackers or adversaries. However, thi...
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.
you can write self signed drivers but eac will get suspious of them
I think some of VoiceMeeters or VAC's drivers are actually unsigned
that goes via trust
Trusting VRChat players to have a non botched windows install is tough
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
And I use a modified/patched NVIDIA driver
and eac just accepts that
Edit: Just to clarify, I used NVCleanstall to do that.
dont reminds me of that person yesterday that said to delete roslyn compiler xd
delete system32, it contains spyware Kappa
remove conhost.exe its used by hackers to make terminal pop up :3
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? 😭
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
You need the dev version, it is in the CATS discord in their FAQ channel near the top (doesn't take more than a second to scroll)
Thank you so much!
Release cats will work with blender 2.93 LTS
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
it works on almost all versions if you just use the Dev version from the discord
what are the minimum stats for a fallback?
Good (or above) on each platform https://creators.vrchat.com/avatars/avatar-performance-ranking-system/
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.
You need to upload for both PC and Quest for it to be allowed to be a fallback.
nice thank youuuu
That feeling when
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?
i dont think disabling things make it stop exsisting
it still count towards whole avatar
I don't mean the performance ranking obviously, I do expect it to be affected. I'm just talking about FPS
VRC is not compute-bound, its resource bound
Yes, disabling game objects will make them be skipped during draw calls. But everything has to be loaded into vram, even if it's enabled or not. As such putting too much load onto your vram will make your frames drop. Once the vram starts paging out to ram, your fps will often drop by about 30%.
now show your FX animator 😈
FX layers would be a big part of it yeah. You can always profile your avatar in the editor to see which parts have the worst performance.
And like catboy said, things like mesh vram, texture vram, and blend shapes on the main avi count towards it too.
Yeah, blend shapes are trash for fps.
My VRAM is nowhere near being full, we're talking about a single avatar here, which Thry's tools report 'only' 150Mb of VRAM for the whole thing (and 39Mb active). So I don't really believe that's an issue...
Its all active always active
but yeah, do you have always active blend shapes?
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
What counts as active blenshapes? I have a like 5 which I set in animation if that's what you're asking
Any blendshape that is not 0
Oh, well, then I got a lot more
So like if you set a blendshape to 60% because you like how it looks, it's always on
That would good amount
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
Never used this profiler thingy, don't even know what it is, I'll look into that, thanks a lot for the infos
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.
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
Oh wow, yeah, indeed sounds pretty taxing
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.
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
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...
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
So, after running the profiler, 2/3 of rendering time is from "Garbage Collector" (whatever this is) and Scripts
GC is the thing to make sure unity dose not randomly run itself into the ground.
Thats normal
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
Animator.Update sits at 0.54ms
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
Oh right, didn't see the other one.
The other is at 0.76ms
yeah, I'd probably start there since it's the easiest
I don't have a good concise video on converting blend trees, but this should help, assuming most of them are basic toggles or toggles with int state.
Though the whole rendering takes around 11ms average, so there might be something else too
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.
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
Nothing 😈
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"
wait literally nothing? lol that's perfect
Well, nothing besides the default VRC animations
However I noticed it was very poor rating on quest lmfao
So I brought it into Cats to decimate the mesh a bit
oh nice.
Woah, such a good and concise tutorial, will definitely be useful, thanks a lot!
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.
how many physbones do you have?
components, total transforms, collision checks
Too many. 241 total (most of which are disabled until relevant object is activated). Thought it would be fine if they were disabled, seems not
what are you disabling? the physbone components or the gameobjects
I tried both and got the same result
disabling the Physbone components via the checkbox should in theory stop them from executing
if not it's likely a bug
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
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?
I have been hesitant to share that tutorial, not because it isn't good, but because I think it's a bit daunting for people not familiar. It's not as condensed and concise as I think it could be.
You can add the physbone script to the animation that gets disabled. You can also just put the physbone script on the game object that gets disabled.
Though honestly, physbones are incredibly performant. I think it is good to disable them if it's easy, but I wouldn't worry too much about it if your profiler isn't saying they are taking long.
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).
It's a step by step guide with pictures. Tbh I'm not sure how much more easier you can get to understand.
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
That'd be from this article: https://notes.sleightly.dev/benchmarks/
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?
Holy Christ Batman you need a texture atlas
consider using the material combiner plugin in blender which combines them into an atlas texture
Why
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 💀
Haha
No kidding lmfao
The horror the avatar would be on quest
@errant flint consider watching this entirely.
yeah quest users would instantly crash and get pissed at them too.
no need for your 115 8K textures.
💀
Yeah but will quality be less?
I mean, most very poor avatars do that anyway.
Or how that work
(especially when there is no difference between 8k and 4k)
Maybe I can have 1 avtar with very poor quality(high quality) and other optimized?
For meeting more people...
Yeah there would be less quality, but that's the key to optimization.
Yeah and what if you forget to switch them? 💀
I see, haha
Also vrchat evolves and as gpu’s age so does their speed decrease
I litteraly told the guy who made my avtar. "I have a 4090, and i want high quality avatar, so don't optimze it" 😶
Because age destroys things.
Good thing imposters are coming out soon...
😦
yeah
I have the same number of materials and only takes around 150Mb of VRAM total (from Thry's tools, in-game it's considered as 80 for whatever reason). If the textures are somewhat compressed, I don't think the VRAM will be the limiting factor here
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?
imposters so that way we can blow out his 4090 FASTER
