The next release of FurryVNE will bring some major improvements to character loading and body editing while also reducing memory footprint and size on disk (exports). See the images for comparisons:

(Editing is about 3-4 times faster compared to before. Here's the same thing but in video form instead.)


(Newer export takes less space.)
Special thanks to Blacky for providing these comparison videos and data.
When assembling the main character mesh we are essentially combining several separate meshes (body, head, hand, feet, sheath) into a single one. All these meshes have several hundreds of blend shapes that need to be combined when added to the newly combined mesh. Previously, we have been using Unity APIs for doing this (both retrieving and setting blend shapes). As it turns out, these APIs are not very performant. Just adding all these blend shapes accounted for more than 60% of the processing time when loading a character, and about 90% of the time when editing a character (for example swapping head model to something else). Perhaps this was acceptable before, as we did not have that many shape keys (blend shapes) that needed to be combined and added as we do now. But as the number of blend shapes have kept on increasing, these times have also increased to the point where the editor feels very slow and frustrating to use.
Now, we've made several changes to make this a much better experience for the user:
Custom blend shape system & reduced Unity API usage
We now only use the Unity APIs for retrieving mesh data and blend shapes, but we don't use it to add any blend shapes to unity mesh object itself as that is very slow. Instead, we use our own blend shape system for applying blend shapes at runtime.
Deferred blend shape processing
Instead of retrieving and combining all these blend shapes and adding them to the new mesh up front during the mesh combining phase, we simply just only combine the mesh data (vertices, triangles etc, no blend shapes).
Then, when we are in need of using a blend shape (for example when applying a body type), this blend shape is created on the fly by querying each individual mesh (body, head, hand, feet) and then combined and cached and added to our own blend shape system. This means only the shapes that are actually used will be retrieved and then cached for quick usage.
If this shape needs to be retrieved in the future, it is already cached in our system so we can circumvent using the Unity APIs.
This also happens for exports, meaning instead of having to put all the potentially used shapes into the export file (for creation of mesh upon load), we can simply omit all that data and create it on the fly when requested.
This makes exports smaller.
These changes will provide a significant improvement for FVNE fans and will go live in the next build, which we internally are calling "1.0.0". This is the final build before we start working on migrating our project to a different version of Unity and a more modern rendering pipeline which will open up doors for all sorts of new features, including (but not limited to) custom levels and VR.
Stay tuned for more news! In addition to these improvements, we have several new exciting features coming for "1.0.0"!
All the best.
- odes
Blacky
2025-06-02 05:23:42 +0000 UTCBrownmane
2025-05-31 18:58:47 +0000 UTCScrambledMons
2025-05-28 13:25:06 +0000 UTCWherethelambsaus
2025-05-28 11:06:47 +0000 UTC