1. Neos VR
  2. News

Neos VR News

Steam Networking Sockets (no more queued packets), New icons for Radiant UI

Hello everyone and welcome to our weekly update!

Originally we planned to work on the new laser and gripping system this week, but with the release of updated Steamworks.NET we instead integrated the long awaited Steam Networking Sockets to help users experiencing connectivity issues and queued packets.

Our teammate Coffee has also created a set of completely new custom icons for the new Radiant UI. You can already see them in the hand menus and on the user badges, with more to come!

Neos now also uses a custom audio input driver on Windows, replacing a 3rd party library that has been causing issues for quite a while and has received many more additions, tweaks and bugfixes!



[h2]Wednesday Crash Course: Building Worlds[/h2]

For this week’s beginner crash course live stream we have looked at how to build a basic world with tools you can find in Neos and how to import some extra assets. If you’d like to learn more about Neos, follow us on Twitch to catch our next stream!

We’re always answering questions live, so if there’s something you’d like to learn how to do, feel free to ask!

[previewyoutube][/previewyoutube]

[h2]Steam Networking Sockets - no more queued packets[/h2]
One of the long term problems that some users were experiencing was a phenomenon called “queued packets”. With certain connections, the changes in the world would start queuing up and getting progressively more delayed, due to the underlying transport protocol not sending the updates fast enough.

Our long term goal is to fully switch our main transport protocol to Game Networking Sockets developed by Valve. Not only is this protocol more efficient and robust, but offers other benefits such as encryption, improving your privacy and security.

A version of this protocol (Steam Networking Sockets) is included as part of the Steamworks SDK and thanks to the newly updated Steamworks.NET wrapper, we were able to integrate this with Neos.

This version also utilizes Valve’s relay network, which provides privacy protection, hiding your IP from other users and ensuring good connectivity and latency. The only requirement is that you need to have a Steam client running and be signed in into your account.

Thanks to the help of our Danger Tester group on Discord we thoroughly tested this new protocol, but found a major limitation. The bandwidth estimation functionality of the library is currently broken, so all transfers are capped at 128 kB/s (increasing the cap leads to the connection degrading quickly with more users).

As a result, initially joining the session and transferring assets between users is currently very slow when using this protocol. On the plus side, users who previously experienced the queued packets are now reporting that things are running well and in sync!

Until the bandwidth estimation is reimplemented, our old protocol (called LNL) is still preferred by Neos. If you experience the packet queuing or want to take advantage of the other benefits (encryption, IP hiding...), you can go to Settings in Neos and check “Prefer Steam Networking Sockets”. You can change the setting on the fly without restarting Neos, but you need to rejoin the session to use the other protocol.

Neos supports multi-protocol hosting, so most sessions are hosted on both LNL and Steam Networking Sockets protocols, allowing users to join on either. Let us know your experience and if this improves your experience!

[h2]New Context Menu Icons[/h2]
Coffee has been hard at work, creating our new icons for the Radiant UI, giving our user interface a much more polished and professional look. The new icons are specifically designed for Neos, matching the interface much better and include colors, for easier navigation and better accessibility.



The user badges above names and in session list have been updated as well for a more consistent look. As we upgrade and replace more of the UI, you’ll see new icons popping up in more places as we go.

Should anybody have this much power?!

We have received great feedback from the community as well and made adjustments to improve the readability and accessibility. Making the UI easier to use for people with various vision or visual processing problems is important, so let us know what you think!



[h2]New Audio Driver, Default Locomotion Speed and more[/h2]
Another part of Neos that’s been giving our users trouble for a while has been the audio input library, used to get the audio data from your microphone. We got reports of people’s voices randomly becoming garbled, incoherent screeches on certain systems (typically Windows 7) and sudden 100 % CPU utilization across all cores.

A few builds back we have rolled out a new audio driver for Windows, written directly against the WASAPI, cutting out the middleware and giving us more control and efficiency. This should fix those issues, but let us know if you still experience problems.

Another important change is a new default locomotion speed for physical (walk/run) locomotion. Many users have reported the default being too fast, causing difficulty with precise navigation, so the speed is now roughly halved.

However because the speed is configurable per world (or specifically per locomotion module), we have added a heuristic which checks if your world still uses the default speeds and only upgrades then. So if you have changed the defaults, don’t worry, your modifications will be left unchanged!

There’s also a new toggle called “UseSpeedFromUserSettings”. As a world creator, this gives you a choice to let users configure their own locomotion speed or to override it with a specific values (for example when you’re building a game world). This is on by default, but if the heuristics detects that you have made changes, it will default to off in your existing worlds. Otherwise you have to go into your world and make changes.

And as usual, there were many other small additions, tweaks and bugfixes. For example vertical slider support for UIX, improved Order Offset for easily reordering child objects, additions to LogiX nodes and more. Check the #neos-updates channel on our Discord for details.

[h2]What’s next?[/h2]
With the Steam Networking Sockets out of the way, we’re resuming the work on the new laser and gripping system as part of the new Radiant UI. We’re also working on a brand new Neos camera, with a more modern design and easier to use interface, here’s a little sneak peek!



Thank you for reading this weeks’ update. We always appreciate your support and creativity you bring to this platform, we couldn’t be building this project without you!

2020.4.19.195 - New Audio Input Driver, Badges, Order Offset, Walk/Run speed...

New audio input (microphone) driver! Wrote a completely custom one using WASAPI after many reported issues with the NatMic library (garbled voice, 100% CPU usage, crashes). Also improved order offset mechanics to be a lot more predictable. This makes ordering graphics in UIX a lot easier, just change the OrderOffset in the inspector to determine which UI elements draw on top of each other under a single parent.

Importantly, default movement speed has been modified! Read the notes for more details and let us know if you run into issues or if you need a setting to bump the custom speed up now, rather than having to wait for new settings. A bunch more smaller additions, tweaks and bugfixes as well.

Also featuring new custom badges by @Coffee as well as tweaks to the context menu items and visuals!

[h2]New Features:[/h2]
- Wrote a custom audio input driver using WASAPI for Windows to replace the problematic NatMic library
-- This should fix user's voice randomly becoming choppy/garbled (reported by @Enverex and others, let me know how it works)
-- This also fixes excessive 100% CPU utilization on some machines coming from the NatMic library (reported by @GyLala)
-- It should also fix the audio producing random screeches on older systems without the switch to the legacy Unity capture method
- New custom Neos badges created by @Coffee! Those should have more unified style, rather than being randomly gathered public domain / licensed images
- Added ValueEqualityDriver (under Transform/Drivers) which sets target to true when a target value matches reference (requested by @RueShejn)
- Added Baguette
- Added "Slide Direction" to UIX Slider with support for vertical sliders (requested by @RueShejn)
- Added "Use Speed From User Settings" configuration for Physical Locomotion (on by default for unmodified modules)
-- This will allow users setting their custom locomotion speed. Disable this for worlds where you want to control the exact maximum speed
-- Currently the setting isn't implemented yet, it will be added later, but you can start configuring your worlds in advance
- Added "Create Undo Step" to NeosSlider component, which allows to control whether the changed slider value creates an undo step

[h2]Tweaks:[/h2]
- Reworked the Order Offset property on Slots to provide a lot more intuitive and predictable behavior - all slots are always first sorted by their OrderOffset, then by their reference ID (e.g. putting order offset of -10, while all others are 0 will make that slot always first)
- The scene hierarchy inspector now updates the order of children immediatelly as it's changed
- Changed default speed for physical locomotion to about half (based on feedback by @Enverex, @Shifty and many others)
-- If your locomotion module is not using the default speed anymore, it will be left untouched and the "Use Speed From User Settings" will be off, so your existing overrides should be unaffected
-- IMPORTANT!!! If your world with overriden locomotion settings is changed, let me know asap and DO NOT SAVE. Until the world is saved again the auto-upgrade process is re-run every time
- Added extra information to cloud record audit data (record names and path) to help diagnose and potentially restore removed worlds and items
- Tweaked default LOD Bias so the distances are more consistent between screen mode and VR (based on feedback by @Enverex)
- DebugUsers now colors each user line to make it easier to read
- Renamed "Reveal LogiX Nodes in children and connected" to "Unpack children & connected nodes" (suggested by @RueShejn )
- Tweaked saturation and transparency of the context radial menu (based on feedback by @Shifty and @DeliriousJax)
- Locomotion module name is now taken from the Slot name it's on, rather than having custom field for it
- Simplified session cloud thumbnail management, heavily reducing amount of traffic necessary to keep the thumbnails pinned (in most cases completely eliminating need for repeated HTTP requests, saving some resources)
- Some internal moderation tool improvements to help resolve future problems
- Some small optimizations for audio processing

- Following changes to the context menu visuals and icons done by @Coffee:
-- Changed "Set Packing Root" icon based on feedback from @GearBell
-- Overhauled "Deselect All" icon (Based on feedback from @DeliriousJax )
-- Added color and shape contrast to the material icons (Based on feedback from @DeliriousJax)
-- Made the arrows on packing icons larger and added a red down arrow to "Set Packing Root" (Based on feedback from @GearBell and @H3BO3)

[h2]Bugfixes:[/h2]
- Fixed Color dialog spamming the Undo history with constant value changes (reported by @Enverex)
- Fixed AxisPanner incorrectly wrapping object around when the time base is negative (reported by @Enverex)
- More reference/event cleanups for Slots to help prevent memory leaks
- Fixed inspector not unregistering events from slots when destroyed, causing performance degradation and potential memory leaks

2020.4.17.1286 - Steam Networking Sockets support, New UI icons

New UI icons for hand menus and tools created by @Coffee! Also added support for the Steam Networking Sockets as a transmission protocol!

Unfortunately we hit a limitation, due to the protocol currently having broken bandwidth estimation and as such the old protocol is still preferred when connecting to worlds by default. You can however override the behavior and use the new one if you're experiencing any issues or want to utilize the benefits of the new one (e.g. avoiding queued packets). We'll have to wait for Valve to reimplement this before switching to it as the main one.

Also a bunch of bugfixes, tweaks and smaller additions as usual!

[h2]New Features:[/h2]
- Brand new hand menu & tool icons created by @Coffee! He has also adjusted the colorings of the menus to visually match the icons and give things more polished look. More icons to come!

- Added support for Steam Networking Sockets transmission protocol! (thanks to all @Danger Tester's for helping to test and fine tune this!)
-- This protocol has many benefits over the current one (LNL)
--- More robust and modern, which should significantly reduce queued packets issue with certain connections and transfers data more efficiently
--- Uses Valve's relay network, hiding user's IP address and reducing latency in some cases
--- Encrypted communication, improving security and privacy
-- WARNING: Currently it has one major downside though. The bandwidth estimation is broken, which means the library is set to a fixed bandwidth of 128 kB/second
--- As a result, initial world joins and P2P asset transfers are very slow.
--- Because of this issue, the old LNL protocol is preferred now.
--- If you are willing to accept this limitation, you can set Neos to prefer this protocol in Settings by checking "Prefer Steam Networking Sockets". This can be changed on the fly without restarting Neos, but you need to rejoin session to use another protocol
- Added "Fill Whole Arc" property to CircleAligner, which will make the start and end items match the start and end of arc (based on request by @BlaXun | Ingo)
- Added OnStartDrive/OnStopDrive to DrivePlayback node (added by @0utsider)
- Added OnTrigger forward impulse to Delay nodes (added by @0utsider)
- Added OnFail forward impulse to Write nodes (added by @0utsider)

[h2]Tweaks:[/h2]
- Disabled context menu items will now also have faded out sprite
- When joining session, Neos won't try to transmit stream data until the full initial sync is finished, lowering some initial networking load
- Update bucket and component enabled state changes now only run when the value actually changes, preventing wasting of performance when some other aspect changes (e.g. becoming driven)
- Upgraded Steamworks SDK to 1.48
- Upgraded to Unity 2019.3.10f1 (from 2019.3.9f1)

[h2]Bugfixes:[/h2]
- Removed debug log text from generating LogiX nodes (reported by @Hayden (PolyLogiX - ZyroDesign))
- Fixed ObjectGridAligner breaking when one of the target items is set to null (reported by @Syri)
- Fixed components not being moved to a new update order bucket when their update order is changed after instantiation (reported by @Coffee)
- Fixed dev tooltip not being able to select objects in some worlds (reported by @GearBell, @Hayden (PolyLogiX - ZyroDesign), @_Turk, @LeonClement and others)
-- This only wraps the error, there's still underlying issue causing this that needs to be addressed
- Fixed inspector field editors throwing exceptions when pressed when the target field is missing
- Fixed draggables (Slider, Joint and so on) set to DontDrive will no longer try to update on every user, causing lots of conflicts (reported by @Coffee)

2020.4.13.1368 - Extra bugfixes

A quick hotfix for LogiX nodes becoming non-grabbable (plus a few other fixes I made in the meanwhile). Compatible with previous build, you can update only if those bugs are affecting you.

[h2]Tweaks:[/h2]
- Value field of the EnumInput is now public (based on request by @BlueAmulet)

[h2]Bugfixes:[/h2]
- Fixed Headless world handler breaking on crashed world due to attempt to update the world information from the crashed world (found in log from @Medra)
- Fixed LogiX random nodes throwing exceptions if the min value is larger than max (they will now be swapped) (found in log from @Medra)
- Fixed LogiX nodes becoming un-grabbable after an overload swap (e.g. connecting an input of different type to operator or pulling out a display) (reported by @0utsider)
- Restructured User disposal mechanism, so it runs after the OnUserLeft event runs, not before
-- This fixes users leaving behind slots when they leave (reported by @Shifty and @Dante )

2020.4.13.1289 - Context Menu for World Orbs, crash fixes and tweaks

More context menu! It's now also replacing the menus on the world orbs (thanks to @Danger Tester's for reporting some problems before the release!). More to come soon (like laser going through it so you can still double click the orbs). Also lots of tweaks and bugfixes, fixing some recent causes of crashes, UIX canvas breaking and potential memory leaks due to conservative Unity GC.

[h2]New Features:[/h2]
- Replaced the old radial menu on World Orbs with the new Radiant UI context menu
-- Right now, this blocks double clicks on the orb. This will be fixed in a few days when the laser itself is updated, so it supports going through the context menu
- Added a way to open the context menu in screen mode using the "R" key when a tooltip is equipped
-- Note this is mainly for testing purposes, some interactions don't work and some things are broken.

[h2]Security:[/h2]
- Changed public record listing logic on the cloud server to not list any public records of other users unless they're marked as listed (world submissions) or explicit path is provided
-- This mitigates listing of shared inventory folders and items unless someone knows the exact inventory path
-- This is only a mitigation. If you have sensitive items in your inventory, DO NOT create a link to those folders (using the Envelope button) - use the purple hand button to un-publish them
-- If you want to share private folders with other users you can request creation of a group (if you're Patreon supporter) or wait for this to be implemented. The envelope button is for fully public sharing.

[h2]Tweaks:[/h2]
- Snapper and SnapTarget will now not snap of either of the components is disabled (suggested by @H3BO3)
- Switched Fresnel Lerp Material to not use the late render queue. This fixes some alpha artifacts in the grid space
- Tweaked update order of the locomotion system, to help it get better in sync with the colliders and avoid them lagging a frame behind (based on feedback by @H3BO3)
- Cleaned up internal references in sync references and delegates to help aid GC more and prevent potential memory leaks
- Cleaned up more references and events in destroyed Slots, fixing another potential source of memory leaks
- Set the default position of the context menu a bit further away from the hand (based on general feedback)
- Added more cleanup to destroyed/closed worlds to avoid potential memory leaks
- Removed unused Slot tag tracking mechanism, reducing CPU and memory overhead for managing slots with a Tag

[h2]Bugfixes:[/h2]
- Fixed world crash when building object hierarchy string for diagnostic purposes (found in log from @H3BO3)
- Fixed crash/exception due to a race condition in audio stream, when it receives new data while being disposed (found in log from @H3BO3)
- Fixed UIX canvas breaking in certain cases when same element would get registered as changed twice due to parent structure changes
-- This should also fix some rare cases of UIX text potentially glitching out, due to race conditions
- Fixed grabbed item rotation not always working when one of the joystick axes is perfectly 0 (reported by @Hevon)
- Fixed LogiX connection point failing when a point is requested for impulse target method that has no proxy on the node (found in log provided by @Aetoriz)
- Fixed LogiX connection wire endlessly throwing exceptions, flooding the log with errors (reported by @Aetoriz)
- Fixed exception when building debug object hierarchy, causing Neos/World to crash (found in log from @Turk)
- Fixed exception when updating slot hiearchy event listeners, causing corruption of the data model and crashes (reported by @H3BO3, @spider and others, replicated by @Shifty)
- Fixed newly created cloud home sometimes not generating correct label with the user's name (reported by @Scary Guy [Debian Linux])
- Fixed some context menu items not showing any icons (reported by @Coffee)
- Fixed LogiX node packing not removing the grabbable component on the nodes
- Fixed LogiX cast nodes not getting fully removed when they're automatically destroyed, littering the world root (reported by @H3BO3 and @Shifty )
- Reworked the world/session orb session starting mechanism to help migitgate cases where multiple users clicking the orb at once cause multiple separate instances to open (based on feedback by @Turk, @H3BO3, @Shifty and others)