1. Neos VR
  2. News

Neos VR News

2021.1.27.369 - Fix for broken P2P transfer for imported meshes, more fixes

A hotfix for newly imported meshes not showing up to other users, as well as few other bugfixes and a tweak that I did in the meanwhile.

Compatible with previous build, but if you have people in the session (or the host) on the previous one you'll still have issue with the freshly imported meshes not appearing.

[h2]Tweaks:[/h2]
- Improved string beautify function to avoid splitting multi-digit names (e.g. Projection360 becoming "Projection36 0", as reported by @Rue Shejn | Artist 3D) and add space after single-digit split ("Static Texture 2DProvider" -> "Static Texture 2D Provider")
- Added missing descriptive names to Mobile, Linux and Host badges (based on report by @Epsilion)

- Merged Russian locale additions and fixes by @Shadow Panther [RU/EN, UTC+3]
- Merged Korean locale additions by @MirPASEC
- Merged Japanese locale additions by @かず (kazu / GitHub: kazu0617)
- Merged Esperanto and Chinese locale additions by @Melnus

[h2]Bugfixes:[/h2]
- Fixed P2P asset metadata negotation getting stuck for Mesh and Shader metadata, causing any newly imported meshes to not appear for other users (reported by @Epsilion, @Punapple, @Soylent and @Nexulan | Community Manager)
- Fixed mesh metadata generation throwing exceptions for meshes that have no vertices or invalid indicies
- Fixed exception in AvatarHapticSourceManager when the ActiveUser field is null (found in a log from @Nexulan | Community Manager)
- Fixed DynamicBlendShapeDriver breaking when it's configured with blendshapes that don't exist on the target mesh (found in a log from @Nexulan | Community Manager)

2021.1.26.1308 - Mesh metadata caching, improved GLTF 2.0 support and more

Some mesh related improvements! The mesh assets now use the asset variant system to generate, download and cache metadata, rather than computing them every time the mesh load. This should provide a bump in performance when loading worlds/avatars/items. It might take a few hours to get the full effect, as the metadata gets generated on the first load of each unique mesh.

The Assimp library for 3D model import has been also updated to latest version from the source after more than half a year, with tons of bugfixes and additions, including much improved GLTF 2.0 support - rigs and blendshapes should now import correctly with names. There was a regression for some FBX files with animations, but I managed to fix that one in the library, but let me know if you run into a problem with some models that worked before.

Also a bunch of other tweaks and bugfixes as usual. Not too many in this build, I plan on working on some more desktop stuff and wanted to push this out so it doesn't have to wait for that.

[h2]Optimizations:[/h2]
- Moved mesh metadata computation to the asset variant system, improving performance and lowering CPU/memory usage when loading meshes
-- Bounding Boxes, Bone Metadata and approximate bone bounds are now loaded from cache/cloud, instead of being computed on every single load of the mesh
-- Other metadata is generated as well, which will allow future additions of mesh variants
- Drive system will no longer unnecessarily request links when the target is set to null to avoid wasting CPU and memory resources

[h2]New Features:[/h2]
- Updated to the latest version of Assimp model importer library from the source (previously requested by @Karel | CEO and others)
-- This includes over a 1000 commits since our last update, with more than half a year of updates and should provide overall improvement for different 3D model support
-- This includes significant improvements to GLTF 2.0 support, for example fixing lack of Blendshape import support and some blendshapes importing without names (reported and sample models provided by @Aegis_Wolf | Art Director, @MattyK and @3x1t_5tyl3)
-- This build includes a custom bugfix for FBX animation regression introduced in the new version of Assimp, to prevent some FBX animated models from being mangled
-- Note that the animation speed for FBX is assumed to be 1000 ticks per second, as it seems to be decoded wrong for some models. If you encounter some models playing animation too slow or too fast, let me know
-- Recompiled the Linux version of Assimp64.so as well using Ubuntu (WSL), which can make model import work on Linux (based on previous feedback by @happysmash27, currently untested)

- Added "Adjust Saturation" and "Adjust Value" processing to static textures (based on request by @Veer | Chief Moderation Officer)

[h2]Tweaks:[/h2]
- Improved SimpleAvatarProtection security (based on report by @epicEaston197 and @jeana)
- Added Pin button to the Audio Stream dialog (requested by @Tatsu Kimiero)
- Saving current avatar is now blocked when the world prohibits any saving of items (based on feedback by @orange)
- OnlineUsersCount now has UsersInPublic, which provides info on how many users are in public worlds (requested by @Alex from Alaska)
- Added descriptive names to badge objects (requested by @Earthmark)

- Merged Korean locale update by @MirPASEC
- Merged Japanese locale additions by @Aesc
- Merged Esperanto and Chinese locale additions by @Melnus
- Merged Finnish locale additions and fixes by @Napo
- Merged French locale update by @brodokk
- Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]
- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged Estonian locale additions and tweaks by @Meron
- Merged English locale tweak by @rampa_3 (UTC +1, DST UTC +2)

[h2]Bugfixes:[/h2]
- Fixed "Start Streaming" button not using the localized string (reported by @かず (kazu / GitHub: kazu0617))
- Removed deprecated SimpleViveBasePositioner (based on feedback by @Psychpsyo)
- Added explicit ordering to Undo steps, fixing the Undo system getting messed up in some cases when the user leaves and rejoins
-- This fixes the Undo function randomly breaking (reported by @Enverex, @Robyn (QueenHidi) and @Hayden, cause discovered by @Shifty | Quality Control Lead)
- Fixed potential incorrect serialization/deserialization of texture filtering type on texture variant descriptors
- Fixed being able to transfer objects with SimpleAvatarProtection out of the world by grabbing them and switching to another world (reported by @Dante and others)
- Fixed race conditions when requesting assets in the background, when the asset provider parameters change before the request is finished (found in a log from @DJNightmares)
- BooleanValueDriver now has FalseValue and TrueValue initialized with proper defaults for each datatype (particularly floats), to avoid having a degenerate value by default
-- This fixes BooleanValueDriver corrupting rotations when one of the values has not been changed from the default (based on report by @Zyzyl)
- OnActivated and OnDeactivated LogiX event impulses are now scheduled to fire after the event itself finishes propagating
-- This fixes various data model corruptions by making changes to the scene in this event (e.g. adding new children, as reported by @chemicalcrux)

Desktop audio streaming, Matcap for XiexeToon, Mentor Network, MTC Avatar Room

Hello and welcome to another weekly update!

This week we have a few exciting things for you. Neos now has the ability to easily share your desktop audio to other users in full stereo with high quality, letting you stream live music to your hangout worlds, run live DJ events and do lots of creative things that we haven’t even thought of!

We made some improvements to the shader asset system as well, making it much easier for us to update shaders. Thanks to those changes, we integrated the Matcap support in Xiexe Toon shader, as well as ColorMasking and using secondary UV’s, added PBS stencil and made all the filter shaders usable in UIX with full masking support.

We’re also introducing a new Mentor Network, a way for community members to get better visibility and communication tools to help out new users. If you’re interested and would like to apply, check out details below.

The avatar lobby for the new version of Metaverse Training Center has made significant progress. There’s still work to do, but you can check out the work in progress on the new environment below. We have some more details on progress on the desktop mode as well.

[h3]Friday Livestream - showcasing MTC avatar lobby and announcing the mentor network[/h3]
[previewyoutube][/previewyoutube]

[h2]Audio Streaming - stream your desktop audio in high quality[/h2]
One of the major new features added this week is the new ability to easily stream your desktop audio into your worlds in full stereo and with higher bitrate than used for the voice. Simply click the new “Stream Audio” on the Home screen in your dash, select the audio device you want to stream, adjust the target bitrate (goes from 2.5 kbps all the way 500 kbps using the Opus codec) and hit “Start Streaming”.

Using this feature you can easily stream music from your desktop in your social hangout worlds or do live DJ events without need for any complex streaming setup or external software. The system supports both audio inputs as well as capturing audio playback from your system, giving you great flexibility for the setup.

The streamed audio is independent of your voice data as well, so you can still talk with others as usual, switch to whisper or mute yourself, without affecting the audio stream. The only caveat is that you should use a different audio device than the one that Neos sends it sound to, otherwise you’ll be streaming everyone’s voices and in-game audio as well.

Streamed audio data is also treated the same as any other source, so you can easily plug it into various visualizers and build audio reactive worlds. To help this along, the streaming control dialog also serves as a proxy to the audio data, allowing you to drop it directly into the inspector. To stop the streaming, simply close the dialog spawned in the game.

We hope that this new feature brings a lot more utility and some exciting use cases, not only to the WaveXR Resident DJ community that has been exploring Neos recently and has requested this feature for their events, but to everyone else who was previously looking to bring their music to Neos or even perform live.

[previewyoutube][/previewyoutube]
It's a real world devlog! Note that this shows an earlier work in progress version of the feature, with some bugs and without the UI fully finished.

[h2]Matcap support for Xiexe Toon, Filter shaders in UIX, PBS Stencil[/h2]
Since we have accumulated numerous requests for additions, tweaks and fixes to various shaders in Neos, we have decided to fully transition our shader asset system to the asset variant system, used by other types of assets like textures or cubemaps.

Previously the shader metadata and individual variants were uploaded to a special location and used special keyword URL’s, rather than regular neosdb:/// ones. This made any updates to shaders a tedious process, as we had to manually update those files and URL’s in the code.

By treating the shaders more like normal assets, with the cloud system extracting and managing the metadata and variants as it does with other assets, not only has this process been greatly simplified, but it fixed some long standing loading issues and improved performance, allowing metadata to be cached, rather than fetched from the cloud at every startup.

Thanks to these changes we were able to fulfill several of the requests. The Xiexe Toon material in Neos now has MatCap support, as well as ColorMasking and ability to switch to secondary UV’s on the mesh for each individual texture map.

An example of the use of Xiexe with Matcap in Neos, screenshot courtesy by DAWKY

Another example of the use of Xiexe with Matcap in Neos, screenshot courtesy by DAWKY

The filter materials, like HSV, Invert, Blur, Grayscale, LUT and many others were also extended with stencil support, which now makes them fully usable in UIX with proper mask support. This will allow for more flexibility and customization when building both your own custom UI and making official ones.

Other changes include also new PBS Stencil shader, which is a vanilla PBS material with added stencil support for masking effects and some bug fixes for other shaders ignoring texture scaling options.

[h2]Introducing the Neos Mentor Network[/h2]
The Neos Mentor Network is here! The Mentor Network is an initiative for the Neos Community to have representatives in the community new or old, who like to show new users around and help them get started, inform fellow community members and also point out problems that Neos has as a whole so that we can make the platform better for all.

The Mentor Network will act as a place where other mentors can connect and also improve their craft. Neos is a really big platform and we all understand as things scale up, managing it and making sure things go smoothly can be problematic. It’s no lie that sometimes Neos can be really overwhelming, but once you’re past that initial barrier, things can be so much fun and oh so chaotic in a way that makes VR awesome!

Do you like to contribute to Neos? Do you like to help out the community? Want to see it grow or learn some better tools of the trade to help out and coordinate with others? Then send in an application and join today!

Of course if you prefer helping other users independently of the network, that’s perfectly fine as well, there are lots of different ways to contribute and help out the community! We’re proud that helping each other is one of the core values of our community and we hope it continues to be as it continues to grow, with this program making it easier to make some of the members easier to approach for new users and providing tools for better organization and team communication.

The mentor network is managed by Turk, so if you have any questions about the program or any concerns, please direct them to him. Here’s a sneak peak at what the badge will look like. It’s not fully final yet, so expect the design to change!



[h2]Progress on the MTC Avatar Lobby[/h2]
We have made significant progress on another part of the reworked MTC 2.0, our tutorial world to help new users - the avatar & social room. The old MTC avatar room is one of the most visited parts, so it was an easy decision to rework it next.



The new version provides the user a comfortable environment, where they can learn how to set up their own avatar, but also hang out with other users. We often see users hanging out in the avatar room with the community members helping them out, so we wanted to make it into a comfortable environment.



There is still work to do, but the environment has been coming along nicely. If you’d like to see it in action, check out the recording from our Friday’s livestream where we showcased the progress so far. We hope to have a finished version soon and set it live.

[h2]Fixing choppy voice, particle system freezes, cloud and more[/h2]
Thanks to working on the audio streaming feature, we’ve been able to find a long-standing bug in the audio streaming code, which would cause the voice to randomly become very choppy for some users. This issue would affect some users more than others and was quite difficult to diagnose, but as of the latest build it should be completely gone.

We traced down another of the elusive bugs, causing a random freeze on particle bursts for any particles with collisions enabled, after long periods without any particles with collision emitted. We have thrown in a few CPU and memory optimizations for the multithreading system handling those collisions as well.

Another of the notable fixes and optimizations this week has been to the cloud infrastructure. Earlier this week the cloud service started degrading significantly. We have investigated this issue and traced down the culprit to a combination of a poorly coded bot and an edge case in the database SDK. We have corrected both of the problems, while also adding new internal diagnostic tools to help analyze any future cases like this.

We also finally have some data on the cloud cost optimizations that we implemented last week. So far it seems really promising, with the cost being significantly reduced thanks to more efficient structure and elimination of unnecessarily wasted bandwidth.



Apart from these notable fixes and improvements, there were dozens of other bug fixes, tweaks and additions. If you’d like to learn more, check out the #neos-update channel on our Discord or the patch notes on stream.

[h2]Progress on the desktop mode[/h2]
The desktop mode is still heavily in the design phase, but we have made some good progress on that end as well. As we went through all the different subsystems and how to abstract them for desktop use, it became obvious that implementing at least a partial version of an input binding system is the best way forward.

This will help separate concerns and reduce desktop-specific code in a lot of the codebase. For example a locomotion module can only be concerned with the direction the user wants to move in, axes around which they want to turn and whether they want to jump, but not which combination of inputs achieve this.

By having this computed in the input binding system and only passing the resulting directional and boolean inputs, the logic can be greatly simplified. Given the previous example, the movement direction can be computed using a controller joystick and head direction in VR, while using the mouse and keyboard on desktop.

Once implemented, we can also expand this system to allow customization, allowing both desktop and VR users to customize how Neos is controlled. This is something that would come later though, as our initial goal is to first do this abstraction internally and nail down the details of the system.



[h2]Community Highlights by Turk[/h2]
Hello Neos Community!I hope your week has been fantastic. People this week have been going crazy for visuals. So, I’d thought I’d use this weekly update to show off some of the crazy visuals people have been making and doing in Neos lately :)

[h3]Curving Bullets by orange[/h3]
First up is Orange’s Curving Bullet world! Ever watch the movie Wanted? Wanted to feel like a super train assassin who can Curve the bullet? Want to flex on your friends and get the high score? Then come on down to the Curving Bullet Range and show off some guns! Thank you Orange-san for your efforts!


https://twitter.com/mikan3134/status/1351125817615654914

[h3]Kaliedoscopic Playground by Sirkitree:[/h3]
Long time Neos veteran and All-around Mandala-Master/Enthusiast sirkitree thoroughly entrances us with his craft. In His World KaliedoScopic Playground he goes into showcasing how he makes some of his visuals in Neos, and how easily you can too if you’d like to add to the wonderful entropy that these visuals bestow on you as you witness them. Thanks sirkitree for the world!



[h3]Club VibeZ by QueenHidi[/h3]
A exciting update from QueenHidi, she’s updated her Club VibeZ world to include more visual effects for those who want to party and those who want some sights to their DJ sessions! Watch as the winding tunnels send particles all over around you, and ebb and flow to the beat entrances you. Many of you might not be aware, but the WaveXR Community are setting up shop over in Neos, and this was made to have them feel more at home and teach them some of the ropes! So Thanks QueenHidi


------------------------------------------------------------------

Anyway this is all for this week! We'll see you at the next one with more cool stuff and developments and as usual, big thanks to everyone supporting this project, whether it's through Patreon, Twitch, GitHub, Discord, helping the community in-game or just simply being part of the platform!

See you next week!

2021.1.24.1266 - Desktop audio streaming, choppy voice fix, many fixes & tweaks

Hello, got a nice build for you, finally picking up some steam on things! :smile:

You can now easily stream your desktop audio to the world, in high quality (customizable bitrate) and full stereo! This should be ideal for streaming music/podcasts into social worlds, soundboards and other effects!

I've also found a problem in the new shader variant system which made the shaders take a few second to load, since the metadata was being fetched from the cloud every time (and inefficiently at that, using a fallback method) and not cached locally, which should now make them load much faster once they're locally cached and reduce some uncessary network chatter.

There are a bunch of bugfixes for some things that have been elusive for a bit. The random choppy voice issues should now be gone (unless they're caused by poor network), e.g. when using VoiceMeter or some audio devices, thanks to poking around with the audio stream system. Also the random freezes with particle systems are gone now!

There's a bunch more stuff as well and more coming hopefully soon!

[h2]New Features:[/h2]
- Added new "Stream Audio" tool, which allows you to easily stream your desktop audio (or another audio input device) to the world in high quality and stereo (based on request by @Scott Marshall on behalf of the WaveXR DJ community and previous discussions with @Tatsu Kimiero, @Zane and others)
-- This can be accessed through the "Tools" facet on the main dash, same location as "Create New World", "Avatar Creator" and others
-- You can select which audio device you want to stream and the desired bitrate (from 2.5 kbps to 500 kbps, the stream is using Opus codec). Both settings are persistent.
-- The stream is in full stereo rather than mono used for the voice
-- Once you start the stream a simple "Audio Stream" dialog will spawn in the world (quick simple UI for now, will be updated in the future)
-- You can toggle the streamed audio between spatialized (coming from the dialog) and broadcast
-- You can toggle whether the streamed audio plays for yourself or not
-- You can also adjust the audio volume coming from the dialog
-- To stop the stream, simply close/delete the dialog. Dialog is non-persistent and will destroy itself when the user leaves
-- The dialog is a reference proxy to the audio stream data, allowing you to drop it as a source in the inspector
-- The audio stream is completely independent from your microphone, allowing you to talk, use whiper or mute yourself as usual, without interrupting the audio. Switching to another world will interrupt though (this can be changed if necessary)
-- The audio stream is relayed through the host same as voice. Make sure there's sufficient bandwidth for your chosen bitrate and number of users.
-- It's heavily recommended to use another sound output (e.g. a virtual one) from your VR output, otherwise you'll stream in-game audio back into the game
-- The data streamed this way is raw as it comes from the device. No normalization, noise gating or denoising is applied.
- Added "AverageCodecSamplesPerSecond", "AverageReadSamplesPerSecond" and "AverageWriteSamplesPerSecond" to AudioStreamMetadata
-- These indicate average number of encoded/decoded samples per second and number of locally read/written samples respectively
-- This is measured at 10 second intervals
-- This new info is also shown in the inspector
- Streams are now internally destroyable
- Added Neos Mentor badges and nameplate colors (mentors have green outline with white center)
-- Currently the badge is not yet fully final and will likely change in the upcoming days
- Added ++ and -- action nodes for float datatypes (based on feedback by @Psychpsyo)
- Added "UseFilteredData" to LocalAudioDeviceStream to allow passing raw unfiltered data

[h2]Tweaks:[/h2]
- Inventory permission notifications (not allowed to save, spawn or swap avatars) are now localizable
- Removed audio-stream skip-ahead mechanism for high latency compensation in cases of high audio noise and constant transmission
- Set default primary controller to Right instead of Left (suggested by @Shifty | Quality Control Lead)
- Increased the max displayed message length to 512 from 128 (based on feedback by @Veer | Chief Moderation Officer)
-- Note that this is just a quick hacky change and might still be kinda weird until the UI is reworked
- Renamed ++ and -- operator nodes to +1 and -1 to avoid confusion with ++ and -- action nodes
- Public banned users will now show in user search, allowing people to find them and add as a contact and added a separate type of ban which prevents the user from showing up in search (based on suggestion by @H3BO3 and others in the moderation team)
-- This allows more fine-grained moderation control, only preventing user from being listed in search when really needed (e.g. offensive user-names)
- Merged Korean locale additions and tweaks by @MirPASEC
- Merged Japanese locale additions and fixes by @Aesc
- Merged Esperanto and Chinese locale additions by @Melnus
- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged French locale additions by @brodokk
- Merged Russian locale additions and tweaks by @Shadow Panther [RU/EN, UTC+3]

[h2]Optimizations:[/h2]
- Optimized upload finalization on the cloud worker to avoid inefficient synchronous IO and reduced async overhead when extending computation for larger uploads
- Added caching of completed upload tasks to the cloud worker, to speed up disposing of already finished uploads in the queue when there are duplicates
-- This should fix some cases of uploads taking long time to finish when the processing queue gets flooded with many items
- Type member editor now uses fully qualified type string when displaying the type, which allows the type string to be reused as input (based on feedback from @chemicalcrux)
- Optimized multi-threading synchronization and handling for particle system collisions to potentially reduce random hitches and improve overall performance
- Optimized memory usage for particle systems with collisions that have a very high amount of max particles, but don't have that many active
- Fixed list particle system collision job data accumulating endlessly when there are particle systems with collisions, but no active particles, causing a significant hitch when the particles are spawned next time, with duration of the hitch proportional to how long ago they were last spawned (reported by @Lewis Snow | Lead Audio Engineer, @Rue Shejn | Artist 3D, @H3BO3, @Turk and others, with replication case found by @Shifty | Quality Control Lead)

[h2]Bugfixes:[/h2]
- Fixed audio encoding skipping a chunk of samples when encoding audio frames when number of available samples isn't a multiple of the framesize and the operating buffer has been previously enlarged to handle more frames than are currently being encoded
-- This should fix random cases of glitchy/choppy voice audio with certain users (previously reported by @Rue Shejn | Artist 3D, @Zephyr.С, @Shifty | Quality Control Lead, @Zane, @Hayden and others)
- Fixed invalid frame size calculation for encoded audio streams with multi-channel (stereo and up)
- Fixed SmoothValue misbehaving when first driving rotation due to invalid default quaternion (reported by @Zyzyl)
- Fixed XNOR node with two inputs behaving as XOR (reported by @Rubik and @Ballistic)
-- Existing instances of XNOR will be auto-converted to XOR to preserve their old behavior
- Fixed red grab interaction laser not showing up when there's GrabBlock in the higher hierarchy, but the pointed grabbable is below this block (reported by @Earthmark)
- Fixed cloud backend missing endpoint for fetching a batch of shader metadata, resulting in slower shader loading due to having fetch the metadata individually
- Fixed Neos not caching any asset metadata locally when it has been fetched individually from the cloud, causing it to be fetched next time again
-- Combined with above, this resulted in shader metadata not being cached locally at all, resulting in a noticeable delay when loading shaders and unecessary rise in API traffic (this is separate from generating fresh variants for the first time, this process will still take longer, but only ever happens once for each unique shader variant)
- Fixed "JumpToUser" permission incorrectly causing the "Respawn" button to gray out for ther user (reported by @Zyzyl and @Rukio)
- Fixed Component Attach dialog being usable by guests (reported by @Psychpsyo)
- Removed accidentally saved log file from Neos standard assets (reported by @Epsilion)
- Broke FireOnChange, FireWhileTrue and ImpulseInput nodes when they're already broken (Disabled) so they don't send impulses in this state (reported by @Psychpsyo)

2021.1.22.1352 - Matcap, UV0/UV1 & ColorMask support for XiexeToon, PBS Stencil

Sorry for the smaller build today, it took a fair amount of time, but here are a bunch of shader updates! Based on popular demand, XiexeToon now has matcap support! I've also added ColorMask support and secondary UV support since those were popularly requested features too. Let me know if you run into any issues with those.

The filter materials now also have stencil support and can be used with masking in UIX! This should allow for a bunch of nice effects. There is also new PBS Stencil material too.

There are also some minor bugfixes based on recent changes too, which should solve some problems with the shaders loading and potentially some other things getting stuck.

[h2]New Features:[/h2]
- Integrated Matcap support from XiexeToon (requested by @Turk, @DAWKY, @WolfYears101, @RoxyBoxxy, @Elektrospy, @GearBell, @Snooper, @chemicalcrux, @Engi, @Robyn (QueenHidi), @Princess, @jeana, @orange and others)
-- To use, simply assign "Matcap" texture
-- MatcapTint has been integrated as well
-- Note that it's recommended to switch texture to at least Trillinear, so you get blending between different smoothness levels
- Added ColorMask support to XiexeToon (reuqested by same as above)
- Integrated secondary UV support from XiexeToon (requested by @Elektrospy and others)
-- You can switch to second set of UV's for Albedo, Normal, Metallic, Thickness, Occlusion and Emission Maps
- Added PBS Stencil material (requested by @Sharkmare)

- Filter materials now have stencil support and can be used with masked UI (requested by @Hayden)
-- Following materials were extended: Blur, Depth, Gamma, Grayscale, HSV, ChannelMatrix, Invert, LUT, Pixelate, Posterize, Refract and Threshold

- Added internal build process to automatically prepare newly compiled shaders for upload

[h2]Tweaks:[/h2]
- Increased number of parallel record preprocessing jobs and upload finalization jobs, to reduce delays when finishing uploads
- Rig component inspector actions are now localizable

- Merged Korean locale updates by @MirPASEC
- Merged Esperanto, Japanese and Chinese locale additions and tweaks by @Melnus
- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)

[h2]Bugfixes:[/h2]
- Fixed invalid shader variant comparison, causing shader variants to not be scheduled or loaded properly when there's same variant for a different platform already computed (reported by @AshtonSparx and @Rue Shejn | Artist 3D)
- Fixed exceptions in StaticAssetProviders when they have been disposed while still running a background update (found in report from @marsmaantje and @chemicalcrux)
- Fixed Blur material ignoring Offset/Scale of the SpreadMagnitudeTexture (reported by @chemicalcrux)
- Fixed Pixelate material ignoring Offset/Scale of the ResolutionMagnitudeTexture
- Fixed exception when searching for generic base class with invalid input (found in log from @chemicalcrux)
- Fixed "Cleanup bone colliders" on Rig removing whole Slots on Rigs where the bones aren't separate objects (reported by @Medra)