Limit Materials not Polygons!
closed
AlphaSatanOmega
Since it has been observed by both the polygon and the particle restrictions that are/were placed, it is clear that it is possible for unity component data to be read in by the SDK.
And as bad performance and optimization lies on the side of the materials a lot more than anything else, materials per mesh should be limited.
As we can see in unity, when a mesh is selected, and you drop down the materials tab, you are given a number.
It would make much more sense and be much more beneficial to have the SDK read this number in and limit it to maybe ~15-20 maximum.
I would say that I see 15 as a realistic maximum given how much you
can
reduce materials. And <10 could be have a "good range" message like the <10k polygon message, Just to give the user feedback.Again, this is materials
per
mesh, as many people use other parts (weapons, props, etc.) on their avatar and something like 15 overall max could be too restrictive for users to be creative.In final, to reduce the amount of un-optimized avatars that can be uploaded, unknowing of their bad performance by the user, the limiting tactic should be changed. Instead of limiting polygons, limiting materials
per
mesh would be a much more wise decision.Log In
Aev
closed
The avatar performance systems implemented after this post was made address methods to limit polygons, materials, and many other stats.
ivankazuya
... Or you could just make texture atlases.
Cibbi
ivankazuya: did you read the post at all?
tae
Unless you are using different shaders on parts of your avatar, or have props (that will be separate meshes anyway), you do NOT need more than one material. Ever.
If you don't want to atlas you can just stitch textures and move the UVs.
The max material count should be somewhere around 5-10, with warnings above 3.
Every one of my avatars are one drawcall while maintaining their original quality. There is no excuse.
I do not understand why your suggestion has not been implemented when we have word from the VRChat team that polygon count does not really affect performance and material count does. Whether that's correct or not I am unsure but this is what the team themselves claim.
Cibbi
tae: there are also other reasons to have more materials than one, and a warning after 3 materials or limit to 5 materials is a bit too restictive, 15 materials active is a good limit that will not infect performance losses (at least not performance losses cause of the material count.
SB15SKG
We really really need more polys, I would love to see some models using more than 20k by now.
Cibbi
it would also be nice to have some general informations on how many dynamic bones are being used and update rate of them, some people just place them randomly on a bilion bones and that's causing lag even more than material count
hotbabe 13fcali
10/10
TheDunkShot
This also applies to seperated meshes on a avatar. Having seperated meshes on avatars can lead to really bad performance.
AlphaSatanOmega
TheDunkShot: Thats why I and many other people actively encourage joining meshes. This will just help reduce new people coming in with too many materials. Sadly cant stop separated meshes with a way like this unless we want people to be way to restricted when it comes to adding other stuff to avatars.
christian bauern
In fact I'd make it so that 10 drawcalls are recommended and 20-25 "should not be exceeded" - people should still be allowed to upload models with more than that however we should have an ingame slider or option to tick which replaces people above 25 drawcalls with a light model. Such people should see a sign above others head that their model is currently replaced for bad optimizing.
The only issue I see is particularly emotes/gestures that often activate a very unoptimized model/model (mmd dances
cough
). While I not necessarily think it's good to add such low drawcalls limitation to temporary emotes/gesture it would be at least good to have a counter/list who is currently in this room with how many drawcalls they are using and a given option to force their avatar into "save mode until restart or unticked or if their drawcall went back to normal for more than x seconds".While I'm totally for the freedom of everyone it's almost unbearable to stay in slightly crowded place all the more if that world itself is badly optimized too.
Just to give an idea how much difference an optimized character is against an unoptimized one:
Normal unoptimized MMD Model: 100-200 Drawcalls (we assume a joined Mesh because CATS is doing that by default otherwise this would crazy multiply although I wanna add I've seen enough Screenshots where this is not the case)
Dynamic Bones: Up to 100 - 120
Optimized MMD Model: 6-15 Drawcalls
Dynamic Bones: Up to 25-45
And that's all done by such simple steps that take maybe like 20-30 minutes. That's why I think it is so sad that we have to run around with such low FPS whenever the game itself is not really great at optimizing either it sure doesn't help that people throw in their part for free just because they're lazy and essential the devs allowing this to grant more freedom to newer users.
Schtiffles
christian bauern: drawcalls aren't a good performance measure, Google it. There's a reason the stats HUD in play mode show them anymore.
AlphaSatanOmega
Schtiffles: Then what is for this game? In unity all you get for a good indicator is the frame debug menu which gives you drawcalls, and each material and shader registers as a drawcall. When performance is talked about, even by the devs, it's in drawcalls. For this game in particular, what would be a better measure of performance per avatar when there isn't much info the game nor unity gives you?
hakanai
AlphaSatanOmega: short answer would be: time spent rendering.
Draw calls are only a useful measure if every draw takes the same time. But the reality is still that an individual draw call can be faster or slower than another one, depending on how much logic is performed in it, plus how many tris it is rendering.
For instance, if you're doing ray marching to render fractals, that can be quite expensive. One of my worlds has one draw call right now, I believe? And still grinds my 1080Ti down to 45fps.
AlphaSatanOmega
hakanai: Again, where would I view this info in unity or the game? Frame debug is the only thing I know in unity that gives you performance details.
Also one drawcall would mean there would be nothing but that fractal, plus it would only be one colour, so probably more than that, unless you can show me a screenshot of that number in unity's frame debug.
Lastly this game passes drawcalls through the CPU on 1 core, and the drawcalls from avatars are usually lightweight on the gpu (unless it's a gpu heavy shader, which is uncommon for general use), so it's the fault of the cpu where it's getting bottlenecked.
Edit: I asked around and got info on performance measuring, and now I'm aware that there is the profiler. But even still, it is not a good measure of performance for avatars. Lots of variables aren't known to the user since you just upload the avatar without knowing anything about the environment it will be played in. Also lighting environments can change which will vary gpu render time. Drawcalls are the simplest and most consistent information we have.
Cibbi
hakanai: You're right in a general case scenario where most of the times the limit is the gpu, but in this game so far most of the times you're limited by the cpu (in a usual day my 980 never goes up to 50% usage, meanwhile one core is being hammered), so the time spent by the cpu for the draw calls is a bit more valuable here since is the main limit so far.
hakanai
Cibbi: Yeah, I spend a lot of time working on one very GPU-heavy shader, trying to get it to the point where I can publish the world. So I'm just unusually familiar with the idea of having a world with _one_ draw call which still isn't fast enough to publish... :/