[845] Avatars with an Active Blendshape causes a significant loss of performance
complete
Mom Spaghetti?
VRChat 2019.3.1p2, build number 845
(Pretty sure i first noticed this issue early this year)
Specs
Windows 10 Enterprise
i7 4790k 4.4ghz
Asrock z97 pro4
GTX 980 ti 1286mhz
ddr3 2600mhz
Tested with Oculus Rift&Desktop
(Tested with lipsync&blink)
1.More polys on the skinned mesh containing the active blendshape comes at a very significant cost
2.Normals and Tangents contribute to the performance loss which is derived from polys hence more polys=bad (they both contribute a significant cost)
3.even if you have zero normals and tangents it will still affect performance just at less of a cost
4.the difference between 10k and 20k polys is quite significant (perhaps the issue is linked to that)
5.Separating meshes for blendshapes to reduce polycount for active blendshapes helps significantly
6.Mirrors and cameras recalculate it
7.the quantity of shapekeys and vertex groups seem to make a negligible difference "if any"
8.Performance loss isn't local
tldr. ActiveBlendShape+ManyPolys=bad
Steps for reproduction:
1.have a 60k poly skinned mesh with an active blendshape (doesn't have to be 60k but higher the more obvious the loss)
2.disable any active blendshapes and you should see a gain
(Blink will always be active if your mesh is named "Body" and has shapekeys)
// more Mirrors will give you an easy to see result
theoretically or from what i've read about blendshapes it shouldn't be creating much of an impact if any
Ultimately this loss could be "working as intended" but i doubt it
// Image with the correct formatting for the post https://cdn.discordapp.com/attachments/608876139716411392/618647212867715082/Discord_2GOI7luFj6.png
Log In
StormRel
complete
Zevvy
You don't happen to not be changing anything on your actual model options of the .fbx, do you? Per default the version of unity sets it so it calculates blendshape normals in realtime. Might wanna check on that if you haven't already and set it to either legacy mode or importing normals directly instead of calculating them - or both.
The default has quite the impact on avatar size and performance.
100の人
This problem probably solved in VRChat 2019.3.3 Beta (Build 871 / Unity 2018.4.9f1).
I reproduced this problem in VRChat 2019.3.2 (Build 864), but did not in Beta.
owlboy
100の人: Have you found this holding true?
GotoFinal
And then try to optimize your model by separating meshes and bam, you get worse performance rating and people block your avatar. That's why most people don't care about rating when making models, in most cases it just completely irrelevant.
ACiiL
This a particular way to lose performance. I love to see more people do tests and verify how bad the performance loss can be with typical avatars polycounts and setups.
Mom Spaghetti?
"5.Separating meshes for blendshapes to reduce polycount for active blendshapes helps significantly" basically it's possible to optimize it to some degree but requires you to create additional skinned meshes but it works in contrary to the performance ranking system with the logic less skinned meshes is better
MOZ1987
Mom Spaghetti?: what i still do to this day: skinned mesh render component: quality one bone on mech avatars with digital weight paint, 2 bones if human and analog weight paint, but my models are optimized for that in blender, plus no skinned motion vectors and dynamic occluded.
but as i said in blender i optimized my models by mixing shapekeys i need for expression, removing all the one i don't need, and have visems and blinking ones on a separate face mesh.
result is:
body mesh, high poly count, no blendshapes
face mesh, a few triangles with all visems and stuff
MOZ1987
i don't mix in unity i mix in blender, and export only what i need, ingame, only one shapekey is active