1. Neos VR
  2. News

Neos VR News

2020.4.22.882 - New grabbing equipping system (Radiant UI), tweaks, bugfixes

Another piece of Radiant UI is in! This time the gripping/equipping system has been redesigned to provide more ease of use, fluidity and make the system more powerful into the future for building all kinds of cool gadgets and tools.

One of the major changes is more explicit separation of the grip types. Gripping by hand always results in physical grip, so your controls are no longer taken away by just grabbing an object. Grabbing with the laser will still allow to move the object around with your joystick or touchpad.

Another big change is that you can now use all tools and equippable items simply by grabbing and holding them. You can still equip them traditionally so you don't have to keep the grip pressed.

Related to this, the system on how they snap has been reworked to be built around hands, instead of controllers. The items now define where the hand goes when they're gripped and align themselves automatically with the skeleton of your hand. This fixes many of the items equipping at very akward poses.

IMPORTANT: The gripping poses generally require a manual setup, as the system has no idea where a hand should go. All existing items are upgraded with heuristics on spawn. This works ok for many of the tools and items (especially weapons), but not for all of them. You will need to upgrade your existing items to the new system. This should be pretty easy and quick to do though, check the release notes for details or this video. The process will be made even easier with subsequent updates as well.
[previewyoutube][/previewyoutube]

I know this is a bit of a painful change, but we can't move forward without redesign of the system and since many of the items were never setup properly in the first place due to lack of the system, this now provides them with an easy upgrade path moving forward, allowing you to build content that is more fluid and easier to use, especially for new users!

[h2]New Features:[/h2]
- Redesigned tool/item equipping and gripping mechanics (thanks to @_Turk, @Abysmal, @Shifty, @GearBell, @H3BO3, @Rukio, @PeterTheThinker, @ohzee and other @Danger Tester's for catching early bugs and providing feedback!)
-- All tools/items are now usable simply by grabbing and holding them. They will automatically align themselves and be usable while held.
-- Double-grip to equip still works, as well as other equipping mechanics (context menu or pulling in with laser). Equipping the item prevents the need to keep holding grip
-- Reworked physical grabbing mechanics - grabbing with hand is now always considered physical and won't interfere with secondary/locomotion (only grabbing by laser will)
-- Reworked double grip equip mechanic - if the first grab equips a single tool, the second grab doesn't require to actually grab it, fixing issue where the tool getting out of the grab sphere could not be double-grip euquipped (reported by @_Turk)
-- Removed the obsolete tooltip repositioning mechanism (this will be replaced by Edit-mode repositioning with the new Grip Pose Reference system)
-- Removed several old laser, grip/equip and tooltip internal mechanisms, reducing the complexity and sources of bugs for these systems
- Added "Grip Pose Reference" (under Interaction), which allows defining a hand grip reference pose on tools/items
-- This will automatically align the tool/item with the avatar's hand on grab/equip. It will automatically match the skeleton and size of the hand to the item
-- All existing equippable items/tools are auto-upgraded with heuristics, which estimates where the hand goes. This works ok for some items, but for some it will require manual adjustment
-- To manually adjust, open the root and find the "Left/Right Grip Pose" and check "Show Visual". Then position the hand overlay to where a hand should grip the item
-- You can define multiple grip poses on an item. The one that's closest will be used when grabbing the item

- Added "Flip Preview" to the interactive camera control (in the settings panel), which flips the camera preview horizontally (requested by @GearBell)
- Added "Block Grip Equip" to tooltips, which prevents them from being auto equipped simply by grabbing (requested by @GearBell)
- Added "Timer Start Sound" and "Timer Countdown Slow/Fast" audio references to Interactive Camera, allowing to setup sounds that play with the timer function (requested by @RueShejn)
- Added hideFromPublicListing parameter to headless config for starting worlds, which will hide the world from public listing (requested by @Enverex)
- Added -user, -password and -token commandline arguments to headless to allow logging in the user (requested by @Bitman the Hackerman (PolyLogiX))

[h2]Tweaks:[/h2]
- Removed "Physical" property from Grabbable and draggables (Slider, Joint...), because it's now obsolete
- Removed laser tip touch source, greatly simplifying the touch logic and preventing accidental touches with the laser. Physical touch is now done with the actual index finger on the avatar
- Rewrote brush material/color dipping to be independent on the touch source, making it more robust and work in screen mode as side effect
- Updated youtube-dl to 2020.03.24 (from 2020.03.08) (suggested by @Shifty)
- Generalized custom grab filters in the codebase for Grabbable, Slider, Joint and other Grabbables and expanded the possibilities of the grab checking system (this allows the GrabPoseReference to reject grabbing with specific hand for example)
- Improved baguette detection
- Optimized grabbed item lookup when saving items into inventory to reduce the hiccup during the save
- Cleaned up some old unused libraries from the codebase

[h2]Bugfixes:[/h2]
- Fixed Steam integration (and consequently the Steam Networking Sockets) not being loaded on Linux client and headless (reported by @Cyro)
- Fixed cloud interface breaking when the cloud server responds with 429 or 500 codes, causing assets and other things to not load (found in log from @DeliriousJax)
- Fixed cloud sending repeated Patreon messages every 6 hours in some cases where user email is changed (reported by @Cyro)
- Fixed server errors (500) in some cases when uploading session thumbnail
- Fixed a potential Patreon integration exploit on the cloud server
- Fixed Set Child Index node not working correctly after recent Order Offset rework (reported by @jeana, @Aetoriz)

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 )