Remove unused blendshapes on upload to reduce download/VRAM size
S a c r e d
With new VR headsets over the horizon rumored to include eye and face tracking, more and more avatars will release with the required blendshapes already created, whether for SRanipal, ARKit, or future systems. This is great for expressivity, but all of those extra blendshapes will start to have an impact on the download size of avatars, but most importantly VRAM, since meshes live in VRAM when they need to be rendered.
I propose a system where the VRCSDK could scan an avatar's animations on upload and note all of the blendshapes used in any animation (this would also include the ones in the avatar descriptor). Then, it would create copies of the skinned meshes found on the avatar, swap them for the duplicates, and remove every unused blendshape. Because those blendshapes are not being animated in any way, and there is no way to drive blendshapes besides animations, it doesn't make sense for them to exist on the avatar in game, so this should not affect functionality.
This system should be opt-out and not opt-in, since people would not use it unless they know about it. This would also give the option to turn it off if there is a specific reason to do so.
Log In
Zarphus
AFAIK, VRCfury now offers this as a feature, and it does so non-destructively when you upload, leaving your local copy untouched.
Skadiちゃん
This would destroy MMD worlds.
They rely on avatars having Blendshapes with certain names.
They would also get removed it if not used.
Optimisation like that should be optional with a 1st or 3rd party tool.
If it's opt-out instead of opt-in then it would ruin those worlds for most people that are not aware of it.
If most avatar stop working there then people will stop making those worlds.
One solution would be to White List them. But not sure if that's something a 1st party option should do.
They should rater add community optimisers as optional packages to the VCC.
DarkSwordsman
Skadiちゃん: I agree. I think at least starting with an opt-in method would be the best approach here.
Nіyah
This, very much, please. Should be doable on build time just like VRCFury do, even if community tools exist, the SDK should do it by default :)
SplitScream
I think this would be better as a unity tool than an feature tacked onto upload, especially because of how VRC's upload system works
✩Frisk✩
Is your Download Safety Setting Inverted or something?
Cuz i've seen models who file size are at 1MB with some blendshapes used for facial and the rest not being used doing just fine.
While another who didn't use any facial blendshapes having file size of over 100+ MB with animations.
Most of the file size are driven thru Animations, Textures, Materials, and Bones. I dont see how Blendshapes contribute heavily to file size.
unless someone can prove me wrong that " Skin Mesh " controlled mostly by Bones is heavier than blendshapes to the face.
Zеkk
✩Frisk✩: I don’t think they have a large file size impact per say, but I do believe they have a large performance impact.
I’ve heard several people who I trust to know what they are doing say that using blendshapes for something like clothing toggles is significantly less performant than simply hiding the mesh, or even using invisible materials.
If a single clothing blendshape is less performant then showing and hiding the mesh, then that would imply that every extra blendshape on the face is somewhat similar to having an extra clothing toggle. So if a ton of avatars are running around with “clothing toggles” that will never be used, then removing them on upload is probably a good idea. There isn’t a reason not too.
Then again, this could be completely wrong as I’m basing my opinion on information I’ve heard in passing from others, and some assumptions. Nothing data based.
DarkSwordsman
✩Frisk✩: Blendshapes contribute to the mesh size, which count in VRAM at least.
For example, a friend of mine has 120 MB of texture memory. However, their total VRAM usage is 250 MB due to the body and some clothes having dozens of complex blend shapes.