2020.9.29.1115 - SkinnedMeshRenderer optimization features, Russian & Norwegian
Some new optimization features for skinned meshes (also regular meshes! If you have a geometry heavy mesh, you can now automatically split it into two parts - one that's affected by blendshapes and the rest that's not. If only small portion (e.g. the face) is affected by blendshapes, this can give a significant performance boost. It comes at cost of extra drawcall(s), but for geometry dense avatars it will result in a net-positive impact.
To optimize your avatar, it's recommended to do following:
1a) Bake all separate meshes into one first where possible
1b) Use "Merge submeshes with same material" to reduce number of submeshes if you're using same material for multiple
2) Run ""Separate parts of mesh unaffected by blendshapes" on it. If the resulting non-blendshape part has much more geometry than the part affected by blendshapes, I recommend using this one. If not, just use the regular one and don't split it
Neos is now also available in Russian and Norwegian thanks to community efforts! There are also some initial Spanish localization strings, but right now it's incomplete. Some improvements for biped rig detection were made too as well as some bugfixes.
[h2]New Features:[/h2]
- Added "Separate parts of mesh unaffected by blendshapes" to SkinnedMeshRenderer
-- This will split the mesh into two parts - parts of geometry affected by any blendshape and parts without any blendshapes
-- This can be used to optimize geometry-heavy avatars which have only parts of them affected by blendshapes, by reducing how much geometry needs to be morphed by the blendshapes (based on report by @Reactant)
- Added "Merge submeshes with same material" to (Skinned)MeshRenderer
-- This will merge submeshes which share the same material on the renderer, reducing number of necessary drawcalls
- "Split into separate meshes by material" now works with skinned meshes (requested by @Turk)
- Added new SkinnedMeshRenderer bounds mode - Proxy
-- This uses local bounds of another skinned mesh renderer, referenced by the ProxyBoundsSource field
-- This is very efficient method (no per-frame calculations), useful in cases you have a big main mesh and you need the small meshes to be linked in visibility with it
-- For this to work correctly, the proxy and the source must be at the same position, orientation and scale in hierarchy
- Added Russian locale by @GhostZ36 and @BrotiwkA
- Added Norwegian locale by @RΞBOЯИ
- Added initial Spanish locale strings by @Skywind Kitsune
[h2]Tweaks:[/h2]
- Improved BipedRig detection heuristics, so it now accepts "feet" for the foot bone (based on report by @Dante)
- Improved search case matching on the backend - it will now check if records contain capitalized version of the search term (based on feedback by @ProbablePrime and others)
-- E.g. searching "avatar" will now match worlds with "Avatar" tag
- MeshRenderer inspector actions are now localizable
- Panner components now have default Repeat range of 1 (suggested by @H3BO3 and @Enverex)
-- This only affects new instances, existing ones are unaffected
- Merged Japanese, Esperanto and Chinese locale updates by @Melnus
- Merged German locale updates by @Elektrospy
- Merged French locale updates by @Archer
[h2]Bugfixes:[/h2]
- Added more diagnostics for errors in streams
- Fixed MeshX submesh splitting not correctly handling vertex colors
- Wrapped clipboard operations in Neosmon with exception guards, so any problems in them don't cause Neos to lock up (particularly when using Neos with Proton, reported by TiagoTiago on GitHub)
- Fixed VRIKAvatar not clearing internal _locomotionController when dequipped, causing incorrect behavior on the dequipped avatar (reported by @Hayden (PolyLogiX - ZyroDesign))
- Fixed ValueGradientDriver getting internally out of order when points are added or removed in some cases and producing invalid values (reported by @Earthmark and @A Monsoon of Babies)
- Fixed being able to undo avatar grabbing after the avatar is equipped, causing it to break (reported by @Hayden (PolyLogiX - ZyroDesign))

To optimize your avatar, it's recommended to do following:
1a) Bake all separate meshes into one first where possible
1b) Use "Merge submeshes with same material" to reduce number of submeshes if you're using same material for multiple
2) Run ""Separate parts of mesh unaffected by blendshapes" on it. If the resulting non-blendshape part has much more geometry than the part affected by blendshapes, I recommend using this one. If not, just use the regular one and don't split it
Neos is now also available in Russian and Norwegian thanks to community efforts! There are also some initial Spanish localization strings, but right now it's incomplete. Some improvements for biped rig detection were made too as well as some bugfixes.
[h2]New Features:[/h2]
- Added "Separate parts of mesh unaffected by blendshapes" to SkinnedMeshRenderer
-- This will split the mesh into two parts - parts of geometry affected by any blendshape and parts without any blendshapes
-- This can be used to optimize geometry-heavy avatars which have only parts of them affected by blendshapes, by reducing how much geometry needs to be morphed by the blendshapes (based on report by @Reactant)
- Added "Merge submeshes with same material" to (Skinned)MeshRenderer
-- This will merge submeshes which share the same material on the renderer, reducing number of necessary drawcalls
- "Split into separate meshes by material" now works with skinned meshes (requested by @Turk)
- Added new SkinnedMeshRenderer bounds mode - Proxy
-- This uses local bounds of another skinned mesh renderer, referenced by the ProxyBoundsSource field
-- This is very efficient method (no per-frame calculations), useful in cases you have a big main mesh and you need the small meshes to be linked in visibility with it
-- For this to work correctly, the proxy and the source must be at the same position, orientation and scale in hierarchy
- Added Russian locale by @GhostZ36 and @BrotiwkA
- Added Norwegian locale by @RΞBOЯИ
- Added initial Spanish locale strings by @Skywind Kitsune
[h2]Tweaks:[/h2]
- Improved BipedRig detection heuristics, so it now accepts "feet" for the foot bone (based on report by @Dante)
- Improved search case matching on the backend - it will now check if records contain capitalized version of the search term (based on feedback by @ProbablePrime and others)
-- E.g. searching "avatar" will now match worlds with "Avatar" tag
- MeshRenderer inspector actions are now localizable
- Panner components now have default Repeat range of 1 (suggested by @H3BO3 and @Enverex)
-- This only affects new instances, existing ones are unaffected
- Merged Japanese, Esperanto and Chinese locale updates by @Melnus
- Merged German locale updates by @Elektrospy
- Merged French locale updates by @Archer
[h2]Bugfixes:[/h2]
- Added more diagnostics for errors in streams
- Fixed MeshX submesh splitting not correctly handling vertex colors
- Wrapped clipboard operations in Neosmon with exception guards, so any problems in them don't cause Neos to lock up (particularly when using Neos with Proton, reported by TiagoTiago on GitHub)
- Fixed VRIKAvatar not clearing internal _locomotionController when dequipped, causing incorrect behavior on the dequipped avatar (reported by @Hayden (PolyLogiX - ZyroDesign))
- Fixed ValueGradientDriver getting internally out of order when points are added or removed in some cases and producing invalid values (reported by @Earthmark and @A Monsoon of Babies)
- Fixed being able to undo avatar grabbing after the avatar is equipped, causing it to break (reported by @Hayden (PolyLogiX - ZyroDesign))


