1. Neos VR
  2. News

Neos VR News

2021.5.24.1203 - Thumbnail System & UIX Canvas optimizations

Hello everyone, another smaller build, but with some optimizations now! During testing the MTC we got a lead that the worlds UI is causing some hitches and this led to some more discoveries for things to be optimized, both client-side and on the server! There are some changes to the session thumbnail system to avoid wasting resources - e.g. loading and updating thumbnails when the UI cannot be seen (e.g. your dash is closed or on different screen) and recompressing, reuploading/redownloading same thumbnails and some more!

Also more general optimization, UIX canvases will now deffer the actual update if they're inactive, to avoid UI that's invisible to you (e.g. closed dash, or inactive dash screen, context menu or anything culled in world) from unnecessarily doing background computations and wasting CPU cycles and memory.

Overall these should help reduce some unnecessary background resource drain and help things run a bit better! Sorry I don't have more for now, going to be working on a weekly update next, so I'm pushing out what I have for now.

[h2]Optimizations:[/h2]
- UIX Canvas updates are now deferred when it's inactive (either directly within hierarchy), reducing performance impact of currently inactive canvases
-- This includes dash (e.g. worlds or contacts UI updating its layout in the background) as well as any world-space canvases (e.g. Context Menu when not open)
-- This should also help reduce CPU/memory impact when various avatar/level culling systems are employed, not generating the actual UI until it needs to be shown
- Tweaked session thumbnail capture intervals to reduce the load on the user starting/joining the session
- Downloading new session thumbnail for the Worlds menu is now deferred when it's inactive, preventing unecessary downloads and processing of thumbnails when the UI is not visible
-- This should help fix some cases of random hitching in worlds, even when dash is deactivated (based on report by @Rue Shejn | Artist 3D and @Nexulan | Producer)
-- On some users, this should also mitigate the gather jobs from getting overloaded and downloads stuck in some cases (reported by @ProbablePrime, @I'm Erin. and @Kitten_of_Codes)
- Moved session thumbnail downloads to the CDN, rather than direct blob download for better performance and metrics
- When StaticTexture2D is set to DirectLoad, the metadata computation task is now skipped
-- This reduces unnecessary CPU load and memory usage, particularly for session thumbnails which use DirectLoad
- Uploaded thumbnails are now associated with their public URL in the database, to avoid cases where user has to redownloaded their own thumbnail, resulting in resource waste
- Headless will no longer reupload and recompress session thumbnails from other sources (users in the session or the world thumbnail), but rather use their direct URL
-- This will reduce unnecessary network bandwidth and CPU/memory usage by redownloading different versions of the same thumbnail and better employ caching mechanisms
- Merged Spanish locale additions (including new MTC Streamer Room) by @Ruz
- Merged Czech locale addition by @rampa_3 (UTC +1, DST UTC +2)

[h2]Bugfixes:[/h2]
- Added transition code for SessionUser head output device being serialized as integer, causing potential compatibility problems when the enum changes
- Fixed UIX canvas becoming invisible when the RectTransform on the root becomes deactivated and the graphic chunks don't get flagged as dirty to re-enable it
- DynamicField and CloudValueField are now aware when pointed to read only fields (e.g. RawOutput) and will avoid any writes back to them to avoid throwing exceptions in the log (based on report by @RezilloRyker)
- Fixed Headless not being able to load certain worlds and objects due to scene hierarchy being too deep (reported by @Shadow Panther [RU/EN, UTC+3] and @Torrn)

2021.5.23.985 - LogiX bitwise/bool/vector nodes, Auth website branding, fixes

Another small build before I start focusing on some bigger things, but hopefully with some nice goodies! There's a bunch of new LogiX node overloads for vector and boolean vector types, which should give you a whole bunch of extra flexibility when working with those datatypes.

The new WIP Neos Account website (also used for OAuth) now also has some basic Neos branding to look less sketchy thanks to @ProbablePrime.

And there's a pretty important bugfix (technically two internally) for text rendering, which should fix some text being glitched out and wrapped incorrectly in some cases (see #🎥devlog for sample video), improving the overall robustness of our text rendering system.

[h2]New Features:[/h2]
- Added bitwise overloads of logical operators for boolean vectors (bool2, bool3, bool4) and integer vectors (int2, int3, long4...) (requested by @art0007i)
- Added bit shift and bit rotate overloads for boolean vectors (bool2, bool3 and bool4) (requested by @art0007i)
- Added vector comparison operator nodes (requested by @art0007i)
-- These produce boolean vectors. E.g. if you compare two float3 values, you get bool3, with each component being compared independently
- Added "Cosine" curve shape preset (requested by Dirko3000)
-- This starts slow and ramps up to full speed
- Added bobool3ol

[h2]Tweaks:[/h2]
- Neos Account / Auth website (https://auth.neos.com/) now has basic Neos branding and style (implemented by @ProbablePrime, based on request from @Geenz | Graphics Programmer)
-- Internal layouts were centralized
-- Swapped the Nav Bar to Dark and added the Neos Round Logo.
-- Website is now labeled "Neos Account Website" instead of internal project name "CloudX.Account"
-- External login providers were removed for now
-- Patreon and Main Website links now link to separate websites rather than dummy pages

- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged Japanese locale additions and tweaks by @Aesc
- Merged Korean locale additions by @Guide
- Merged Russian locale additions and fixes by @Shadow Panther [RU/EN, UTC+3]

[h2]Bugfixes:[/h2]
- Fixed cloud not providing proper response code when synchronizing records and there are too many requests at the time, resulting in unecessary sync errors, rather than retry logic being employed properly
- Fixed text layout computing the longest word width incorrectly when multiple text segments are used (e.g. formatting), resulting in horizontal auto-scale producing wrong values in some cases and some words being forcefully wrapped (based on report and sample by @Enverex)
- Fixed text auto-size layout using some auto-sized values from previous run when the text is being changed, resulting in random non-persistent layout glitches (words being wrapped incorrectly, lines being randomly spaced wrong) (based on report and sample by @Enverex)
- Fixed ValueMultiplexer and ReferenceMultiplexer still throwing exceptions in some cases when the index is out of bounds due to off by one error (based on report by @Enverex)

2021.5.22.1024 - Material batch conversion, security improvements, tweaks, fixes

Another small build sorry! Just handling some smaller tasks and such right now. It has some goodies too though, like material batch conversion! There are some more security improvements too and a bunch of bugfixes and polish for desktop and other things.

[h2]New Features:[/h2]
- Added Batch Material conversion feature to the Material Tooltip when holding a slot reference, which allows converting all materials in the hierarchy to specific material type (requested by @Veer | Chief Moderation Officer)
- If you double-click the right mouse button in third person mode, the character's forward direction will align with the view as well

[h2]Tweaks:[/h2]
- Improved security if favorite avatars using scoped temporary access keys
-- Favorited avatar records are no longer marked as public to severely mitigate possibility of malicious access
-- In a few days we'll automatically unmark all avatar records as public unless they're in a public folder
-- Note that when unregistered user hosts, they won't be able to load private favorited avatars for you, you'll have to equip them yourself
- Removed old logging code for opening worlds
- ToString on fields will now always act as doing ToString on the field value
- Material conversion dialog positioning is now consistent with other dialogs and respects different camera modes
- Extracting all material orbs from hierarchy is now undoable
- Upgraded youtube-dl to 2021.05.16 from 2021.04.01
- Upgraded various internal dependencies and libraries for both cloud and client to latest versions

- Merged German locale additions (including MTC Streamer Room) and fixes by @3x1t_5tyl3
- Merged Russian locale addition by @Shadow Panther [RU/EN, UTC+3]
- Merged Korean locale update and fix by @MirPASEC

[h2]Bugfixes:[/h2]
- Fixed InventoryLink generating context menu item when disabled (reported by @Ukilop)
- Fixed ValueMultiplexer and ReferenceMultiplexer throwing exceptions when Index is invalid and driven value is being written back (based on log provided by @Enverex)
- Fixed 48-bit source textures (e.g. PNG) being washed out when exported due to tonemapping running on them (reported by @Cataena and @Lucaedr )
- Added a guard against TwitchChatDialog throwing lots of exceptions when parts of it are removed (based on report and log by @RezilloRyker)
- Fixed UI Aligned Camera mode not properly transforming the camera orientation when aligning items, resulting in items being misaligned when they're parented under a slot with rotation offset (reported by @Epsilion, @Axius, @3x1t_5tyl3)
- Fixed text renderer auto-sizing not respecting BoundsAlignment when performing last iteration bounds alignment, resulting in random small offsets of the resulting text (based on report and sample by @Enverex)
- Fixed components that destroy the user on unhandled exception (e.g. CommonTool) not actually destroying user, resulting in logspam and corrupt behaviors (found in a log from @AlienInArea51 (MR-Alex))
-- If you encounter case like this during normal operation, please make a bug report! However if you are messing with internals of those components and deleting necessary working objects, this behavior can be normal and you should find alternate approach that won't rely on corrupting internal state, as we won't necessarily support such use-cases

2021.5.20.1063 - Voice for Freeform cam, Texture mipmap controls, tweaks & fixes

Hello everyone, got another build with some more bits! The new freeform camera now outputs voice too if you're sufficiently far away from the avatar and it's closer to you! Read instructions below on how to setup your customized avatars with it.

You can now also control mipmaps on the 2D Textures, including the filter used for them. Some textures might be worth switching over to Lanczos3, as it can produce sharper visuals when the texture is small. In some cases that's good, in some not, but options!

Also there's a whole bunch of other tweaks and bugfixes that were waiting in the queue for a while, which should improve robustness of things all over the place!

[h2]New Features:[/h2]
- User voice will now automatically switch over to the view reference for each user if the avatar is too far away and the view reference is closer to them (previously requested by @AshtonSparx, @Shadow Panther [RU/EN, UTC+3])
-- AvatarAudioOutputManager now has "IsViewVoice" property. If you're making custom view reference, you'll need to setup the voice with this component and check this field so it gets activated properly
-- Note that Whisper Voice mode will not work properly in this mode to prevent weirdness, switch back to your avatar for social interactions
- Added UserViewVoiceActive LogiX node, which indicates if the voice is currently coming out of the view visual
-- Note that this value can be different for each user, as it's determined locally
- Added "MipMaps" toggle to StaticTexture2D which allows disabling mipmaps on a texture
-- This can be used to conserve memory usage on textures where mipmaps aren't necessary (e.g. skybox) (requested by @Groxxy but Face Tracking lul)
- Added MipMapFilter property to StaticTexture2D which allows selecting which algorithm is used to generate the mipmaps levels (based on request by @Groxxy but Face Tracking lul)
-- Following filters are currently available (in general order of sharpness/quality): Billinear, Box, Lanczos3
-- Note that switching filter might not immediately load that one (unless you force exact variant, but that's not recommended to keep turned on) as it might need to be generated in the cloud first.

- Added LogiX nodes for accessing local user's view/ears transform overrides (under Users/Local Output) (based on request by @seif1)
-- ViewPosition, ViewRotation, ViewScale and ViewOverriden (bool)
-- EarsPosition, EarsRotation, EarsScale and EarsOverriden (bool)

- Added Integer variants of the Repeat node (requested by @Honzackcz)

[h2]Tweaks:[/h2]
- Moved Neos API endpoint to api.neos.com (endpoint setup by @Karel | CEO)
-- The API will remain available on the old domain for a while, but will disappear at some point, so we recommend migrating ASAP
- New work in progress Neos account & OAuth website moved to auth.neos.com (endpoint setup by @Karel | CEO, based on request by @Geenz | Graphics Programmer)
- LookAtUser will now target user's view, rather than specifically head (based on feedback by @AshtonSparx)
-- You can switch PositionSource back to "Head" to restore old behavior
- Import dialog asset paths are now kept local only to avoid divulging potentially sensitive information (based on feedback by @3x1t_5tyl3)
- TextEditor now handles surrogate pairs properly when editing
-- This fixes being able to place the caret in the middle of surrogate pair or delete only half of the symbol, resulting in invalid Unicode string (based on report by @DariusSergal, @Psychpsyo and @3x1t_5tyl3)
- Permission security improvements (based on reports by @Psychpsyo, @Epsilion and @Komdog)

- Merged Polish locale additions (including new MTC streamer room) and fixes by @art0007i
- Merged Czech locale addition by @rampa_3 (UTC +1, DST UTC +2)
- Merged Japanese locale addition by @Aesc
- Merged Korean locale fixes by @Guide

[h2]Bugfixes:[/h2]
- Fixed regression caused by duplicated IEncodable interface, resulting in any elements using this (e.g. the old PenTip) causing session crash when other users are present in the session
- Fixed Neos freezing when copy/pasting malformed Unicode strings to/from the clipboard (e.g. only half of surrogate pair symbols like :high_brightness:) (reported by @DariusSergal, @Psychpsyo and @3x1t_5tyl3)
- Added sanitization of camera parameters when rendering, to prevent cameras from getting corrupted and stopping render due to extreme values (e.g. scale)
-- This fixes Dash becoming corrupted and unusable until restart after the user is scaled extremelly small (reported by @Electronus)
- Fixed texture asset metadata reporting only 1 mip level for most textures rather than actual account
-- This also fixes the VRAM usage of the texture not including the mipmaps, but only the topmost texture

2021.5.19.1273 - HP Omnicept Eye Tracking, latest Opus & Freetype, tweaks, fixes

Hello everyone! I got another build for you with a bunch of goodies, including HP Omnicept Eye Tracking support! I don't have the headset, so it's untested, but it should generally work, let me know if you run into any issues!

There's also some important improvements for local database robustness, which should fix some other common(ish) cases of Neos not starting up for some users due to corruption.

I've also been moving more of our native dependencies to Azure Pipelines and bumping up their versions, we now have the latest versions of Opus (audio encoding/decoding library) and Freetype (font decoding)! For Opus it's a pretty big bump, almost 4 years ahead and the new version should have improvements for quality of both voice and music. Thanks to the CI/CD we'll also be able to keep with latest version much more easily now.

There's a bunch of other small bugfixes and improvements as well, like ability to do per-pixel processing for Cubemaps, read below for more!

[h2]New Features:[/h2]
- Added HP Omnicept Eye Tracking support (requested by @Groxxy but Face Tracking lul)
-- Currently this is not fully tested, as the official emulator is missing some functionality (controlling the eye openness)
- Added MotionVectorMode property to ParticleStyle which allows adjusting how are motion vectors generated for particles (requested by @Robyn (QueenHidi))
-- Note that per-particle motion vectors aren't supported
- Added "UserRecordingVoiceMessage" LogiX node, that indicates when the user is recording a voice message (based on request by @dfgHiatus)
- Neos now automatically cleans up old (more than 2 weeks) database backup files before upgrade or repair (suggested by Iforgotwhosorry ;_;)
- Per-pixel texture processing options (Inverting Colors, Swapping channels, Shifting Hue and so on) are now available for all generalized textures types (both Texture 2D and Cubemaps)
- Added support for WOFF font format
-- Note that newer WOFF2 isn't fully supported yet
- Added scalar (1D) overloads for the Distance node (requested by @Honzackcz)

[h2]Tweaks:[/h2]
- Upgraded Opus codec to latest version 1.3.1 from source (previously 1.1.3)
-- This includes numerous improvents to audio quality for both voice and music, especially at lower bitrates
-- See libopus changelog here: https://opus-codec.org/news/
- Upgraded Freetype library to latest version 2.10.4 from the source (previously 2.10.0)
-- This includes various bugfixes as well as a security vulnerability fix in the library
- Texture pixel processing from the inspector now processes all mipmap levels, which fixes only the top mipmap being processed when they're explicitly defined
- InventoryLink Enabled property is now respected (based on feedback by @Epsilion and @art0007i)
- UserInterfacePositioner is now based on user's view position by default rather than the head (based on feedback by @seif1)
-- You can check "UseHead" to restore old behavior if needed
- Merged missing MTC Streaming room string by @Rue Shejn | Artist 3D

- Merged Japanease locale additions (including MTC Streamer room) by @Aesc
- Merged Russian locale additions (including MTC Streamer room) by @Shadow Panther [RU/EN, UTC+3]
- Merged Czech locale additions for MTC Streamer room by @rampa_3 (UTC +1, DST UTC +2)
- Merged Korean locale additions for MTC Streamer room by @Guide

[h2]Bugfixes:[/h2]
- Fixed mouse scroll wheel being blocked by the Freeform Camera mode at all times, preventing UI's to be scrolled in this mode (reported by @AshtonSparx)
- Fixed Squeeze value for the Left eye being combined eye squeeze, instead of the left
- Fixed incorrect formula for Inverse of 2x2 matrix (e.g. float2x2) (reported by @Aetoriz and @かず (kazu / GitHub: kazu0617))
- Improved robustness of local database system to avoid random corruptions from resulting in Neos not starting up (based on logs collected by @H3BO3)
-- Neos now creates Setting.bak file in case the main Setting.json becomes corrupted (e.g. due to unclean exit)
-- Neos avoids overwriting Setting.json file when nothing has changed (which is in most cases)
- Fixed internal method for processing all pixels of specific mipmap only processing a single face for cubemaps (based on report by @Geenz | Graphics Programmer)