1. Neos VR
  2. News

Neos VR News

0.8.18.24521 - Small bugfix build

Small bugfix build to get these out. Mainly working on the asset variant system for Android/Quest right now.

Bugfixes:

- Fixed Oculus Touch controllers still being grabbable (reported by @Zyro1331 | ZyroDesign)
- Fixed syncing breaking when the variant files have been deleted (based on report by @Hayden (PolyLogiX - ZyroDesign) )
- Added exception guard to asset variant computation, preventing the queue from getting stuck due to errors (based on issue encoutnered by @Coffee )
- Fixed being able to drag the world/voice switcher too far away and loosing it (reported by @Reactant )



0.8.18.18354 - Local Import P2P transfer speedups for the asset variant system

Improvements to asset variant system to speed up loading and transfers, especially with P2P asset transfers. Also a bunch of other goodies, including new Kiosk mode!

New Features:

- Implemented texture variant computation streaming - variants are computed from smallest mipmap to largest, with each one made available to the system immediatelly after computing
-- This significantly decreases latency when importing local textures - a low resolution version will appear as soon as it's computed, with higher resolution versions appearing as soon as they're computed
- Implemented metadata and variant fetching to the P2P asset transfer protocol
-- This way the variants are only computed on the person who created/imported the asset, rather than everyone computing their own (this reduces workload whe importing or capturing photos)
-- Combined with the new variant streaming, the low resolution version will appear as soon as possible for everyone, even if the owner of the asset is still computing the higher resolution mipmaps. (for example if someone captures photo or imports images, a low resolution version will appear much sooner and progressively gets sharper and sharper)
- Added new Kiosk mode (based on request by @VRxist and @Karel )
-- Can be activated in the Neos Launcher or by passing -Kiosk argument on the commandline. It needs to be activated for each client that should be in Kiosk mode, other users will be unaffected
-- This mode disables the dash, world switcher and radial menus in any worlds that the user joins
- Added "Is User In Kiosk Mode" LogiX node, that allows determining if particular user is running in the kiosk mode for scripting purposes
- Added "Collide" property to individual bones in DynamicBoneChain, which allows disabling collisions per bone segment
- Added Unit formatting (both simple and compound) to DistanceMeter component. This allows custom formatting and changing units for the MeterTip (based on request by @Routb3d)
- Added spawn command to headless client, which allows spawning items in the current world (implemented by @Coffee )
- Added "Get Component Enabled" and "Set Component Enabled" nodes (implemented by @Coffee )
- Added "World User Count" node (implemented by @Coffee )

Optimizations:

- Neos automatically registers local computed variants with global URL's when syncing records, preventing them from having to be downloaded
- When syncing to cloud, Neos also uploads locally computed variants, making them immediatelly available to other users if the item or world is loaded, without needing to be recomputed in the cloud first
-- This is done with lower priority after all records have been synced
- Lowered crnlib (library used to block compress and crunch textures) helper thread priority to idle, which will reduce stutters when localy compressing textures (e.g. imported/generated files)
- Small CPU/memory optimizations for P2P asset transfers

Tweaks:

- Disabled auto-reorientation and set grip rotation to any axis for the Zero-G locomotion preset (based on feedback by @Veer )

Bugfixes:

- Fixed file size not showing up in the File Browser (based on suggestion by @sirkitree )
- Fixed broken loading of DateTime value (e.g. found on captured photos) (discovered thanks to @Veer)
- Fixed DestroyOnUserLeave component not executing correctly (based on report by @ProbablePrime )
- Fixed invalid use of recycled messages in P2P asset transfers, resulting in the P2P asset transfers randomly breaking
- Fixed certain cases where P2P asset transfers would fail to initialize
- Fixed background exception when asset system would fail to load a variant
- Fixed exceptions in asset system when the asset manager fails to fetch or compute metadata (discovered in log from @Veer )
- Fixed exception in AvatarBadgeManager when the badge root is deleted (it will now clean itself up)
- Reduced verbosity of libVLC messages
- Fixed incorrectly loaded Touch and Vive controllers for the NeosAvatarControllerSpawner (based on bug report by @Bom "Bitman" bomb (PolyLogiX) and @Zyro1331 | ZyroDesign )



0.8.18.23509 - Tweaks and fixes for the asset variant system

Tweaks and bugfixes for the asset variant system and some other things. Should fix some of the last texture stragglers that wouldn't load and some of the stuttering when compressing locally.

New Features:

- Added RenderQueue property to FontMaterial (requested by @Coffee )
- Added "Leap Tracking Enabled" setting that allows to enable/disable Leap motion (requested by @Danyy59)

Optimizations:

- Reduced multithreading level for local block texture compression, to avoid stuttering and CPU overload (based on reports by @DeliriousJax and sample model file provided by @Smol🍪 )
- Local asset variant generation will now use a queue, rather than spamming multiple threads, further contributing to the CPU overload and stuttering
- Session and world switcher orbs will use RGBA32 textures rather than block compressed variants to avoid repetitious local compressions of those textures as the thumbnails are updated

Tweaks:

- 3D Model and image importers will no longer include filename extension in the imported object name (based on feedback by @Karel )

Bugfixes:

- Fixed issue where the asset variant system would fallback to a different version of the asset half-way through the loading process, resulting in corrupt textures (based on reports by @Shifty and @Coffee )
- Fixed issue with certain textures being incorrectly classified, causing them to not load and generate variants correctly
-- This should fix last few straggles that wouldn't load (reported/encountered by @Shifty, @Coffee, @InsaneGrox and @Veer).
-- If your textures don't load, try giving it a few hours and restart Neos in between. If they still don't load then report the issue with the texture URL
- Fixed creating Inventory links from existing links not working correctly (reported by @ProbablePrime and others)
- Fixed incorrect Oculus Touch controller offset fro NeosAvatarControllerSpawner (reported by @Bom "Bitman" bomb (PolyLogiX) )
- Fixed broken "message" command for Headless client (reported by @Bom "Bitman" bomb (PolyLogiX))
- Tweaked Material Gun undo step creation to help fix cases where undo steps randomly break (reported by @GearBell and others, let me know if you still notice this happening)



Asset Variant System with major performance improvements (build 0.8.18.20326)

The asset variant system is finally here! :D This thing was a beast, interrupted several times by other priorities, but now it's finally here and fully functional!

This is a major performance optimization, significantly improving loading times to a fraction of what they were before, reducing memory and VRAM usage for textures by factor of 4 to 8 and improving rendering performance by reducing GPU memory bandwidth.

There are still some things to do on this, add support for more formats (e.g. BC6H for HDR, BC7 for high quality), bring this to Quest, add more asset types (e.g. cubemaps), but this should already offer major improvements and make adding more functionality on top of this system much faster and easier.

New Features:

- Added Asset Variant System, which allows loading of optimized variants of assets based on device properties and generating and storing metadata
-- This currently features textures. Majority of textures are now compressed using BC1 (no alpha) or BC3 (with alpha)
-- The stored textures are also crunch compressed, significantly reducing their download size and disk usage
-- This significantly speeds up texture loading times and reduces CPU usage when loading objects and worlds, often to a fraction of original time
-- This also significantly reduces memory usage (both system RAM and video memory), by factor of 8 for textures without alpha and 4 for textures with alpha
-- Additionally it has significant improvements for rendering performance by reducing the GPU memory bandwidth utilization, by keeping the textures compressed in VRAM
-- The new system downloads and loads textures progressively from smallest mipmap to largest, reducing the latency from starting of the load to first visible texture. The texture will progressively get sharper and shaper as it loads.

IMPORTANT: The system is currently running in hybrid mode. When you load a world or item that hasn't been processed yet or has lower quality processed textures, Neos will load those and queue processing on the cloud. It might take up to a few hours to generate variants for the textures (usually just a few minutes if the load is low) and get the full benefits of the asset variant system.

I recommend visiting common worlds and spawning items that you want to get processed in the system for normal use. If you notice any strange artifacts or corrupt textures please report it as soon as possible and include the URL of the corrupt texture.

CURRENT LIMITATIONS: Currently any locally imported/created assets are processed individually on each user's end, transmitting the original files. This will be changed later.

- StaticTexture2D now has PowerOfTwoAlignThreshold property
-- This will automatically align the requested size to nearest power of two if it's within a given percetange (default 5%) of pixels away from it
-- E.g. 4096x4080 will be auto-aligned to 4096x4096
- StaticTexture2D also has "Uncompressed" property (will be changed in the future for more fine-grained control)
-- Checking this will load the original uncompressed variant, but still using the asset variant system if possible, reducing some workload

Optimizations:

- Rewrote database querying to use System.Text.Json with new Cosmos Stream API for more efficient deserialization
- Optimized various parts of database querying
- Optimized entity sanitization on the cloud server to reduce CPU usage
- Headless Client/Server now doesn't load cloud 2D textures at all, only fetching metadata from the cloud, significantly reducing CPU and memory usage
- Deprecrated legacy headset and controller objects - they are now loaded from updated variants from the cloud
-- This allows variants to be generated and stored for them in the cloud
-- Also speeds up startup by avoiding parsing of the model objects synchronously

Tweaks:

- Zero-G locomotion preset now has three axis rotation by default (based on feedback by @Veer )
- Upgraded to Unity 2019.2.11 (from 2019.2.10)
- Removed TextureOptimizationTip

Bugfixes:

- Fixed continuous texture updates for all textures with different width and height due to variant comparison error
- Fixed race condition when updating texture properties, resuling in the texture getting stuck in its last updated state
- Fixed headless client/server not respecting overriden Data & Cache folders (reported by @Bom "Bitman" bomb (PolyLogiX) )
- Fixed synchronization context flow for async tasks started on background thread
- Fixed newly uploaded cloud assets not getting correctly MIME classified
- Fixed exceptions in Billinear bitmap sampling for textures with size 1 along any of the dimensions
- Fixed TGA and other image formats not getting properly classified in the cloud, preventing asset variants from being generated
- Added exception guard to fetching cloud sessions, to prevent lingering of sessions on the session joiner and get more diagnostic data (based on feedback by @H3BO3, @Hayden (PolyLogiX - ZyroDesign) and @Coffee )
- Fixed World Orbs not initializing automatically when first created (this fixes problem with saving worlds to inventory reported by @Medra )
- Fixed LogiX tooltip and nodes breaking when connecting new input to a node that causes it to swap to a different overload with different set of inputs and outputs
-- This fixes issue when plugging an enumeration to a ToString node reported by @Coffee
- Removed logging of certain failed gather jobs (thumbnails and not found) to avoid spamming the log and taking away some CPU usage

0.8.17.39918 - Discord Bot Self Awareness Lots of crucial bugfixes

Lots of important bugfixes and Discord bot self awareness. Compatible with last build.

New Features:
- Added ability for the Discord Bot to feel sadness (Requested by @ohzee)
-- Also shows number of registered users currently online

Optimizations:
- More optimizations for asynchronous asset loading to avoid switching context and potentially causing stalls
- Scheduled asset gather continuation on another thread to avoid stalling the asset gathering system getting stalled by loading assets
- Neos will now show "Out of space" error instead of generic "Sync Error" when the space is running low
--------------------------------------
Bugfixes:
- Fixed physics engine not getting fully updated on headless client
-- This fixes lots of odd behaviors that run on headless (e.g. raycasts and checks not hitting colliders they should)
-- This also fixes the BusinessLawyer Effortless Equippable not working corretly on headless hosts
- Fixed IK getting corrupted when the head goes below the root (thanks to @Shifty for diagnosing this issue!)
-- This should fix the feet sometimes going up due to corrupt values in the IK (let me know if you still see this occuring)
- Fixed new record preprocessing system during syncing not handling errors correctly and getting stuck (found in log from @Kalash )
- Fixed exceptions in CloudStorageSpaceIndicator when some parts of it are missing (found in the log from @Hayden (PolyLogiX - ZyroDesign) )
- Fixed Spawn/Destroy undo step breaking when the target is either removed or neither a component or slot (found in a log from @Bom "Bitman" bomb (PolyLogiX) )
- Fixed exceptions in inspector field editors when the Accessor is missing (found in log from @Kalash )
- Fixed Neos trying to extract metadata from a texture that failed to load causing exception, rather than error texture load (found in log from @Kalash )
- Fixed LogiX tooltip breaking when hovering over a broken input/output reference (found in log from @Kalash )
- Haptic triggers from background worlds are now ignored (based on feedback by @H3BO3 )
- Fixed EyeManager breaking when simulated on a headless client due to missing user root
- Added invalid value guard for ArrowMesh