#avatar-optimization
1 messages · Page 7 of 1
I feel like if I put this on a commercial avatar people would freak out at me. It looks really cool too and I’ve seen what it can do for animator performance.
Maybe I can make one of these that the prefabs use as default but give a copy of the standard version too. Or maybe I just need to learn more about it so I can teach people how to use/modify this sort of setup
The models sit at about 80-100 layers right now, the Animator.Update is a few ms just for the fx
On what I have shown above it's 0.44-0.46ms.
when I join meshes with the hoodie the hoodie's UV resets and turns white, the only fix I have for it right now is to keep it seperated, how do I join the meshes without the UV resetting pls?
it doesn't reset, that's because your uv map's name on the hoodie mismatches the one on the other object, make sure their uvs have the same name
Where do I check the UV map's name?
Perfect tysm!
yw yw
spent an hour yesterday troubleshooting a direct blendtree setup I was making only to realize that the animations in the blend tree apply additively so a couple of the layers I was moving into the blend tree just won't work since they make use of layer weights and the override blending.
you have to use vrchat mobile shaders to even be able to upload on Quest
This page will describe various limits in place for the Oculus Quest version of VRChat. These limitations are in place in the interest of performance, user safety, and discouraging malicious behavior. Find more information about limited components on our Quest Content Optimization page. Although the...
your stats screen literally shows you using the standard Shader somewhere
there's a hard limit on physics bones
and it looks like that Avatar would perform terribly even on PC
your polygon count is in 6 digits
do you have any suggestion on how i could decompress that
Did this video help you? Consider sending me a tip on Ko-fi! https://ko-fi.com/sippbox
Making optimized Quest models is hard. But it doesn't have to be! With recently updated polygon limits and fallback avatars, it's a better time than ever to create something that represents you to Quest users! Hopefully this tutorial will help you out!
0:00 ...
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 - ...
I was optimizing my avatar in blender by using the edge looping method. How would I resolve this and my normal maps no longer work ether
You dissolved a seam. Easiest to not but if you gotta; check the UV map, remake some seams, pin the good bits, and with the entire uv island selected unwrap it again. Feel free to move the corrupted uv bits off to the side. They will go back but where they should on the unwrap.
in general when you're dissolving Edge loop you don't want to dissolve uv seams
Could someone DM me and help me optimize my avatar for quest?
Did this video help you? Consider sending me a tip on Ko-fi! https://ko-fi.com/sippbox
Making optimized Quest models is hard. But it doesn't have to be! With recently updated polygon limits and fallback avatars, it's a better time than ever to create something that represents you to Quest users! Hopefully this tutorial will help you out!
0:00 ...
I added cloning and look at these stats lmao. I need to optimize ut, but all I can do is blender decimating. right now this avatar is so bad it takes like 10 fps off all my friends except for the one that has a 3090. the texture memory doubles when the clone is active btw
I might need to pay someone to optimize it I think
I know Tupper mentioned that Any State causes significant animator lag. I think he mentioned that one giant Blend Tree is a lot more performant? Is there a guide on how to do this?
then perhaps don't have a feature where you duplicate your avatar
@velvet crow There isn't any "Real" documentation or guides on how to do it as Direct BlendTrees and their associated tech is still all rather unknown, but its being worked on. What Asovrix posted here is a pretty decent how to however.
Well I say unknown, it is known but they have a few quirks is all.
If you run into any issues feel free to ping me, I've got some experience with making/using them.
Never even understood why any states were popular. just takes more time to set up than a regular entry>off><On state
Its how its set up in the example fx controllers
oh, makes sense then suppose. I watched sippbox tutorial on how to make it instead so went with that concept
I’ve heard, and seen in some testing, that layers are considerably worse than AnyState transitions. Something to the degree of hundreds of AnyState transitions is comparable to 1 layer.
Doing both is best yes but unless you have hundreds of AnyState transitions reducing layers seems like the first priority.
This can also be helpful for those that already don’t use AnyState in their animators. If you’re still using 100 layers in your Fx, now is a good time to look into Direct Blendtrees.
So if I'm trying to set up the fancy direct blend tree to combine a bunch of layers, does this float need to be synced?:
"You need to create a float parameter that will always be 1 and be used as sort of a layer weight."
Or can I set its default value to 1.0 in the fx controller, put that on the main/first blend tree, and that will work ok?
(Does doing this setup cost me 8 parameter memory?)
No, as it’s never animated or changing you don’t need to sync it.
It can stay as just a local param
cool, i wasnt sure if vrchat actually respected default values set in animation controllers (dont think i've ever tried it)
There are three defaults you gotta worry about; the setup in scene, the defaults in the animator, and the defaults in the parameters list
Im not sure what the "setup in the scene" is, can you explain that one?
or is this not related to paramters?
there is an avatar in scene used for upload
do you mean the default state of all the objects in the scene and their components etc etc
yis
ah gotcha, yep
I have never used blend trees before, so im trying to figure out how to replicate some basic conditions xD
The state in the scene is shown when the avatar loads in and animations are disabled in safety
Is it simple to explain how to do this using this direct blend tree method? (if i can wrap my head around this i think ill be good to do all the things):
If Hoodie_Off = True, Play Hoodie_Off animation
If LeftSleevePulledUp = true AND Hoodie_Off = True, Do Nothing
If LeftSleevePulledUp = true AND Hoodie_Off = False, Play "PullSleeveUp" animation
I am not sure how to achieve this "and" logic
Plus it’s the default state when using WD on
can mostly ignore teh first one, its the bottom two regarding the sleeve that im unsure about
(the idea is that you never try to play the sleeve animation if the hoodie is currently off)
You can embed the sleeve logic in the Hoodie on motion state.
Just an educated guess
I understand conceptually what you mean, but not sure how that translates to the setup i need to do with these blend trees
So you’d have 3, a hoodie off, hoodie on with sleeve off and a hoodie on with sleeve on
First blendtree is the hoodie tree with Hoodie off and the Sleeves blendtree as its motions
Do all of these need to have the type as "Direct"?
And the sleeves blendtree has the sleeves anima in it.
I would imagine so. I haven’t done this I just have worked with blendtrees with other things.
I can’t really show it as I wonder about a department store in a foreign country.
I appreciate the advice, I'll see if I can do it
Yeah just play with it, see what works
So I have the main Blend tree, and it has one motion that goes to the "Hoodie Off" blend tree, using "Hoodie_Off" Parameter. This is my first hurdle. I want it to get into this blend tree basically only when Hoodie_Off is false, but a value of 0 will mean it doesnt go there..
I'll try using the dummy "always on" float to just make it always go down that parth and see if that breaks anything
You can set the values the motions will require. So you can set the off animation to need a value of 1 and the other motion a value of 0
I think the setting on the blendtree is something like “auto set values”
that sounds exactly like what i need, but im struggling to find it
If i change them from Direct Blend trees to "1D" I get some more fields and a "Automate Threshholds" which i can untick, perhaps its this
I might try and hope this technique doesnt require every blend tree involved to be a direct one
I’m ngl, if you tossed this into the vrlabs support or text support section you’d probs get some good help. I saw this in there months ago at this point. Plus the people there are just unity/problem solving smart.
Though the finding being in here will help other people aiming to learn the same thing.
Through trial-and-error I figured it out and learned some basics about blend trees, huzzah!
having the sub-blend trees be 1d or direct did not seem to matter
(I ended up using a mix of both, with the 1D trees to allow me to branch conditionally, and direct ones at the ends to let me play an animation while also having a custom name show on the state (rather than whatever-the-animation-name-is)
it ended up looking like this:
Now I need to go and edit all the other layers that did things related to these bool parameters that are not directly related to having the clothing on/off... annnd then go and build in logic for all the other toggles I have. Exciting optimization time ahead
Sorry to reply to a message so old like this. I want to know what is generally a good import settings for avatar textures.
The only tutorials I could find specifically about VRChat is this one: https://github.com/absolute-quantum/cats-blender-plugin/wiki/Bake. You and the tutorial all mentioned "texture filtering", which I suppose has something to do with "Filter Mode" and "Aniso Level". But it is so confusing to decide what number should I set especially for "Aniso Level". The tutorial tell me to set it to x8 or x16 for desktop, but when I change it to a number over 1, it says the aniso filtering is already enabled through quality settings. I try to understand what it means, and find this post:https://forum.unity.com/threads/anisotropic-textures-settings-in-quality-settings.463683/. It confuses me more..
Anyway, what should be a generally good import settings? Here is my settings so far. Would be really grateful if you can give a look.
:smiley_cat: A tool designed to shorten steps needed to import and optimize models into VRChat. Compatible models are: MMD, XNALara, Mixamo, DAZ/Poser, Blender Rigify, Sims 2, Motion Builder, 3DS M...
That's a strange way to do that. What we usually do is not having motions coming out of root direct blend tree.
If you want a basic toggle, you just add a 1D blend tree, assign a parameter to it and add off and on animations to it. Having a direct blend tree under your root blend tree is usually used only if you want to categorize your stuff.
I was really just trying random stuff until I figured out how blend trees even worked :p
Do you know if the way I've done it will still be as performant as the way you suggest?
(what ive done makes sense and is easy to follow for me, so if its effectively the same im happy to leave it)
Performant probably yes, but I am not too sure if it will sync properly if you only have animation changing something from default (let's say OFF) to a different value (ON), but not anything changing it back to default anywhere in your entire animator.
Do write defaults function differently from within blend trees?
having to do double the work as if i have WD off is going to be much more of a pain, if thats truly what i may need to do 😦
(will have to make brand new "off" animations for everything)
From my testing, blending between scene/default state and animated state is not reliable. Let's say I only have an animation for a shapekey to be 100, while scene default is 0. Activating the animation works fine, but blending it off doesn't always reliably set the shapekey back to 0.
hmm ok. Thanks unfortunate but what must be done must be done!
So this would be the way to set up a basic on/off toggle, right?
Root Direct Blend tree > 1D Blend tree
Then in that 1D Blend tree, I'd add set the parameter to the float "bool" for the toggle, and add 2 motions. Then put the animation I want when the param is "0" in the first motion slot, and the animation for when the param is "1" in the 2nd motion slot,
Would that be right?
(so basically first animation is toggling the thing off, 2nd is toggling the thing on - so there is no reliance on write defaults to keep the thing off)
Heres a bonus question - can I run an animation using a float for its Motion Time, or do I need to keep animations like that on their own layer?
eg. I have OSC send a 2 floats representing the time in hours and mins. I currently have two separate layers running two animations with the minute or hour floats as the motion time, controlling an animation thats spinning hands on a clock.
I've not been able to find a place to specify the motion time while working within this forest of blend trees.
You can simply split animations by keyframes into separate animations and simply blend between them. If curves in animations are linear, they will translate perfectly in a blend tree.
Yeah.
ahh ok. I'll see if I can play around and get that working. Thanks!
does the sdk remove unused blendshapes?
no
That would be a cool feature if it scan all animations from all controllers, then trim any un-animated blend shapes that are left at a default state of 0 on upload.
Fummy enough VRM does remove all unused blendshapes if u tick one checkbox but that is not VRChat SDK xD
@dense olive You can ignore the "is already enabled in quality settings" message, it doesn't apply when things are loaded in VRC
Besides that, I would say the defaults are fine. Kaiser filtering can be useful for some things but I don't think it's something you really need to adjust beyond, say, setting compression to high quality
Thanks for your reply! Should I set it to x8 or x16?
About how about textures for quest?
that setting is overridden by the person who loads your avatar is what hes saying
Oh, thank you!
So basically just change filter mode to trilinear and compression quality to high?
so, am I right in saying that having Write Defaults off in all of the animator nodes in your avatar means it'll have better performance?
eeeh, don't think so.
Write Defaults on vs off is more of a principle thing.
Write Defaults is more susceptible to breaking when the game restarts the animator, it's the whole reason avatar distance hiding doesn't disable the animator now, they did it at first but avatars using WD On were breaking left and right.
WD On can be used in a safer manner, if you use reset animations and such, but people tend not to do that.
WD Off forces you to do it, and makes what I call "setup" animations easier to handle.
Instead of branching the entire tree or making another layer on your animator, you can pass through a state setting all the settings (toggle gameobjects, etc), then have a single tree doing all the stuff the WD On branches would have in common.
interesting
so I should try my best to try and have write defaults off then
but it's ok to use it sometimes if I'm smart about it
ok, makes sense, thanks!
write defaults is an all or nothing thing, cant mix them or the write default on layers will grab random defaults from the wd off layers
*Unless its a direct blendtree, then you can set them as WD on and they just work
Thought I'd mention this since they have been discussed recently in this channel
I shall test if this behavior is.. place your toggle layer at the top or bottom dependent
It.. shouldn't be.
i cant find any evidence that blend trees are even write defaults compatible bleh
Yeah uh, the source on this is dude trust me
But from everyone I know there hasn't been any reproducible issues with having a WD on Direct Blendtree and WD off rest of controller
Im still stuck on any advantage wd on would give, on or off still seems like I have to make both on/off animations to have it function
WD on just work
WD off are the biggest pain in the ass to get working
You have to follow a lot of very specific steps.
This is direct blendtrees I am talking about however
Not just your regular states
me dum, cant get it to work with only an on state WD on
oh my.. It seems WD on for a single blend tree with many many states is for a whole nother reason entirely. Gotta be on for sure
WD on with the direct blend tree method worked for me like you expect (not having to waste time making "reverse " animations). However apparently it -can- desync so I've just been treating direct blend trees as if they are WD off. (Which is inconvenient, but meh)
i need someone to help me recolour a model ( preferably u do it ) so it can be quest compatible. the problem, the colouring of the skin. i can make the avi quest compatible and it looks great on pc but it looks bad on quest. im kinda looking to either not pay or pay only a little bit. i dont mind paying but all i really need help with is colouring. can someone help pls?
your issue with it not looking great on Quest might just be the shader.
Quest only allows a few whitelisted shaders to guarantee good shader performance. (important for the mobile GPU)
If you want a more toony look, there's a toon shader under VRChat -> Mobile in the shader dropdown of your materials.
Or try disabling normals on your model if you need something like emission too
At the cost of needing specular highlights to be diaabled and directional lights might appear weird
But in case you only need a main texture then yes, use toon lit as swingly said
I find it weird that my avatar is still ranked as poor even though there are only 3 stats are colored red and not even exceed the max numbers. Other stats are mostly green and some are gray (gray stats are actually just related to D.bones).
The overall performance is calculated as the maximum, not average, exceeding the max values result on a more intense red color meaning that your avatar is too heavy. Even if all stats are green, if there's ony one red, your overall performamce will be red
Thanks for the informative answer. I kinda wish stat system has some sort of weight management and each stat has weight. So that we can manage the available weight between stats to fit into a target rank.
But that idea needs balancing so thats kinda takes time to do i guess
It would be a good idea, but first they'd need to make sure no exploits are possible and that it's balanced enough, at least that's what i'd do
There's already spoofers, so it'd make no difference if VCC got them. build and upload is funky to. got a quest avi that's 10.4mb too big? hit that upload button another time. eventually randomly it'll be 9.99.
However, Poor rating is actually the mark to aim for. anything less is barely achievable if you want toggles, clothes, fun things.
the sdk will even punish you for optimizing.
docs say, to split the body mesh into two if it's above 32k polys so the head's blendshapes need to calculate less. thats one more mesh that will count
Using bones weight painted to an item toggle, or even clothes (to scale them instead to hide, rather than using another skinned mesh renderer), you'll easily exceed the 400 bones minumum.
Particle systems limited to 1 particle? sdk detects but still dislikes any high amount of the component. audio sources can't be changed live so you need multiple, but sdk doesn't account for how many will be on at any given time. same for meshes (turning off a mesh disables rendering of the polys, but sdk counts max polys possible, not max amount of polys that can be on at any given time).
If vrchat made a calculative system instead (120k poly is okay, if it has one material, one mesh, 1k resolution, bare minimum bones, etc.) and it came out as good?
the system had probably backfired in some way. Like, now you can really squeeze into that poor limit, and use so much unoptimized things so it deserves to be very poor. you can fill out the rating limits, ton of particle systems, high poly count, multiple skinned mesh renderers and ordinary renders, etc.
A calculative system had most likely been more restrictive.
"sure, you can use 4 particle systems and avoid VeryPoor." *adds 400 bones "oh oh, now you can only use 2 particle systems :p"
and accepting it as is is a necessary evil.
The thing we're all hoping in is a custom rating after VeryPoor so we can set it up after our own PC's limits
However, Poor rating is actually the mark to aim for. anything less is barely achievable if you want toggles, clothes, fun things.
I'm using a medium avatar with dozens of clothes and some toggles with 78 mb of texture memory. I think people need to adjust their expectations.
The thing we're all hoping in is a custom rating after VeryPoor so we can set it up after our own PC's limits
I'm hoping for a system that allows me to block avatars based on each stat, rather than global "very poor". For example, if someone is otherwise medium/good besides materials or 71,000 polys, they shouldn't be blocked by me
Does anyone know if hidden objects with polygons actually affect performance along with mat slots?
I know they are still in vram but do they actually affect framerate as they are hidden and not rendered?
if deactivated it won't do anything, it will be removed from the rasterizer's vertex buffer, if you mean hidden as with a transparent shader then no
Can someone teach me how to AO map properly?
I've never done AO mapping before and I'd like genuine like, support over a VC so that I can make my avatar look nicer.
Not that im complaining about how much texture memory I thought I'd be using vs what VRC reads in game, but can anyone explain why the estimation in the thry calculator is so much larger?
maybe thry calculates the overall vram, the avatar stats only shows the uncompressed texture memory
This makes sense. Thank you. ❤️
I also probably can't read and if i could I would have seen it specify all active objects lol.
Does it make sense to separate props into (standard) meshes, if the body mesh has a lot of polygons and shape keys? (Each prop is currently being toggled by a blendshape)
Yes. the docs recommend that every mesh that has blendshapes be split into its own if it exceeds 32k polys. but if you really want to optimize, you should instead duplicate the wrist bone and parent the dup to it, then give the dup wrist bone full weight paint of the prop. that way, you can instead use the bone to scale it to 0/1.
question i want to optimise an avatar (35MB assets only) I watched all the youtube videos but i wanted to ask. could i delete vertices one by one (ones that i deicde arent needed) will that help optimise the avatar for quest (10MB and yes i will be deleting faces, converting the quads to squares and etc. i will also be deleting some meshes)
does anyone recommend a method to optimize. this is my first time and i am willing to do long manually ways or quick ones
The biggest things on avatars by far are textures; size and number.
If you can decrease the textures max size a couple steps it’ll drop quickly.
the assets by itself are 35 MB
0 textures on it
Might need to use less assets then.
What is contributing to this 35. Break it down for me
oh no 0-0
4 different hairs, 4 different bangs, 3 jackets, 2 turtlenecks, 2 thigh highs, shoes, a dress, a t shirt, shorts, 2 pairs of undergarment (SFW) and body and a face
i am deleting one hair
i want to learn to optimise AS MUCH as possible to keep most of this
that is actually smart. I could make twins out of this one :DDD ayo nice idea thank you!!
But 35 mb for just that? Is that what comes up when you try to build and publish?
Where’s the 35 coming from?
35 MB is what I was told from blender when I exported it. it might have been from many meshes, i seperated all the bangs from the hair, the belts from dress and leg warmer, and turtlenecks (2 of them)
idk if there are assets that arent optimized yet.
Try just building the fbx to android and see what size it gives you because I want to say unity compresses it.
alright will give it a try in about two to three hours. taking my model (pc) to test fbt and tracking rn
If I have unused space in a texture (this is the main atlas texture for the avatar) is there any benefit to filling that space with a particular thing? Like is White better than black or "nothing" (like deleting those areas so they would theoretically show as transparent if the areas were UV-mapped nad I was to use a transparent shader, which they arnt and I'm not)
I assumed it didnt really matter (as there is no visible different) but I just had the idea that maybe there was some minor performance impact that I may as well address.
mesh, that might be a high poly model with many blendshapes. 😩
As long as it's a flat color it's fine.
What would be better is utilizing more of your texture with the atlas.
you could manually arrange a new UV map and bake to that.
This video is meant for anyone who wants to combine their textures in Blender to optimize their game objects. Although this is using a VRChat model, this technique can be applied to any game asset.
Stop by my Patreon to help grow our community of sharing knowledge with one another!
https://www.SwaMusic.com/PATREON
Chapters:
01:00 Combining mes...
The unused space is useful as developments are made and I need to combine more textures - its simpler at the moment to keep the unused spaces, but I know what you mean.
Flat colour-ahoy! (thanks)
you can easily make a Good rated avatar with 4 materials or less with alot of different clothes.
Yeah, of course. That's what I'm saying, making a decently optimized avatar isn't too hard. People just don't want to put in any work.
honestly it takes less time to make a optimized one then a non optimized.
I optimize mine in unity as well as I can, blender is learning curve and only 3 hours a day wont be enough to really sit down and try for me
The only way I need to optimize mine is making everything 1 texture and model. (currently my avatar is 15 models and 14 textures. but I really really do not wanna have to redraw the entire texture.
and then deal with unity weirdness on textures.
There exists a button in blender that will draw one UV map to another
Its in the Bake panel, diffuse with the lighting options unchecked. It will bake to the selected texture in the material nodes for each material in the object to the selected UVmap
Need to learn that so I can shrink down on the materials
these bars stack on each other, is this hyperthread?
I found these two properties taking almost 0.1ms, is that when a state is on and running animation that has GameObject ON/OFF animation without exit that state causing this?
GameObject.Activate
GameObject.Deactivate
Any tricks to optimize Animation and Constraint overhead instead of remove them?
i have multiple metals and hair materials with my model (from different assets that were added on). How could I combine them into ONE material with their UV maps still intact and exactly the same
if all the metals share the same color and such, you can just set them to the same material I suppose, but if you have textures or different colors, you can't have overlapping UVs.
is it possible to use blend tree toggle but without WD?
I think that you can have the direct blend tree with WD on, and it wont impact your other layers if they are all WD off
I have large amount(very large) of stuff and other functions may toggle ON/OFF the stuff I want to use blend tree toggle, like toggle a folder, the content inside are going to use blend tree toggle, which im afraid it may be affect by WD
I found as long as its simple toggles and you dont need animated transitions between them or complicated logic - this works well
ive converted a good chunk of my avatar's toggle fx layers over to one big blend tree. The ones that remain either need to be separate because they are more than just toggles, or have very complicated logic and i havnt had the time to try and set them up yet
This message has the info about the WD mixing with this method:
#avatar-optimization message
does that mean Default State will NOT be affected if it is disabled/enabled by Blendtree?
originally, everytime the object enables, its current state will be recorded as its default state
When i tested it (with the blend tree as WD ON) all the toggles inside the blend tree seemed to act as if WD was ON, they would revert to default after stopping animating... however from some discussion in here it sounds like that is not reliable in a setup like this, and you need to manually animate the toggles on/off as if WD was off anyway
i made a 1D blendtree with WD off, however, it affects my avatar face blendshape somehow
the blendtree is like this
i have no clue why its affecting other animations that DO NOT exist in this blendtree and this whole animation layer.
when this blendtree is enabled, my face blendshape bump to infinity
This is why WD Off blend trees suck
they are broken
if there is more than one blend tree on a WD Off state in a layer they tend to affect stuff in an unexpected ways too
guess there is no workaround for now, I have to use WD on, its gonna take years to redesign my systems
(
ty guys
If i use WD on, does that mean I have to set the object default state?
like if my animation is make it ON, then I should set the object disabled when uploading it?
are those blend trees in a blend tree?
yeah
and the sub-blend-trees all affect different parameters?
Yes, that's the way you can have conditional logic in blend trees.
not sure whats your question, blendtrees are affected by parameters, not affecting parameters
a blend tree takes the values from animations[or other blend trees] and blends them together.
What is it supposed to do if a given value is only supplied by 1 animation, but not the others?
there is nothing to blend in-between
technically you can have a single animation with both values in it on 2 keyframes and play a specific one, since blend trees support animation speed (can be -1 to play animation backwards).
wait that wasn't supposed to be a reply to that message
🥴
check what Asovrix just said
I set WD and object default OFF, however, the animation(set object ON) did nothing ;(
setup is like this
You could technically do something like this, but I don't recommend this method:
Since stuff doesn't seem to reliably turn off from my testing in editor if there is no animation anywhere in your animator that animated it back off (blend tree layer would need to be a layer lower in the animator for it to have higher priority).
do you mean I need a animation layer that set everything OFF, then have the blendTree but in the lower layer to turn on objects and override the everything OFF one?
you could, but why do that if you can just toggle between two states within a single blend tree?🥴
I dont quite understand, mind explain a bit more?
my current problem is that Blendtree did enable objects, however, when the weight goes 0, the object didnt turn back off, I set objects OFF before Play
all WD does is "If an animation in a layer does not set a value set by at least 1 other animation in that layer, the animation sets the value from the scene at the time of building"
There is no reason to have a separate layer with everything off and then another where you have logic to set it on. All of that can be done within a single blend tree by just switching between off and on.
my understanding is that
everytime a Object is Enabled(from disabled), its state will be recorded as the "Default State". When the object is not animated by any animation, it will go back to the Default State recorded
wait what, is this Direct Blend?
is this how you set "turn OFF"?
If you insist on having less animation files, then yes, that's the way.
I have ON and OFF animation, but how do I use these two in Direct Blend? or you are using 1D?
Yes, just a little part of my blend tree.😌
https://media.discordapp.net/attachments/512468176202891264/1073921422520492072/Unity_2023-02-11_11-58-07.png
you are using 1D?
To make blend tree toggles the first blendtree MUST be set as direct. You can then organise them by using more direct blendtrees, once you get to the blendtree that holds motions that NEEDS to be 1D
omfg I set the toggles to 1D, then Direct, then 1D, then Direct, bruh I confused myself
so the first one need to be direct, the most left one,
the follow up use 1D
in the follow ups, use ON and OFF animation
Im I correct?
You also need a parameter that is permanently set to 1 and that should be the parameter assigned to all direct blendtrees
Root blend tree should be direct, but anything under it can be whatever depending on what you need.
alright, I thought I have to use all Direct
changing it back
do I need to change the Threshold?
bools --> float
ok
is blendTree toggle act exactly like normal state toggle? will it make other things behave differently?
Yes, aside from the fact that you can't have transition duration
got it, thank you guys
Also since I saw this earlier and forgor to say something, you should always be using WD on direct Blendtrees for this. Even if the rest of your controller is WD off. WD off blendtrees require a lot of specific things to be done to make them able to work which don't need to be done in a WD on one. Additionally, as far as has been seen, WD on direct blendtrees do not cause issues when using mixed WDs
do I have to set Object default state depents on animation also?
or I can leave object Enabled/Disabled as it originally is
I mean, make all objects default disabled or enabled
That depends on what your avatar is setup in scene. Take into account safety settings too, since with animations disabled you appear pretty much like in your Unity scene. With shaders disabled it can get even weirder too.
understood, thanks
they metals do but the hairs are set under the same texture. but different UV Mapping ofc
how would i set them as the same material
if they already use the exact same texture, you should be fine to set them as the same material.
to make them the same material, make sure they're part of the same mesh, then select all the hair (in edit mode) and assign them to the main hair material you want to keep, then remove the unused ones.
could i change the materials via material slot or do i have to fiddle with atlas or nahh
is there a model ruler or something that I can download so my model can be the correct size
Woo! simple math fixed it!
since they already use the same texture, you don't need atlas.
assuming you haven't changed tiling and offsets on them.
how do I make it crossplatform once everything is setup
you have to upload a quest version. and when doing that, you can mark the avatar as a fallback avatar
oh I see
make sure to not change the avatar's id when you do that though, as otherwise VRChat has no idea the PC version and Quest version are from the same avatar
mk
so just re-upload the avatar using the same model but make it using android?
is that correct?
nvm easier than I thought!
How do I change which shader it is?
Greyed out materials are embedded materials. You either need to extract it or replace it with a new custom material
aaaauuuuggghhhh
how does one exactly go about doing that.
well all the hairs basically have the same UV mapping so imma say no
yea just assign the same material to all the hair then. 👍
awesome!! ok thank you!!
In the Unity browser, right-click an empty area, go to Create -> Material. You have created a material with default settings. Adjust the shader, textures, settings etc as desired.
Select the mesh and look at the inspector, you should see a section labeled Materials with Element 0, Element 1, etc. Replace the relevant element field with your created material, by dragging it in from the Unity browser or clicking the little selection circle on the far right of the field. The mesh is now using your custom material.
I need help with optimizing an avatar, I'm using The material combiner tool in cats, I'm using blender 2.93, all my UVMaps are the same name, all the image types I want to merge are PNG. All of the sizes are compatible with 512. For some reason my skin texture turns completely white, is anyone able to help me determine the issue, or do you know someone who might be able to help me who is a little bit more advanced with atlas tools? I know there are alternative ways to optimize, my goal here is to trouble shoot the issue with the atlas tool.
redo texture on the missing material , could be its just confused where the texture is
what do you mean redo?
If you have a look at the uv mapping for those white sections- what has it done? Maybe that might reveal something about the issue/may be it's just a matter of manually correcting some of the UV sections
Pumpkin avatar tools has a ruler for height, really useful package in general
does pumpkin tool still break projects? i heard a lot of creators and users stopped using pumpkin cause it would break their unity projects. idk if it was fixed.
Never had it break mine.
Been using it for a while now, probably approaching 1 year.
Must have just been a bad update it had.
Haven't had any problems with the most recent one.
You could always just copy the unity project and back it up somewhere, if you want to be on the safe side.
i know people had problems in the past. idk if it was cause it was outdated or etc. cause people end up having to delete it or it will cause errors to the point it cant upload. but poiyomi has the same with their thry scripts
personally never used it myself. but i can only rely on my peers' opinions on this
Doing a "reimport all" almost always fixes script issues for me, only been once when it didn't when UdonSharp was broken for another reason.
i will take note of this method
hi! I've got a question regarding inactive game objects and performance: if a part of my avi is set inactive by menu's toggle on/off feature, does inactive mesh/material or whatever affect performance? I asked reddit and I had conflicting answers so thought I might ask here as well
if it's a gameobject it won't do anything if toggled off, so it's good for performance
Stereo is correct, but there are still small caveats, which are only really an issue if you overdo it.
You will need to use an extra layer in the animator (unless you are skilled enough to combine layers) which is a cost on the CPU side of things, each layer adding a fraction of a ms, which when scaled up with all your layers and everyone else's can become heavy.
And while it seems like Unity might be smart enough to let hidden gameobject's textures be unloaded from VRAM, they still have to be somewhere and if they do not fit in RAM, they will have to fit in the pagefile on your C drive. Grabbing textures from the pagefile would probably cause a noticeable stutter. Unlikely to be much of an issue on computers with 32GB of RAM, but still.
So a all-in-one avatar is still bad.
Exactly, remember that a vrchat avatar is not a custom character editor, use only what you need and if there's too much, separate variants as different avatars
noted, thank you for the input! I'm keeping things from getting too heavy but was unsure how much I can add(under reasonable amount)
I have a crazy Idea.
more textures, the more vram usage and more performance cost. what if I make a texture, with all the color needed, then modify the UV map to let it match the color?(sort like a lut table)
i know atlas is a thing, i want to discuss this silly idea
you could also potentially use vertex colors
I uploaded a test version of my avatar with 100% of constraints removed. In a empty world, I went from a rough 75 fps to a capped out 80fps... now I feel like I need to try and optimize ma constraints somehow 😦
Don't suppose there are any tricks for that kind of endeavour? (Like the magical direct blend tree method to reduce layer count)
no unfortunately, there are no lighter alternatives to a constraint from what vrchat allows on avatars
Sadness
Might see if there are any parent constraints that I could swap out for the slightly lighter rotation constraints
its a valid idea, risk of rain 2 does something similar.
do Parent Constraint cost more than other constrains?
I tried to not put everything under my armature to make it more maintenance friendly
using parent constrain, and now my avatars 40% of performance cost is from constrain bruh
My understanding is that parent constraints are a bit more costing in performance than rotation constraints
I do the same, feel your pain
performance debt
I might test if animating every single constraint off gives the same performance as them all just not existing. If it does, I might look into setting up some logic to turn off some constraints when I don't necessarily need them running.
maybe not, I have most of my object with constraint OFF when its not needed and still has the performance cost.
still worth testing though
test it? create a empty project then make 200 object with parent constraint
im outside now, could not do the test myself, sry
then use unity profiler
I'm at work currently so will have to wait until I'm home to try 😦
well, guess we have to wait till we have the chance
parent constraints are the only constraints that can be avoidable without changing the behaviour of the object. [if the parent constraint only has 1 source].
and this will improve performance, as the object with the constraint won't have to have its transform matrix recalculated each frame if you instead use regular parenting.
Is there not a way to get CATS to decimate a single mesh in a scene without it merging all of the meshes?
Like, i want to lightly decimate some of these meshes, but CATS always merges all of the meshs then decimates
you can select a mesh in object mode. enter edit mode. select the parts you want, or press A to select everything in that mesh.
then in the top of Blender, click Mesh, Cleanup, Decimate Geometry. In the bottom, a slider will spawn.
A better way, had been decimating edge loops on your own. Sippbox made a tutorial about it, in "how to upload a quest avi."
otherwise, no. at least not yet. same if you try to decimate via the bake feature. sad
the best way, if you want to use cats, maybe to preserve blendshapes. copy everyhting on your avi. make a duplicate. delete the meshes you dont want.
decimate that. then use cats to merge it.
First option easiest, second option nicests results, third option best automatic result but with drawbacks as you know (uniting meshes)
(edited it, think you wanted the heart closer to the easiest solution)
I was wondering if anyone could point me to a guide or give me suggestions when it comes to optimizing texture memory?
I'm very aware of how bad this is and would like to optimize it ASAP, so any advice is welcome
I'd like to get it to like 25mb or lower
Thanks!
basically use the texture import settings to set a lower maximum resolution for the texture
Alr alr, thank you
like your if a texture looks good at 2K instead of 4K go with the 2K
and like black and white mask textures can be at a lower resolution than like your color
the text tutorial I linked it would give pretty good detail on how to go about that
Thank you so much, I'll take a look at it and try getting it way lower
hopefully you're able to get it under 150
Already got it to 78mb! I'd like to get it a tiny bit lower, so we'll see how I do
I guess it'll be fine just to have to extra compressed on the Quest version
you can set texture compression settings on PC vs Quest so yeah just have an extra squished on Quest
Yeah, not a huge deal
Really trying to find a comfy middle ground on my pedantic attention to detail and the performance of the game for others
you might could use tiling detail maps for some of the repetitious detail to still look detailed but not consume as much vram
Back to shader: Can use seamless tiled normal maps per RGB area - tiny (128/256px) normal maps, but tiled around 50-100 times in the shader, giving you a higher effective TD.
You can combine these with an base nrm map for creases and baked normal details etc: (Blend with Base)
out of curiosity do you have a picture of your avatar Blizz
so I might could make suggestions?
Just a booth model, it's pretty well optimized outside of the texturing
cool
The reason why there's so many physbones is due to that jacket, probs gonna replace it with smth else in the future
But outside of that and the texture memory, it's pretty optimized
still great job getting it under very poor in a couple of minutes
I'd have everything on one mesh, but I really struggle with making blendshapes for stuff that goes over the torso
So that jacket has its own thing so that I can just toggle its visibility using shaders
thank you!
like the stuff I could think of off the top my head besides whack the resolution more would involve mesh editing in blender to make it like mirrored uvs so you need less texture space but that might be a bit Overkill
I was thinking of doing that down the road, but I more just wanted to be ready for the new rating system when it drops
Ye, just reducing some actual file sizes now and playing around with resolutions until I find what I like
"What do you mean I shouldn't use the highest res it lets me?"
I genuinely didn't realize how much of an impact on performance this had, I only started to realize once avatar creator friends told me about it and when Tupper started openly talking about it on Twitter
Those poor souls with 4GB of VRAM ...
World takes half of that... someone's avatar takes the other half.. another avatar loads and 10fps
"But I crunch compress" 🤦🏻♂️
Alright, think I settled on a good amount lol
That's a great amount
Yeah.... here's how it was before
according to Tupper, 150mb+ will grant you very poor in the near future
Turns out I had EMISSIONS at 8k for no reason
I always make my emissions 1k (unless it looks like a mess then I do 2k)
So I put those all down to 2K and made my main avatar texture 4k, I know 2k is more ideal, but I am compromising performance and detail here
I'll probs make them all lower on the Quest version
emissions to 1k and main texture to 2k
Also reduced filesize by 75%, which is nice
was like 20mb before, now it's 5mb
oh dear that's terrible
still quite the good reduction
you're still doing better than most Avatar uploaders as you actually are trying to do something about your vram
I really do care about performance for others in the game and would've done this in the first place if knew at the time
it's only been the past month or so that VRam was viewable on Avatar stats without installing a Unity extension
depending on the desired effect, it just might be cheaper to generate it on the fly with a shader, as opposed to a texture.
especially if it is a high detail effect that should not be affected by UV-seams [the no UV-seams makes tiling a texture not feasable except on very specific geometry].
if you know your way around blender to do mesh editing you could probably make the tiling texture stuff more practical
Back to shader: Can use seamless tiled normal maps per RGB area - tiny (128/256px) normal maps, but tiled around 50-100 times in the shader, giving you a higher effective TD.
You can combine these with an base nrm map for creases and baked normal details etc: (Blend with Base)
like having your uv Cuts match the clothing seam cuts
and then someone with shaders off, makes you look like a cut up crime scene lol
You would still have the regular normal map below the tiling texture
And like the standard shader has a detail map mode so that's not going to disappear
Just finished updating my avi with the new textures and optimization, thanks again and here's the before and after lol
(click the images to see the stats, lol)
Cool
I only just now read this vrcht dev update and it actually goes into some detail regarding constraint perf impact!
https://ask.vrchat.com/t/developer-update-16-february-2023/16474
Basically - disbling the game object the component is on or the component itself " incurs a cost so low that the constraint basically doesn’t exist." But just changing the constraints " Is Active" property (but leaving the game object and component enabled) only reduces the cost a little.
Welcome to the Developer Update for 16 February 2023! This is the fifth Developer Update of 2023. Thank you to DrMorro, whose award-winning expansive world Organism graces our Dev Update banner this week. I’d tell you to “get lost” in Organism, but that sounds kinda mean. Also, it’s kinda a given you’ll get lost in there. If you’d like to catc...
thanks for sharing
shxt i use parent constraint to bound my physbone colliders(a lot)
guess i would have to parent them under the bones instead
Disabling individual components in a gameobject is also more performant than disabling entire gameobject.
I have a bunch of parent constraints scattered all around an avatar - I want to try to do a count and also possibly quickly locate all of them to see if I can notice any that might be easily removed/optimized.
Anyone know of a way to count all constraints on an avatar and/or select/show the location of them? (similar to how the VRC SDK shows a count of PhysBone components and has a "Select" button to show where they are in the scene)
In the hierarchy search window you can type t:parentconstraint to filter to all gameobjects that contain a parent constraint component
oooo thanks!
If anyone is curious, I found a good guide on finally converting animation layers to blend trees
https://notes.sleightly.dev/dbt-combining/
They also show off the apparent performance boost, with the Y axis in milliseconds, and X axis as "layers".
https://twitter.com/hfcRedddd/status/1628109889326153742?s=20
X is layers/blendtree states.
For those that think, “yeah but I don’t have 1000 layers” if you have 50 and there’s 20 of you… you get the idea. A lot of creators are pushing commercial models with 50-100 layers or more. The numbers add up fast.
majority of crap models sure have 50-100 layers. but doing a blend tree and making the logic for everything to work well and smooth out is not something that alot of people want to take time to do.
like if u need to smoothly blend 50+ layers with alot of states. its gonna take days to make it work. and ontop of that you cannot use Avatar masks in blend trees.
but that said anything in scale takes alot of performance. it should always be Drawcalls(Materials) > Animation layers > Polygons > Bones. since many people started to realize that to many materials causes issues.
Hate to be that guy but if your just combining toggles or radials (like how the docs above show) it'll take no more than an hour. Its actually really easy to do once you get into the swing of it.
thats what u think. but you forget 99% of people on vrc dont want to spend even an hour, that said it takes more then one hour to do. that many layers for example. since u also need to change alot of things.
I mean the only thing you are directly changing is the parameter type in animator from bool to float if even necessary. After that its literally just plugging in your on and off animations. And if you don't have an off or on due to however your animations were set up previously, it takes less than 10 seconds to make one
It seriously doesn't take a lot of time or effort to switch your toggle setups to this.
your missing the big point here lol. if you have 50 layers. with a bunch of bools or other types lets assume 8 different types in each layer. each controlling something separate, you will first of all run out of syncable space. second it takes hours or longer to redefine and restructure it all. due to the unknown logic at talk. all of this depends on how simple your set up is. but regardless. you will run out of syncable types.
Ok so two things;
Firstly you won't run out of syncable types because you only change them in the animator, not in the sync params list
Second this is about toggles, not any sort of advanced logic. It is like three clicks to setup a toggle layer in a blendtree via this method
I suggest you give a read to the docs linked. Every ms of frametime counts and as others have pointed out above animator layers can very easily add up.
This method does have its short comings, don't get me wrong. You can't put every single layer into a huge blendtree, its simply not possible. But for your basic on off toggles, or hue sliders/other radials it seriously is easy to set up
yes you will. since you need to have some value changing the blend tree value. and if you have just as much as 32 different float values. going that needs sync. your out of syncable space.
and the point still stands.
the amount of animations, or any other things. is not something that can be determined without looking at each product.
Ok so you have a bool toggle right? In your synced parameter list it is a bool, normally it would be a bool in your animator as well. With this method you just change it in the animator and leave it be bool in the synced parameter list. You are mismatching parameter types. The Number of parameters or types getting synced doesn't change
and no. you will have to change them all to float. to make it work with a blend tree. and for reference. i know my way around unity.
no. you have to do that everywhere.
You can missmatch your parameter type between animator and expressions paramater list
I too know my way around unity
And I have been using this direct blend tree method for my toggles for months now
the only reason why thats possible is because the bool is seen as a 0 or 1 as well. if you work outside those values u cannot.
those are not INT. those are floats.
Yes but it is still controlled by an int
Yep
You will get 1 or 0, which works fine for a toggle
In fact, thats kinda the point of bools
Surprisingly, you actually don’t. This is the step that stumped me on this concept for months till I saw you can set the parameter as Bool in the Expression Parameter list and Float in the Animator Controller. It actually converts it for you in that process from 0 & 1 to 0.0 & 1.0 thus allowing you to use 1 bit to control a blendtree.
Heck even Ints giving 0, 1, 2, 3… in the Expression Parameter List are converted to 0.0, 1.0, 2.0, 3.0… in the Animator Controller. it’s strange but it works
well in the sense of the bool it makes sense. since its just a 0 or 1. just packed into a struct. however you can also only use bool for that. otherwise use float or int
I get the feeling we’re thinking of different things. I was commenting on using bools, and then ints, for blendtrees and how that’s possible using the systems we’re provided in response to the statement that it’s not.
I also might just be lacking knowledge to fully understand what you meant
ah right yea. i mean in the blendtree. you cannot use Ints, it simply wont allow it. and i mean the values inside a blendtree has to be floats. as it goes from 0-1
thats what i was trying to get at
Blendtrees only accepts Floats. as parameter
Indeed. Though blendtrees can take values over 1 as their threshold even if it doesn’t make much sense when thinking a float is -1.0 to 1.0. The thing is the conversion sets the value of the float to 2.0, 3.0 and so on when using an Int value of 2, 3 and so on. It does meet these threshold values.
Why? I can’t say, I literally don’t understand it, but it happens.
Thus the Int in the Expression Parameter List can be mismatched as a Float in the Animator Controller and then used by the Blendtree.
Values of floats in blendtrees can be above 1 or under -1.
Is there an issue with mixing WD on and off?
Or rather if I make my toggles into a blendtree should I change things like gogoloco to the WD variant as well
You can use WD on for the Direct blendtree in a WD Off setup. This is the only instance where mixing is okay
Cool beans, thank you
is this optimized enough?
oh yeah, that's quest compatible for sure
read/write off mesh moment
bro 😭
Woo progress on trying to optimize my avatar, I joined some meshes in blender after rebuilding the avatar in blender instead of unity, next thing would be material slots
But that requires uv mapping right...
Oh yes I need to decimate some stuff too
So close to getting poor or better
i have tested in a empty world with nobody else, my avatar only has a 2-3ms(I know its heavy already ;( im working to optimize it) cpu time when present in the scene just one.
if any mirror(4096) enabled or realtime lighting present in the scene or another avatar instance present, the cpu time could bump to 10 - 15ms
is this normal?
Not at all, soundslike you have 80 grabpass materials
I have 4 grabpass material, the objects are disabled when its not needed, which in the test it is disabled
mind explain a bit more about grabpass?
Grabpass more or less waits until the scene is drawn and than does a secondary draw
realtime lights have a heavy cost as well, each overlapping one doubles drawcalls as well as activates usually dormant shader code
youll hit the upper limit of 500 drawcalls for 144hz preeeeety quickly with not many of each
so mirrors, realtime light could make grabpass stuff explode?
'tis not very VR friendly, yeah
alright, thanks for the help
lag spike when loading the avatar, what is causing that?
loading the avatar
yeah... Id like to know all possible causes(maybe compression? script initialization? etc....) so I can optimize it
Crunch compression is the biggest one
make sure that's off on all the textures
alrighr, I have all my textures crunched to reduce file size
VRChat already does LZMA compression on the bundles
if not crunch, how can I keep file size small while visually acceptable?
limit yourself to 2k textures
I stopped crunching my bigger (1k/2k) diffuse textures
only use 4k in rare occasions like for a single texture avatar
All the masks and single channel textures still use it though
I current avatar size is 50mb, its a really large avatar(by all means), it is all 2k or less already
if I dont crunch it, it could bump to 70-100 I suppose, since there is too much texture
Compressed is 50mb? Sounds like one of my avatars
Do you have audio/big mesh files?
yes, 7 audio(5full length song compressed to less than 2mb each in audition)
2 sound effect, less than 0.5mb
for mesh, I dont think I have any single huge file size mesh
I had an fbx that was like 25-30mb. Removed unused vertex colour maps, uv map layers and blendshapes on all meshes. Now it’s 11mb.
The model is still very packed (like 3-4 avatars in 1) but its better now.
I did clean up all unnecessary blendshape , uv and vertex color
my fbx is still big though, I have like 15 set of cloth in that one fbx
I do merge cloth and accessories in blender to make it as clean as possible
Good ol’ wardrobe avatars. Never seen the light of public worlds.
Avatars with multiple outfits on them, I call them wardrobe avatars.
wardrobe yes, that much stuff do cause performance issue, thats why I do merge in blender to keep everything clean as possible
bruh but still, its file size is large af
I use markcreator’s size profiler for compressed size and Thrys Avatar Evaluator for Vram
You already take the uncompressed amount to vram on the textures
all it does is just makes the assetbundle smaller and cause lag on load due to it having to decompress the textures again
yes, thats exactly whats happening now, so I seek for instruction to keep the file size small and solve the lag spike
how many textures do you have in total
Reduce the number of textures you use
It’s a balance of compress to keep small and uncompress to keep lag free.
I have no idea for now since im not near by my pc, but should be a absurd amount
This all rides on the texture count
I’ve atlased masks and then used the tile/scale and offset of some texture inputs to position it right
Like viewing the frames of a spritesheet
Like 16 masks in 1 texture instead of 16 textures.
atlas?
Like merging. Take 4 textures and make 1 2x2 texture
you mean combine textures into a big one then offset and tile parts in shader?
My avatar is just under 100 MB vram usage and I didnt compress anything and its like 19MB as download
Everything but my skin is less as 2K
I really need to decimate my boots
Came from booth and made for my base but noticed they are 30K!!!! Polygons
But i dont want to lose much of the shape
Would i need to redo the uv stuff too if I decimate them a bit more?
I think the polygons are in the shoelaces
cus the rest seems pretty optimized on it
and the skirt is a big polygon issue too
you most likely got to many materials. if your optimized you shouldn't be above 30 mb of vram use for textures alone.
yep
trying to optimize but those polys of just the boots and skirt are v
big yike
but ey I only knew unity xd
trying to now make it in blender
but I got like no skill in blender xd
enough to make it very poor
I blame the booth creators
am already suprised I was able to sort of recreate my avatar in blender
but ye idk anything about texture editing or uv mapping or weightpainting at all
currently tris for the whole model are 150K
50K of that is just the boots and skirt
got 11 skinned meshes currently
think the body and face also take up alot of the tris
hey guys !!
so i have a really small problem with my avatar i made
so the avatar is super fins and everything is going good !
but in vrchat if i put like clothes and stuff
and change the avatar and go back
everything goes back to default
help
in unity yes
do remind
if u can remove all clothes, it wont put them back if u change out of it then
go to #avatar-help
oh okay
mhmm body plus head = 46K tris, Skirt + boots is 51K tris, thats 4 out of 11 meshes lmao
Boo
can anyone help me optimize my model for both PC and Quest?
im brand spanking new to the whole modeling thing
i am currently using a vroid model as the base. Which i have already set uploaded to PC but it is very poor in performance. and it is not yet even built for android
This time we're looking into some simple tips on how to optimize your VRChat avatar in Blender.
Rainhet's Tutorial Playlist:
https://youtube.com/playlist?list=PL2EEbgwoJzdt5kFVDyY2lliNqf7cWJeD3
#Blender #VRChat #Tutorial #Optimization
If you found this helpful and entertaining, please consider coming a Patron.
https://www.patreon.com/Aggrota...
thanks!!
Hey all, was wondering if anyone could point me to a guide or video that goes over optimizing physbone transformations?
It's literally the only thing keeping me from being green in the game now and I don't mind merging a few bones or whatever to fix it
I'm capable of using Blender and Unity, so anything that uses either of those programs is fine for me
if you wanna be lazy just adding most of the back hair to the list of ignored bones should be the 21 bones yous trying to get rid of
Not a bad idea actually
I am trying to optimize my avatar to get him to poor so I can attend events, what would be the best thing to optimize in order to get him to poor?
Why do you have so many skinned meshes? Do you have a lot of toggles or something?
Because easiest way would be to just pick a single set of clothing and ditch the rest of your toggles.
Yes
You'll simply have to remove stuff.
Getting rid of excess clothing would be easy to do and bring down all three of your very poor stats.
If you absolutely must keep every single toggle then you're going to have a lot of work ahead of you
Alright that makes sense, I don't use a lot of the toggles, I think most of them are just to enable or disable clothes
Guess I need to throw him in blender and combine the meshes?
To hit poor you need to drop 3 meshes, if you wanna be really lazy you can just delete them in unity
Would that cause any issues?
I don't think so
I'd say to just put them all on one mesh and make blendshapes to replace some of the clothing toggles you'd like to keep
Does not work as they are at 150k polygons.
This video helped me a lot with that
https://youtu.be/73REcZVWMhA
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 - ...
Sheeeeeesh
guess u need to go into blender to decimate
Also you definitely do not want to abuse blendshapes like this, it will significantly increase its size in VRAM, also you really do not want blendshapes to affect high poly meshes.
What's the most optimized way of having some clothing toggles in this situation then? My avatar is below 50K polys and I've got some toggles for my clothes and accessories using blendshapes, the game also says that my avatar uses about 28mb of VRAM, are the blendshapes not accounted for in this estimation?
Okay, so I removed all accessories, and toggles/meshes I rarely use, hes now down to these stats, I guess the next thing would be to decimate to reduce polys
At your poly count, all your toggles being their own mesh (using blendshapes) would probably be the best way, assuming they total less than 32k tris.
And the in game VRAM counter isn't counting VRAM, just "texture memory" (which is why it is called that), meshes and blendshapes aren't included in that.
Thry's VRAM evaluator can however show you your total VRAM usage.
Still not the worst, i think
Unless you want to be naked, a good way to reduce tris is to remove the mesh underneath clothing.
Definitely not bad.
50MB VRAM is on the low end.
Unfortunately.
Oh, Yeah that's absolutely true I don't use the toggles for removing shirt often, so I can get rid of his chest to reduce it
But on the other hand, 50MiB * (even) 80 players ~= 4GiB, would still fit within most people's VRAM budget, so I'd say that you have a very good avatar in this regard.
50 mb is to much. for a 80 player world. the reason is simple. whenever you launch Vr. your computer already uses around 1.5-2 Gb. of vram, not even being in a game and majority of worlds take up around 1-2gb it self.
Would fit with a 8GB graphics card, but I get your point.
It is still better than the vast majority of avatars though.
its far to close. its not ideal
me somehow being able to show 6 godfall avatars on Intel HD4000 graphics
If you are on PC you can use UV tile discarding in poiyomi to do up to 16 toggles on a single mesh/material.
Oh, that sounds like a good idea
Just keep in mind what your avatar will look like with shaders hidden (if you have 16 overlapping assets hidden only via UV discard, then the experience for users hiding your shaders will not be amazing).
It's so frustrating that we're forced to do toggles in a less optimized way on quest (which needs the optimization much more than PC does) 😦
you probably shouldn't be having as much stuff on your avatar on Quest in the first place
See, i have 0 experience with both blender and unity in terms of toggels and optimization. There are so many things that need help (i started with a vroid model so thatsprobably why?)
and i am trying to work on getting my avatar in good condition for both PC and Quest
This tutorial shows you how to optimize your VRoid Model for VRChat using 𝗩𝗥𝗼𝗶𝗱 𝗦𝘁𝘂𝗱𝗶𝗼
and 𝗕𝗹𝗲𝗻𝗱𝗲𝗿. We aim to get medium or good performance ranking!
𝗕𝗹𝗲𝗻𝗱𝗲𝗿 𝟮.𝟴𝟯: https://download.blender.org/release/Blender2.83/
𝗖𝗔𝗧𝗦 𝗽𝗹𝘂𝗴𝗶𝗻: https://github.com/GiveMeAllYourCats/cats-blender-plugin
𝗠𝗮𝘁𝗲𝗿𝗶𝗮𝗹 𝗖𝗼𝗺𝗯𝗶𝗻𝗲𝗿 𝗮𝗱𝗱-𝗼𝗻: https://vrcat.club/threads/materia...
0:00 | Intro
0:53 | What you need
1:11 | Vroid removing transparent areas
6:25 | Exporting from vroid
12:01 | Blender
14:12 | Setting up your avatar in Blender
16:59 | Cleaning eyebrows
19:16 | Demonstrating editing the mesh
21:31 | Combining materials
23:04 | Reducing polygons
25:10 | Exporting from blender
26:00 | Unity
26:46 | Configuring mod...
It is funny how I found out that of someone does not show my shaders my clothes are all white but my skin and hair and tail are normal
What I can think of is it not add more vertices to make is smooth but just click on the smooth button in view mode
Back once again with another free @VRChat avatar optimizer tool!
VRCFury can now automatically convert toggles on your avatar into direct blend trees -- saving animator layers and frame time, no configuration needed! https://vrcfury.com
Thx to @hfcRedddd for the idea
i wouldn't use it. cause it doesn't really work lol
how so
does not create proper animators, or animation files. for like the direct tree. infact it does not even create a direct tree at all
it just creates a lot of empty animators
maybe let the developer know that they can fix it so it does what it's supposed to
Anyone know why the tips of these are scrunching up rather than hanging loose?
I assume it might be something to do with end bones, but...
does anybody have any good tutorials for optimizing hair? i have finished modeling everything and kept my tris at 2500 but as soon as I attempt to do any kind of hair things get totally out of control.im currently building from curves > converting to mesh > desubdividing
this is my first model so hopefully I'm not sounding to stupid here
wondering if dissolving Edge Loops might give you a little more control? https://www.youtube.com/watch?v=oWhuCxFXy9k
#b3d #blender #secrets #tutorial
Visit the Blender Secrets website: https://www.blendersecrets.org/book
e-Book bundle (20% Discount) : https://gumroad.com/l/IxofeY
awesome thanks. I think I may also be overcomplicating the overall structure with layers but Im not sure how else to achieve the sort of look Im going for.
do I'm wondering if doing some retopology on the hair so it's like one solid sculpt might result in less triangles?
https://pbs.twimg.com/ext_tw_video_thumb/1364635819768709121/pu/img/snytQFpehVkCIFAp?format=jpg&name=large example of what I mean by like a solid sculpt
i do like that i think the problem is I want to achieve this kind of thing and it may not be possible in a low poly way
question are you targeting PC or quest with the avatar
def pc
as you could use hair cards if it's a PC only Avatar
join our community on discord @ https://discord.gg/R98rdz
im also available for business and freelance work : @emmanueloakfor8021@yahoo.com
my portfolio: https://www.artstation.com/emmanuelluiz
skype: Emmanuelokafor8021
that looks fantastic! thanks
glad to be of help
it just tends to be an uncommon art style in vrchat because everyone running around as anime or furries so geometry spline hair tends to fit those out Styles better
i def like that style a lot. i just really wanted to make something trad goth for myself because i couldn't find anything anywhere. that said i cant imagine my first one will be usable : P
your first one would probably be usable but doesn't seem to capture the look you're going for to well?
A little bit of not capturing the look and a little bit of it probably not being super functional. its a learning experience so I'm comfortable redoing things a few times until they look acceptable.
all of those options are vastly more time consuming than "how to merge 2 meshes blender" (one button, merge mesh btw) and wont work as well as youd think, the viseme parameter is only the most dominate viseme currently and doesnt reflect the mix that vrchats viseme system uses.
yeah my first thought was why is the blush and body separate mesh in the first place. weird that the blush has a vertex groups that are not 100% head. weird that the body and blush have the same material but are assigned different in unity
but, go with one, make the default state go straight to Sil and make another transition from entry to sil at viseme=0. Go from sil to exit if != 1. No need for a selector or idle
it will still clip at certain times, again as you only get the most dominant viseme and vrchat uses a blend of every
unless you want three layers; one for converting viseme int to the 14 viseme floats, one for smoothing, and one for translating the smoothed values into blendshapes.. itll still only have one active at a time
blend tree method will give you a super robot look, you get one viseme with no blending. Atleast 1 would let you choose the transition time for a little smoothing
the knowledge is all over the internet, Blender is far easier to learn than any other 3D modelling software if you ask me. 🤷♂️
just search for more general tutorials, instead of "how to make blush blendshape blender", try something like "how to merge meshes blender" for merging, and "how to make shape key blender" for blendshapes.
anyone dming you in here asking money to tell you how to fix something/commission is a scam anyways
Has there been any guidance as to what the new VRAM requirements will be for each performance level?
I have mine cut down to ~45MB now, just trying to keep myself at medium when the moment comes.
semi-recent developer update
As you can tell, they were extremely generous
Thank you. Couldn't find the right search term to track it down.
Am excited to be able to set my safety settings to a reasonable level rather than having to tick people on in big instances.
looks like you would be good rank on PC and need to shave off 5 MB to not be very poor on Quest
I'm always here to help if you have trouble 🙂. Because vrcf is totally non-destructive, it makes a clone of each of your animators before it begins your work. If you don't see any direct trees being made, it's possible that your toggles are ineligible because they have behaviours, more than two states in their layer, etc. When the optimizer runs, an optimizer report is printed to the unity console which can help you determine why a toggle wasn't optimized if you are interested.
No need lol. Everything i make is optimized. To the bone and beside i know unity in and out.
Wait, does this mean we can now upload Quest avatars that are larger than 10mb?
That's VRAM
Welcome to the Developer Update for 16 February 2023! This is the fifth Developer Update of 2023. Thank you to DrMorro, whose award-winning expansive world Organism graces our Dev Update banner this week. I’d tell you to “get lost” in Organism, but that sounds kinda mean. Also, it’s kinda a given you’ll get lost in there. If you’d like to catc...
It's also counted in mb
Ah, ok
Ight I've got a question bc I'm genuinely curious
I'm I'm the middle of atlasing but as I made my texture dimensions 4096x4096, I wondered if there's a better size
I guess a question would be is how much empty space is there in your Atlas
0
then that's probably fine if it contains like all of your avatar
Alrighty just figured I'd ask bc like why not
a single 4k texture will not do anything bad.
Can puss in boots be a avatar
trying to optimize an avatar for quest for a friend, but quest isnt something i deal with often, what magic boxes do i click on in the quirky little shaders to make this problem go away?
you have to cut the mesh out by hand since quest avatar shaders don't support transparency
i was afraid that was the case, thanks
yw
getting a bit stuck, trying to update my avatar (been away a while) from VRoid, Using blender 2.93.15, latest versions of material-combiner-addon, VRM_Addon_for_Blender and cats-blender-plugin however when i try to create an atlas and select save atlas to instead of normal popping up a save dialog and working, it just combined everything into 2 materials (even tho i have all selected) and is mangling the heck out of the texture and dont save it anywhere
i also noticed when importing the model for the first time its not greyed out, in the past i had to select fix model to get the textures to work, i am assuming its some form of incompatibility somewhere but not 100% where
any advice?
this is has worked in the past, and ive tried going though a bunch of tutorials to see if i missed anything since its been a while, but no matter what i do i get the same result
i know the CATS plugin isnt exactly updated much and VRoid has been updated since the last time i did this, could it be the release version is not supported? it was in Beta last time i tried, i rly dno anymore ^^;
(i can move this to #avatar-help if this is the wrong place, just seamed more fitting given the issue)
ahh, worked it out, its an issue with material combiner (Blender 3.4, 2.9 below)
it does indeed work correctly now
i will leave this here in case someone else also has this issue
blender 2.93.3
thanks, updated my image to clearup its 3.4
you can unpack textures in the shader tab too
in the orange image node itll look like a folder
What should I combine?
Wait so this means u can intregrate an image for materials into the blend file?
If you're just using one texture at a time on a material, and swapping them out, does it matter if they are atlased or not? I.E: For one material, is there a difference between swapping the texture and UV shifting the texture?
If I’m understanding the message correctly, you can’t animate a texture swap on a material.
Oh? I see. I guess I never checked if you could
Any advice for dropping 15mb of vram usage? Most obvious place to start? Etc
Texture import settings. Set alpha source to none for any texture that doesnt need it and lower the max size. Maps and masks can be set to bilinear resizing and set much lower size than perceived textures
depends. any 4k textures? to many of them? if so reduce em to 2k
It's a 6mb avatar. I was horrified to see it unpacking to 90mb in vram. Surely I'm doing something wrong
That still puts you at medium. If that's fine for you then who cares
Need good for club standards, otherwise yeah I wouldn't care.
Any clubs I've been to are medium or better and 100MB VRAM if they even specify
set anything on texture compression (ignore crunch) , never none - seen people who forget that
Try using Thrys VRAM calculator to see who your biggest offenders are
the only two settings that affect vram size are Max Size and Alpha Source
And compression quality
no.
Hi, I'm Teeh. The VRChat Feb 16 developer update announced new changes to performance ranking. Let's take a look.
Need help? Wanna show off?
https://discord.gg/sippbox
VRChat Performance Ranking Documentation
https://docs.vrchat.com/docs/avatar-performance-ranking-system
VRChat Feb 16 Developer Update
https://ask.vrchat.com/t/developer-update...
I've done some research on this subject.
I'll look into it when I get home. Thanks for the advice boys
texture compression do affect vram size , we're not talking crunch
unless your settings are weird, dxt1 is an rgb texture while dxt5 and bc7 are rgba. The vram size should not change if your other settings are correct
nothing wierd, this is default
Raz's article linked in the description does a great job explaining the formats
feel free to upload a test av with none vs high quality and see vram size difference
I also have Unity's own import matrix linked if you want to refer to that
I'm pretty sure I do anyway
highest quality/lowest compression is the 26mb side?
...
'aight i talked it over with the boys and it turns out that if you use textures with no alpha channel than high compression will add a blank alpha channel, increasing vram size by 100% (3 channels to 4?). Setting it back to normal will undo this unoptimization
My testing failed as the texture I was using to test this.. used the alpha channel for hair cutout
unrelated to help, wanted to say this was a really well put together video, y'all did great!
is this doc up to date?
https://docs.vrchat.com/docs/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. This system is provided to inform users what is likely the most perfor...
YES it was last updated yesterday
100 Mb Vram on a avatar is to much. considering thats only Textures that is just worse. considering majority of club worlds have a insanely high vram use. like just being in a club world typically takes 3-4 gb of vram. and since majority of people only got 8gb of vram. but realisticly only about 6 gb is available. just vr alone can take up towards 2 gb
That's an opinion, feel free to have it. I was speaking from my personal experience.
You make really good points though
Setting up the SDK
Currently working on a model with an extremely regular uv map (thank you shugan for making my life easier) and want to reduce polygons. Obviously CATS decimate is an option but makes the uv really hard to work with.
With other models I would select the edge loops and dissolve them one, but with this many individual strands I dont have the time or the patience. Is there a way to select vertices on a model by selecting it on the uv map (like what I'm showing in the image) or dissolve them directly in the map editor etc
half an hour of googling later I found the sync button in case anyone wants the answer
hm...
So if you don't care about the performance rank, but actual optimization, even with a bunch of stuff on an avatar, I suppose you have to focus on those key things:
- Animator logic and keeping it performant (not many loops, low amount of layers, etc)
- keep the amount of blendshapes low, or at least separate high blendshape meshes in to 32k max meshes (unity can optimize meshes with blendshapes below 32k quite a bit, faces for example)
- keeping VRAM usage low (textures and meshes)
- keep the amount of total material slots that are active low
- be careful about the shader/shader features that you use
- don't overuse constraints, use them only when necessary
- don't overuse physbones/physbone colliders and contacts
- deactivate things completly if not in use (things like physbones for a coat, that are deactivated when the coat is deactivated)
Did I miss anything?
Reason for asking is simple: The performance rank system is flawed in many ways, but particular in the way that it takes deactivated things in to account that have basically zero impact if deactivated. As long as that is the case, I don't care too much about the performance rank itself. But I still want it to be as optimized as I can make it with reasonable effort (you know, 80/20 rule and stuff).
It's not flawed, it just won't update everytime an action is executed for performance reasons and for not having avatars loaded/unloaded every 2 by 3
And mesh/shader vram is being worked on
you say it's not flawed, and then state one of it's flaws ;)
That's why I want to focus on actual performance impact.
What flaw did i mention tho
counting everything as if it's on all the time which simplifies in a way that doesn't reflect the real-world performance of the avatar?
calculating performance in realtime is also, counter to the whole point, expensive ;)
yes that would be silly to attempt to try to account for toggles
I think any engineering effort put into improving the performance ranking system is better spent elsewhere rn. I'd personally prefer seeing the network delay issues addressed before putting more polish (or basic functionality as you'd probably call it) on performance ranking
VRC's current performance ranking system gets Teeh's seal of "Good enough"
and it has gotten better recently now that it takes Vram into account
VRAM should just be its own limit / settings imho and not count into the general ranking.
Then just leave the end user choose the VRAM limit(s)
It doesn't make sense to target an arbitrary 8GB limit when you have different VRAM GPU sizes.
At minimum it should / could auto adjust the limits based on GPU total VRAM installed on the user's computer.
It's simple calculations as explained in the video.
It does make sense to have, if it was only (I still want a limiter like that so I won't see see the 1GB very poors) then the rankings would be far less useful.
Now with texture memory, clubs can put more trust in that if they set their minimum entrance rank to be good, then the experience will be more predictable and better.
and putting it on Avatar ranking makes it to where everyone can see the vram at a glance
of course it's better than nothing.
and also the quest would not benefit from user set vram limit because that has fixed Ram
Yeah I mean having it in the stats is good,
but making you jump rank is not.
The main side effect currently is that most avatars jumped in rank , while they were not an issue before.
Sure I'm glad that super heavy avatars are detected that way too , but most were already stripped down by other settings 😉
and so it would have its own "user" fixed settings 😛
with one choice 😄
quest already has all its own limits. 😄
Do hidden avatars still use VRAM btw ?
VRAM is the most important stat to my experience.
I go straight for the person with the most texture memory if I get stutters, because hiding them almost always fixes that.
You could jank together an avatar with 100MB of texture memory on Quest.
I agree, but you'd still be able to do that if it was its own setting basically.
Basically no.
They still exist in VRAM, but are swapped out when something, like a new avatar loads in, needs the space.
ok, so basically almost no impact , so it's good.
I want it to be a setting on its own, but on the upper end of the performance rankings the current system works.
I just want the limiter for the worst of the very poor.
Does depend on what you mean with hidden.
Manually hidden = what I said.
yeah exactly, we'd need more levels 🙂
Or, we cap off very poor, or replace it, with "Too Poor" a ranking with the same limitations as Very Poor on Quest.
A ranking that will use dark patterns to make it really annoying to show, which would dissuade people from using it for more than just experimental avatars.
For clubs it's the same, the rule "no very poor" nowadays is not very useful anymore imho.
Because the user can already set to hide all verypoor or all poor.
so the user already has the choice 🙂
If there was also a blocking setting for all the other levels in vrchat, clubs wouldn't need to do the police anymore basically 😄
My understanding is that clubs do it because they want people to be visible.
Some clubs probably do not care, but it really isn't the same experience if you cannot see the people dancing around you.
yeah but with fallback it's kinda ok nowaday, and that's why you need a nice looking fallback 😄
Which you can only have if you know how to make avatars and how to optimize avatars.
although I kinda like seeing a bunch of default vrchat fallback wuffies dancing ;))
perhaps w the new avatar jam there'll be some cool new legacy fallbacks
yeah it'd actually be cool if you could choose yourself which default fallback to display for others 😄
You can?
You meant others
oh ?
You mean choosing what fallbacks others show up as?
yeah I mean for those who have not set their own fallback I'd rather see the wuffy than the toothbrush 😉
it'd be cooler if you could set a fallback from a public avatar made to be a fallback but it seems like you can't
at least from what i've seen when i visited a fallback avatar world
It is a odd decision that you can't.
this ^
I have 24GB of VRAM, so I could be way more generous than someone with 8GB.
The current limits are fine for your average GPU (as that's what it's based on), but I would really like to set my own limits on stuff. Even if it would be through a settings file
yeah exactly. I only have 12, but now I see more fallbacks basically,
ok I can show them all manually, but it's a pain.
To not devalue the system I think it would then have to check the amount of VRAM your graphics card has.
People without that much VRAM shouldn't be able to override it because then that will just become the norm and we are back to square one.
for example: I don't care that much if an avatar has 100k polygon, that has usually not that big of an impact, but I would actually tighten up some other limits, like physbones for example
Physbones are incredibly optimized.
They seem to be logarithmic (can't get better than that basically)
it's basically using only what's needed and having its own runtime parameter limits from what i see, and that makes then very performant
Yeah I was actually surprised , last time there was a fallback avatar that I showed manually to see that it had ... 1.7 million polys, but I didn't even see any drop in fps when showing it
could also be that it was in not displayed accessories or such maybe..
Also, can't you set limits for amount of physbone transforms in settings?
not if it would be in the settings file, which there are already some options, like camera resolutions past 8k (IIRC), and some other settings.
So it would be nice if we could say in the Menu "Use conf file limits" or whatever, to switch to it.
People who go in to that effort of creating such a conf file, or modifying it, should know what they are doing. And if not, and they are still doing it, their fault. VRChat already warns with certain settings (horizon adjust, greater then 4k pictures) about performance impact.
It's basically about having the option to adjust, and not getting forced limits.
yeah exactly and that's a good example, of what would be nice to have for vram basically.
similar to physbone, just set you own limits..
As someone who handles raw photogrammetry, I think it was probably hidden stuff. It is certainly noticeable when you get to 1 million.
anyway trying to optimize some old avatars
People (plural) are dumb and can't be trusted to do what is good for themselves.
I've still seen quite heavy avatars, and if there are a bunch of it, it does have an impact, and CPU frametime is usually more precious then CPU frametime in most cases.
Also, smooth 45FPS because the GPU can't keep up is smoother then the stuttery mess that gets produced if the CPU can't keep up.
anyone knows why thry shows a different total than vrchat for texture ?
when I count the individual texture sizes in Thry's list, it's closer to vrchat (100M) than what Thry's displays (177)
that was just one example, a poor one I suppose
Thry does mesh and texture.
VRChat only does textures right now.
yeah but the texture size is still different
Thry is 177 text + 15 mesh
VRchat says 102M
when I sum the texture list in Thry it's more like vrchat
maybe they use different ways to guess the size, vrchat taking it from the asset bundle and thry from the project assets in use
That could be a response straight from apple xD
I don't use or own any apple devices, exactly because of that.
prolly because all the textures are crunched
I see several textures that look almost identical, maybe you have some duplicates? And maybe you could use masks and some shader feature to make the differences?
It is.
Will add that there is a major difference though, these VRChat things affect more than just one person.
As has been shown with Quest, people will use Very Poor without hesitation and that means everyone on Quest has to show Very Poor avatars.
it shouldn't, it only affects download size afaik
They are different coloring or audiolink effects even if they have similar names
yee but it might be calculating the uncompressed memory size
Aren't duplicate textures the same when in game, like Unity knows that these are the same textures so it doesn't needlessly load it in more than once?
uncompressed as for decompressing after download
there is a huge difference between the quest 1/2 and a PC
A PCs performance can range from "can barely run VRChat on Desktop" to "can run VRChat at stable 90FPS with a mirror and 10 very poor avatars in front of a mirror".
yes , what is displayed by thry is vram not crunch compressed.
these textures crunched are a lot less
And allowing people do to what is bad means the lower end of the curve gets punished.
nope, thry's tool wouldn't show them if they aren't exactly the same file
if they have unique names they are packed as different textures
you can reuse textures, but not duplicate and rename them
That's why games have quality settings.
Which VRChat basically lack, and they could add some of the same functionality with adjustable settings
then it has to be displaying the texture memory as if it wasn't crunched but yet compressed, wich still uses more memory than what's shown but not as much compared to crunch
most people don't want to try running Cyberpunk 2077 at 4k with RTX stuff on on a 2060.
Have reasonable defaults, yes, but give others to option to go past that.
Quality settings work when the assets have been made to change with the settings.
In VRChat you have one avatar and it does not change with the quality settings.
that's why I would like to have adjustable limits, they can "replace" that to a certain extend
yeah, one thing that would be nice is to be able to "strip" what's over the limit too 🙂
there used to be a performance mod that was doing that "back in the days" and in real time 😉
that was super nice and definitely helped performances
as avatars performance ranks are calculated on the fly, after loading an avatar, it shouldn't be to hard to implement reading those limits from a config file if it exists. The VRChat client it self is almost setup for it. (unless they have those variables hardcoded in the code, instead having them defined as constants, which would be bad programming practice)
Yeah I still don't understand why it has to load the entire packing before deciding ... to hide it
And confuse people about what the rankings mean.
Diluting their usefulness.
I understand that most people really do not care about their rank unless they have to, which I assume is a group you are part of, but the rankings should mean something and should be set in stone to not punish people with poor computers, because we both know that just like Quest, if given the option, people will make performance terrible in VRChat and then blame VRChat, and then not do anything to fix the issue.
splitting the perf info and the actual avatar might help at some point maybe 😉
that way it doesn't even download the package if it's over the limit basically
The values attached to the package could be spoofed by a modified SDK, which I think is why they do not trust it.
needing to read the assetbundle data before deciding ig
'd be good that the avatars had the stats saved on them
it would need to be server side of course.
because it doesn't know it, those stats are not saved anywhere
just an api request asking which rank is this avatar basically
VRChat doesn't have a server side (not any major one at least).
They have a content server (that purely holds data).
And some sort of authentication server, handling instance owner, logins and stuff like that.
well it can be a file .. just split it on upload 1 text file for perf 1 package for the rest.
and it needs to be calculated after uploading to avoid spoofing of course.
Yeah, it's pretty much p2p with a proxy server in the middle.
The calculating after uploading part is what VRChat can't do right now.
And would be expensive and give them more potential security problems.
I.e, doesn't make sense for VRChat at this size and will only get harder the bigger they get.
please don't make assumptions about me without knowing me, thank you.
I tried to explain it several times, it's because hardware varies greatly. I don't have a 5000$ PC just to use 25% of it. And going around reading avatar stats and manually enabling those that fit my requirements isn't fun, especially if it can be automated easily.
Would be minimal work imho, but yeah I understand it's easier not to do it 🙂
But since they are on a performance rampage it's would usefull imho.
Even if avatar loading got better , it's still quite heavy / generates microfreezes
I shouldn't make assumptions, sorry.
I get what you mean with the variance in hardware, but if VRChat doesn't detect and then force what settings you could change that config file to, what is stopping VRChat from basically stopping to have a performance ranking system in the first place, users would just set all those things to the max.
One friend in a group does it and then it spreads to everyone else and now the people with poor computers suffer.
They should activate crunch compress by default imho. 😉 would save on download size too.
There are still very very few who do it .
Might have messed it up in my head, but wasn't it crunch compression that caused the stutters?
Calculating an avatars performance on the server side would be nice, they could even add abilities to check the avatar for anything malicious
With your reasoning you should also assume that everyone takes pictures in 8k+ because they can adjust it. But guess what, most don't.
I just want to have the option to change it. And there was even a some what popular canny about it, years ago, but I can't find it right now.
Modifying the limits for someones own PC can also help people with low end hardware.
it shouldn't be crunch compressing textures but administrating texture memory better
apart that crunch compression just destroys tthe quality most of the time
Taking a photo is a one frame thing.
It can cause a hiccup during load if the avatar is large
but can have quite a performance impact ;)
back in the days when it was not properly multithreaded maybe yeah.
everything that is cpu heavy basically..
yes but it's a momentary performance impact compared to constantly showing a bunch of very poor avatars because you tweak your settings
For one frame.
And it isn't a thing you constantly have on.
You can just not do that and it doesn't affect what avatars you see. It has little to do with what we are talking about.
Also people with low end hardware would benefit from it, it goes both ways.
exactly. would make for better security.
You mean people would turn those limits up?
My evidence for why that wouldn't happen generally (yes some people would use it, but not the mass) see Quest, again.
and honestly the ranking system needs to stay around as a thing that's the same for everybody so that folks have goal post to optimize their avatars towards
if you mean with up that they would increase the requirements, basically if 70k polys are good, they change that to 32k for good on their end, as an example, then yes. that's what I meant.
most people are not going to have the foggiest idea what numbers they should set stuff to
Which I say is something that would never happen with 99% of the population.
Gives benefit to the 1%, while making VRC performance worse for the 99%.
you can just use show Avatar to show all of your very poor but reasonable friends
Quest is used by a lot of people who don't know anything about how any of those things even remotely work, from my experience. A lot of kids and people who sometimes don't even have a PC. And most of them don't spend that much time in VRChat, as you can easily see from their user ranks.
Many people in my friends list (mainly PC) are aware of those things and they go and hunt down bad avatars in an instance to block them, if the performance is to bad.
PC users have no way of knowing if the Avatar is causing trouble for Quest users outside of asking as the Avatar statue can see what only be reflecting the PC Avatar
which was not my point at all.
https://feedback.vrchat.com/feature-requests/p/ranking-system-needs-an-overhaul-also-consider-hiding-avatars-based-on-customiza
Even 4 years ago, people asked basically for that.
😄
asking for a while doesn't necessarily mean vrc would consider it a good idea
Back in the day when VRChat was even more enthusiast, when the people you met where all VR enthusiast, it was very common to mod the SDK to get around the hard polygon limit at the time, I won't deny that it was low, but it is a good example for that even knowledgeable people will disregard that.
But also, as the rankings get better and representative of true performance, people like your friends and me won't have to find the poorly performing avatar as often. VRChat would have to make toggles represented, which sure isn't going to be easy.
Being that old it means VRChat doesn't want to implement it.
yeah that would help instead of having "slaves" at club worlds asking to change avatars to a better rank ;))
apparently they like freedom in a lot of things, which was a good decision, as it made VRChat what it is today.
If someone wants hard limits, there are other options for that, like rec room or facebooks horizon.
vrchat does actually have to worry about performance limits to some extent like I'm honestly surprised they haven't been kicked off of The Quest store for the egregious performance most of the time
which is why there's no transparency shaders for avatars and constrained on quest
the issue is that they can't make the avatar ranking that good. It's easily possible to tank the performance or even crash people with a good or even excellent avatar.
That's were custom limits come in to play. It will make the avatar ranking more useful.
how so most people won't have any ability to know what numbers correspond to their actual performance
you can't compare fixed hardware of a console (quest) with the variety of a PC.
I know my avatars have dropped from good/medium to very poor since the change but i aint gunna do any work since the hassle
for quest, fixed limits do actually make sense, maybe even different ones for quest 1 and quest 2, but PC is a whole spectrum
They are working on making it better though.
We just got VRAM and constraints seem to be next.
Counting the layer count in the animator seems extra tricky, but could also happen.
Which leaves what?
Shaders is the only major thing I can think of.
that is already somewhat documented, but could be even better documented.
you said it yourself everyone has variable Hardware so like a million polygons could be completely fine for one person and but a disaster for somebody else so how would they know which category they in
But going back to how casual the Quest crowd is, having different metrics in their rankings would probably be very confusing, better if they instead cut off Very Poor for Quest 1, maybe then it won't need to be unsupported.
yeah because to have a super good performance atm ,
we could kinda embed all the textures as binary blobs directly in the shader codes 😛
100MB shaders 😉
well yes, they are make some progress, but my GPU doesn't have an issue if it uses 20GB of VRAM, but my girlfriends GPU does, with it's soon to be 8GB.
they'll count shader vram from what i saw on their most recent video, so that's something, but there's no way to guess a shader's performance, and if there is, that job has to be done by directx to unity first
doesn't change anything in the VRAM requirements, as shaders also get loaded in to VRAM
yes, but they are not counted in the ranking system 😉
(just kidding of course :P)
but yeah every ranking system will have its flaws and people trying to work around or abuse basically.. 😐
by reading. Educated people (without some disabilities) are capable of reading, and if it's explained well, they can even understand it fully or to an extend that they are able to make an educated guess.
But they could also just go with what others use and then not need to think.
which people already do
by showing very poor avatars
graphics cards don't exactly come with numbers that quantify their performance characteristics outside of vram that could be easily read
true, whenever vrc updates their performance ranking system some random person uploads a very heavy avatar as if the performance system was a challenge to find exploits
Not the same then, because needing to show very poor is different than changing the entire spectrum of ranks.
that entire spectrum of ranks will be for that one user himself
Which will push it lower.
they should add 2 more ranks and move all ranks down 1 slot
there's not really any room on Quest for more ranks and it would be weird for PC and Quest have different number of ranks
I'm pretty much done. I don't have any more arguments anymore against you two who apparently would like a console like experience.
I'm sorry, but I play on PC, and I would like to tweak things so things run to my liking on my end.
So long, and thanks for the fish.
I think that would add too many ranks.
Would just hide the issue that people make unoptimized avatars.
Less ranks. Optimal, Okay, and Clearly Built in Unity
it would become an endless loop of people thinking the worst performance rank is the norm and that another performance rank should be added. What needs to be done is optimizing the content, maybe some people consider very poor too restrictive but the performance ranks are made for a normal computer's standard
people shouldn't be making their avatars for the $5,000 computer people especially public Avatar makers
lots of bikeshedding in here 😅
and what about those who use a 500$ PC, and suffer from "good" ranked avatars that tank their performance?
that's why i always have shaders disabled
at least one source of that has been removed with the vram counting to Avatar ranking
first time hearing that term
Sorry for bringing it back into topic.
But a customizable Too Poor that sits beyond very poor?
The rankings should be set in stone for them to be globally useful.
But if you then had a rank, you yourself set, that set the lower limit, would you agree that it would accomplish what you want?
Tightening the ranks should be allowed, but not loosening them, especially as you can just auto show very poor on PC.
that is not really possible. unless the shader that is used is doing something really bad.
and users can strip out people's shaders
I basically would like to have custom limits for the ranks, and it could be implemented that you can easily switch between default and custom, like you can with the shield level. Maybe even display both, default and custom in the avatar details tab.
People who care about such things, like people who go to 80+ instances can easily see if their avatar would meet the requirements.
It would just give people with lower spec then default and higher spec then default hardware the ability to more enjoy VRChat, instead of enabling and blocking avatars all the time in a busy instance.
that already exist to an extend lol
"Hold my beer" *creates an abysmal animator controller*
that is outside the scope of ranking.
and also can be stripped out using the shield system
determining every factor is near impossible. and requires a crap ton of testing.
which was the whole point of that argument you replied to
it takes more effort to make a crap animator. then it does to make it good lol.
Ok, but just having one extra customizeable rank, which would keep the current ranking system still useful would basically accomplish the same.
What exactly is the use out of changing the individual performance ranks if you (sorry, for assuming again) are already showing at least every avatar down to poor automatically?
that's a fair point, which is my next project, as I just recently learned how I can reduce the amount of animator layers.
VRCFury has a tool for making some of them into direct blendtrees, if that is helpful.
Because it could only handle one parameter?
Other than that it works doesn't it?
First time I've heard about it just being broken.
I don't show all avatars down to poor, I use the shield level to not show shaders, animations, sound and particles by default for anyone but friends. Has less to do with performance and more with people spamming stuff which is quite annoying.
I don't think one additional rank would be easy to implement, compared to just adjust the limits for the existing ranks.
learned about that today, but I will create it myself, as I don't like tools messing with my animators too much, as I can never be sure if they ducked something up somewhere where they should not mess around. Also i'd like to understand how things work.
at least on a nice note that tool is completely non-destructive
as it works on duplicates of the Avatar not the original Avatar
you dont really learn anything from using tools. over getting your hands dirty fyi.,
that wasn't my concern, as I have backups ;)
But applying some tool to something complicated and then stuff doesn't work is usually harder to debug then to implement it yourself.
I don't get why individually customizeable ranks would help then?
You are already hiding most of the important things.
And it would probably not be that hard to implement since it would just be a "virtual" rank, just based on what limits you set in your settings.
If any of these limits are met the avatar is ranked Too Poor, client side.
That is very fair, doing it yourself is generally the better way to do it. (edit: should have added "in the beginning, when learning")
there still could be some benefit to be had for automating repetitious busy work
sure. but honestly i often find majority of tools. only slow me down lol.
hm... I suppose you could have a "meta" rank, with it's own limits, and if an avatar hits does limits it will rank that avatar to a specific default rank.
But that wouldn't fix the issue with an avatar that is for example ranked good otherwise but has 71k Poly, as it would also be ranked very poor but I would like to show.
You kinda need to override the default ranks, or make them somehow not affect avatars. And thinking about it, it don't think there is an easy or sensible way to implement or configure that (you mentioned earlier that it could confuse people, that certainly would ^^).
Adjusting the default ranks with custom values and calling that a "custom rank set" would probably be easier to implement and understand.
Specifically upping the polygon count feels like it should be on the horizon, it has been 5 years since they set it to 70k.
(People will complain it is too low no matter what they set it to though).
Actually it makes more sense to start from the beginning when you want to learn ;)
I have my fair share of experience, after creating over 130 Avatars over the course of 3 years, modifying shader code, and doing assets from scratch.
(and even having roughly 60 Avatars public in an avatar world, which most are rated medium, even after the VRAM ranking update).
upping the limit is not wise
especially since people would mostly be using that to stuff more toggles into their Avatar
I suppose getting a system that can count toggles cough https://feedback.vrchat.com/feature-requests/p/vrc-toggle-system-compatible-with-the-performance-rankings cough.
Would probably be better then.
Disabled and enabled objects should be counted differently.
what the?
I just wrote half an essay and the discord deleted it with "no spamming"?
as disabled objects only really occur a small cost.
Switch-case statement is what I based that feature request on.
Makes it possible for everything to be pre-computed like the rank already is, without being too indepth.
depends on the object ^^
But yes. That was my inital post about which caused that discussion
obviously the problem with disabled objects is that they still cost vram and memory etc if it has a texture
and so on.
issue is, if you do that in unity, with the SDK, that can be spoofed, if you do it at runtime, avatar loading will have an even bigger impact
and also don't forget improperly disabled constraints
the thing is. disabled objects disables anything it has on it or under it.
But would free up material slots (I think), meshes and polys and since the biggest complaint against the ranking system is toggles, that should leave people far less to complain about.
and well any attached objects via another object automaticly nulls it
yes, but some people don't properly disable constraints, because that component is on something they don't want to disable. So they just set the weight to 0
I addressed that in that feature request.
Check on load of avatar if the pre-calculated metrics is true and auto report it if it lies.
VRChat moderation can then just do a quick check and ban it.
disabled objects would still take up vram