1. Neos VR
  2. News
  3. 2020.12.30.1285 - Heavy duplicate optimization, proximity sensor, tweaks, fixes

2020.12.30.1285 - Heavy duplicate optimization, proximity sensor, tweaks, fixes

Hello everyone! I hope everyone had a great holidays. I've accumulated a bunch of new additions, tweaks, optimizations and important bugfixes, so here's a new build!

You can now rightclick on the virtual desktop in the dash! There's new "legacy input" mode as well, which will make the virtual keyboard work with some apps like Blender.

Neos now also uses the proximity sensor in your headset to tell if you're wearing it or not, which is exposed through LogiX as well so you can make lots of cool effects for your avatar.

There are some optimizations in this build as well, particularly for duplicating objects, which is now significantly faster (especially with really complex objects). This doesn't help only when you manually duplicate things, but also for any interactive items that duplicate templates for their function.

There are some other tweaks and bugfixes too. Lasers should behave a bit better now in some scenarios and I dug down into one elusive bug that caused the UI to freeze, particularly when using Japanese locale.

[h2]New Features:[/h2]
- You can now right click in the virtual desktop on the dash using the secondary action (Joystick/Touchpad click)
- Neos now tracks if the user is present in the headset (using proximity sensor if available) and uses this status for user presence (requested by @3x1t_5tyl3, @Shifty | Quality Control Lead, @Hayden and @H3BO3)
-- IsPresent status/node now indicates if they're both present in the world and in the headset (existing node instances are autoconverted to IsPresentInWorld)
-- Added IsPresentInWorld and IsPresentInHeadset nodes to allow querying individual states
-- If not supported by hardware or heuristics (by detecting movement) it IsPresentInHeadset will always be True
-- Currently AFK Kick still uses only the IsPresentInWorld status, but this can be changed (let me know what you'd prefer for default, will be a setting later)
-- Your Online status is now automatically set to Away if you take your headset off without having to wait for the inactivity timer (only if set to Online though, Busy/Invisible won't be affected)
- Added ExcludeActiveUser to AutoLookAtUser, which will never target the user under whose hierarchy it is placed when enabled (requested by @LeDrascol)
- Neos will now periodically refresh connected audio devices whenever the audio input device dialog is selected, hiding devices that were disconnected and adding any new devices that were connected in the meanwhile (requested by @LeDrascol)
- Added "Legacy Input" mode to the virtual desktop, which will send keyboard scan-codes rather than Unicode codes when typing to a desktop application (based on report by eduprimowl and @Enverex)
-- This will make typing work with certain applications that don't support modern Unicode text input on Windows (e.g. Blender)
-- I strongly discourage enabling this unless the app you're using at the moment really needs it, as you'll get odd behavior (the virtual keyboard keys performing a different action than they show and some keys not working), particularly when using different keyboard layouts in Windows
-- Using standard US keyboard layout in Windows is highly recommended when this is on

[h2]Optimizations[/h2]
- Heavily optimized Slot/Component duplication process, both in speed (CPU usage) and memory use (using pooling to avoid large new allocations with every duplication)
-- Duplicating particularly complex hierarchies (e.g. with complex LogiX setups) should now take fraction of the time and reduce performance degradation when done frequently
-- Note that this doesn't affect just manual duplication, but also any items that use duplication as part of their functionality (e.g. spawning projectiles)
- Optimized dependency and hierarchy lookups during the saving process, significantly reducing CPU usage (and some memory)
- Optimized DictionaryList (used internally) for single item storage, to prevent extra allocations when storing a single item
- Small optimizations when querying components of particular type

[h2]Tweaks:[/h2]
- Added extra rate limiting for certain queries on the cloud API to prevent performance degradation due to improper use of the API by 3rd parties
- Improved internal error handling for the Cloud API
- Removed deprecated baked-in support for Oculus without Touch controllers
- Removed deprecated support for Daydream, Cardboard, GearVR and Oculus Go headsets
- Contact list items now require lock in to press, preventing selection from happening when scrolling (requested by @Alex from Alaska)
- In world laser will no longer activate when it's disabled and there's an userspace item behind it (based on feedback by @AshtonSparx and @Shifty | Quality Control Lead)
- Laser length shown to other users won't be updated to a longer one, if the laser is fading out, eliminating cases where the laser briefly flashes in the world (based on feedback by @AshtonSparx and @Shifty | Quality Control Lead)
- Name badge now becomes semi-transparent when the user is away from their headset (based on feedback by @H3BO3, @Cyro, @Dante, @Turk, @ProbablePrime, @Ryuvi | Technical Artist, @ohzee, @Lewis Snow | Lead Audio Engineer in #testing)

- Merged Japanese, Esperanto and Chinese locale additions by @Melnus
- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged Korean locale additions by @LUA#6690
- Merged Spanish locale additions by @Ruzert
- Merged Japanese locale tweaks by @Aesc
- Fixed invalid Inventory tutorial string in the Polish locale

[h2]Bugfixes:[/h2]
- Fixed font glyph pinning getting stuck in some cases, when glyph atlas is invalidated while there are still glyphs scheduled to be rendered, causing text renderer or UI to become frozen (reported by @Aegis_Wolf | Art Director, with replication case found by @Shifty | Quality Control Lead)
-- This should also fix UI randomly freezing and crashing for users using the Japanese locale (or any others with a high glyph count) reported by @あむ(Rabbuttz) and @かず (please let me know if the issue still persists, I'm not 100% certain that this will resolve the crashes)
- Fixed ValueGraphRecorder having off by one error when assigning values, causing the the LineMesh graph to have visual artefact, showing the last value at the beginning (reported by @ProbablePrime)
- Fixed Undo system getting spammed with repeated undo steps for all users when trying to set a driven field (e.g. a color, as reported by @Hayden, @chemicalcrux, @Shifty | Quality Control Lead and @Cyro)
- Loged errors when formatting localized messages now include which locale code does the invalid message belong to
- Added logging for any errors in the save tasks when exiting Neos (e.g. saving settings)