1. Neos VR
  2. News

Neos VR News

2021.6.23.11 - Projection 360 offset support, PBS Displace world position offset

Hello everyone! Just a tiny build, I'm mostly working on BEPUv2 now, but here's a few small bits I did on the side to break up things a bit (and because I they're be fun to do) - some additions to existing shaders! They should give you a fair bit more flexibility for achieving certain effects.

Also there is now visually impaired badge based on community request, you can assign it to yourself with commands below if you like.

[h2]New Features:[/h2]
- Added visually impaired accessibility badge
-- You can assign or unassign it by sending following commands to the Neos account: /addVisuallyImpaired, /removeVisuallyImpaired
-- Current badge image made by @Raith (CytraX) | Programmer, will likely be updated later

- Added "Worldspace View" projection mode to Projection 360 material
-- This works the same as "View", but ignores any rotation of the mesh
- Added Offset Texture and Offset Mask to Projection 360 material
-- These allow displacing the UV's of the projection (using mask to control strength in different parts as well) to allow for distortion and shimmering effects
-- OffsetMagnitude is in degrees along horizontal and vertical
-- OffsetMask R and G channels are multiplied with the offset magnitude to compute the final offset
- Added worldspace vertex offset map support to PBS Displace Materials
-- This applies offset to the vertex offset texture based on the XZ position in the world, allowing to vary the offset of the same item across the world (e.g. for plant movement, so it's not all synchronized)
-- The RG channels of the texture are used to offset the U and V when sampling the VertexDisplaceMap
-- By default, the XZ position is taken from the Slot position and shared across entire model. Enabling WorldspaceOffsetPerVertex will use position of each individual vertex
- You can now specify token on the TipJar component (requested by @MirPASEC and @Turk | Mentor Manager)

[h2]Tweaks:[/h2]
- TipJar confirmation dialog text is now localizable

2021.6.20.36 - Tweaks and fixes for nested sessions

Just a small build, fixing up some things around nested sessions! Pushing it ASAP now on request from community members as they'll be running some tests.

[h2]New Features:[/h2]
- Added WriteBack support to PlaybackPositionDriver (requested by @Epsilion)

[h2]Tweaks:[/h2]
- Neos headless now validates ParentSessionIDs and will exclude any that are invalid to prevent session information from being rejected (based on report by @Gawdl3y, @Turk | Mentor Manager and @Glitch)
-- Warning about invalid session IDs will be printed out in the log when starting up
-- "S-" is automatically added to the session ID if it's missing, fixing cases where omitting it leads to the nested sessions not working properly due to the ID being invalid
- Nested sessions will no longer show in the world browser when a contact is in the session, but you're not (or in the hub world) (reported by @Shifty | Quality Control Lead and @Gawdl3y)

[h2]Bugfixes:[/h2]
- Fixed sessions sometimes being duplicated in the world browser (reported by @Shifty | Quality Control Lead, @Gawdl3y and @Cataena)
- Fixed user banned by banByName or banById and later by ban command on the headless causing the bans to stack (reported by @Glitch)
- Fixed nested sessions sometimes not showing in the world browser, despite the user being in the session
- Fixed build script for Android not generating new Android builds (reported by @Shadow Panther [RU/EN, UTC+3], @xLinka, @Shifty | Quality Control Lead)

2021.6.18.4 - Nested sessions, Velocity/Cylindrical distance haptic filters

Hello everyone, sorry for a smaller build again, mostly focusing on BEPUv2 still, but here are some significant additions! The haptic feedback system got some nice additions, allowing modulating intensity around a cylinder or by velocity!

Also a potentially big addition for hosting - nested sessions! Those allow you to define your hosted sessions as nested in another, which is ideal for hub worlds - the nested sessions won't display in the world browser (unless you actually enter the parent world) and the parent world player count will now include sum of all the nested sessions within. There might be some quirks to work out as it starts getting used, but hopefully should be a good addition.

[h2]New Features:[/h2]
- Added VelocityHapticFilter which allows modulating haptic intensity based on the current velocity of the haptic point within the volume (requested by @Ryuvi | Technical Artist)
-- Supports smoothing out the velocity as well, to avoid jitter due to random timing intervals
- Added CylidricalDistanceHapticFilter, which allows modularing haptics based on radial and axis distance (essentially a cylinder) (requested by @Ryuvi | Technical Artist)
-- This is similar to RadialDistanceHapticFilter, but it has two modulation parameters - radius (along XZ plane) and axis offset (along Y)
-- Radius and Axis intensities are multiplied together to produce the final haptic intensity. Setting Start and End Axis intensity to 1 will only modulate based on radial distance
- You can override number of background and high priority workers with -BackgroundWorkers and -PriorityWorkers commandline argument (based on request from @Kyuubi and @Alex the фурри авали🐦)
-- IMPORTANT: This is use at your own risk feature for experimenting with performance tuning. If you experience performance problems, loading, UI and other things getting stuck as result of changing those values, we won't likely provide diagnostics and support
- Added support for nested sessions (based on request by @Turk | Mentor Manager, @Gawdl3y, @Epsilion and @Shadow Panther [RU/EN, UTC+3])
-- Each session can have one or more parent session IDs by specifying parentSessionIds in the headless config
-- Nested session won't show up in the world browser unless you are currently present in one of the parent sessions
--- IMPORTANT: This is not a security mechanism, but a cosmetic, the session and its metadata is still public even if you're not in the parent session
-- The host of the parent session must be a contact of the host of the nested session
-- Parent sessions now track total number of joined and active users in their child sessions and display this number in the world browser (this is useful for hub worlds)
-- SessionInfoSource now has TotalJoinedUsers and TotalActiveUsers
-- WorldListManager now has ParentSessionId property which allows showing sessions based on given parent session ID
--- The dash world browser has this driven to the SessionID of the currently focused world
-- This mechanism is mainly intended for public sessions. Using it with Contacts or Private sessions won't work properly

- Added new properties to FocusedWorldStatus (based on request by @LeDrascol)
-- SessionId, RawWorldName, UserCount, ActiveUserCount, AccessLevel, HideFromListing, AwayKickEnabled, AwayKickMinutes, UnsafeMode
- ImpulseMultiplexer now has an output indicating the number of impulses (implemented by @ProbablePrime | Docs)
- Added RolloffMode, MinDistance and MaxDistance to RandomAudioClipPlayer (requested by @AshtonSparx)
-- These are nullable values. You can override them per clip or globally for the RandomAudioClipPlayer

[h2]Tweaks:[/h2]
- Format LogiX node now starts with 1 input (implemented by @ProbablePrime | Docs)
-- This fixes the + button intersecting the node name
- ScaleTransition is now categorized under Transform/Drivers (implemented by @ProbablePrime | Docs, requested by @Sox)
- SessionInfoSource will now display the session info for sessions that are hosted locally, but not public (based on feedback by @LeDrascol)

- Merged Finnish locale additions (including MTC tutorial strings) by @Napo and @Toni Kat
- Merged Czech locale additions (including MTC tutorial strings) by @rampa_3 (UTC +1, DST UTC +2)
- Merged Dutch locale additions and tweaks (including MTC tutorial strings) by @marsmaantje
- Merged Korean locale additions and fixes by @MirPASEC
- Merged Russian locale addition by @Shadow Panther [RU/EN, UTC+3]
- Merged Japanese locale addition by @Aesc

[h2]Bugfixes:[/h2]
- Fixed regression in inspector sometimes not filtering components properly (found in a log from @Tekno Catron)

[h2]Known Issues:[/h2]
- When changing inputs on some nodes (e.g. multiplexers), the wire visuals can become stuck until the connecting node is moved

Canadian Git & Raith joining the team, MTC Streaming Hall released, Office Hours

Hello everyone and welcome to another of our weekly updates!

Since our major focus is on integrating BEPUv2, we have mostly smaller additions, tweaks and bugfixes to talk about, but hopefully still good ones. We also have some big news for the team itself!

Canadian Git and Raith have now joined the official Neos team! Raith is going to continue his work as programmer on our ticket system and serve as one of the moderation leads, while Canadian Git has been training moderators, making sure that tickets get responded to and otherwise ensuring that things run smoothly in the background.

With direct access to team communication channels, resources and having a direct voice in the team, they will help to ensure that Neos and its community keeps growing in a healthy and safe way.

To provide more communication channels, we have also started official Office Hours on the Discord! You can see more information in our previous announcements and on our Wiki page.

The MTC Streaming & Recording hall has now also officially been released to the public! It not only serves as a good learning resource for Neos' camera system, microphone and Twitch integration, but a good utility world with a stage, different sets and highly customizable green screen.

We have also closed about 30 GitHub issues from the community, implementing numerous additions to the custom context menu system, improving work with nullable values in LogiX, improving SteamVR initialization for Oculus users, as well as fixing some elusive bugs, notably avatar legs randomly jumping up or getting twisted and some videos having glitchy audio.

Some smaller features have been added too, notably we expanded the ability to control access to headless sessions with cloud variables, including a custom message when access is denied or support for leg haptics with bHaptics. Read below for more info!



[h2]Canadian Git and Raith joining the team[/h2]
The official Neos Team has welcomed two new members, everyone welcome Canadian Git and Raith! Both have been prominent members of the moderation team, but have been making numerous contributions.



Raith has been programming the moderation ticket system over the past several months and making numerous other contributions to Neos, both with official team work and unofficial community content.

Canadian Git has been a huge help for many of the internal workings of the moderation team, ensuring that tickets get answered, training new moderators with the use of the ticket system and overall ensuring that things run smoothly.

With direct access and voice in the Neos team, both of those members will be able to help Neos and its community grow.



[h2]MTC Streaming & Recording Hall released[/h2]
The Streaming & Recording Hall is now available to the public as a place to learn about the audio, video, and streaming features of Neos! You can enter through the now unlocked door in the MTC Hub.



We have designed this to not only serve as a good educational resource on any features of Neos related to streaming and recording, like the camera system, camera anchors, microphone, Twitch chat and commands and others, but also a good utility world.

[previewyoutube][/previewyoutube]

You’ll be able to find a nice looking stage for presentations with configurable lighting, a green screen area with customizable colors, tracking symbols or custom backgrounds and a streaming room with several different sets, ranging from casual to more business oriented.





[h2]Office Hours[/h2]
Office hours are the Neos Team's series of Events held within the Neos Discord that are an opportunity for the community to engage directly with various members from the Neos team at large in a regularly scheduled format!

These office hours are intended to enable everyone a consistent opportunity to raise issues, discuss new ideas, and to generally provide feedback with regards to Neos generally, directly with the Neos team.

We will be holding these office hours on Discord using the new Community Meetings Discord meeting stage! Questions may be submitted via #office-hours channel, and we will be passing the mic to users who participate to more directly ask questions, and contribute to the topics that are discussed during the office hours.

You can find more details as well as the schedule on our Wiki.

[h2]24 hour livestream[/h2]
Last Friday, we did our first 24 hour livestream, celebrating 3K Followers on Twitch! The stream was a pretty big success, as we gained over 200 new followers, over 100 subscriptions and had more than 100 viewers for the entire duration.



We’ve played a number of games in Neos and some with the viewers in the chat, winning some of you some extra storage space and Neos merch. You can watch the footage here on Twitch, we’ll be splitting and uploading the archive on YouTube as well.

Big thanks for everyone joining us for the fun! Twitch is one of our big communication methods and we’re happy that we can use it to show off Neos, its amazing community and their creations and answer everyone’s questions in a live format!

[h2]Leg Haptics[/h2]
Our generalized haptics feedback system provides components for mapping in-world haptics to the head, torso and arms, but was missing components for legs. With recent update leg haptics are now properly supported, via the LegHapticPointMapper!

Both new and existing full body avatars are automatically setup with this component. The mapping is analogous to arms, with legs being parametrized using two variables - position along the leg, going from top (pelvis) to bottom (ankle) and angle around the leg, with knee being the center forward direction.

In most cases you don’t have to worry about the parameterization, as the automatic detection will work out of the box for most avatars.

We’ve also added the leg mapping support to the bHaptics driver, so if you have the haptic modules mapped to your legs, you should now receive haptic feedback on your lower legs out of the box!

[h2]Improved LogiX support for Nullable values[/h2]
Since nullable data types are being used more commonly in Neos’ data model, we’ve added a few nodes to make it easier to work with those, particularly for packing and unpacking nullable values.

Nullable values can be any common primitive, like int, float or float3, with the added concept of not having any value at all (being null). With those nodes you can check for presence of the value and exact the raw value or construct a nullable for writing it back into the data model.

LogiX wires were updated as well to properly reflect the underlying data type in their color, with a slight transparency to indicate that the type is nullable.

[h2]Context Menu Scripting Improvements[/h2]
The official Context Menu customization system has received some more additions this week as well based on community feedback! When opening a custom context menu, you can now optionally freeze its current position or open it as hidden, meaning it’s only visible to you, but not anyone else. Please be aware that this is just a cosmetic and won’t necessarily prevent tampering.

For the RootContextMenuItem we added more filtering options. You can now avoid injecting items into the context menu depending on whether it’s opened by left or right hand, primary or secondary hand, or when a tool is equipped.

[h2]Oculus/SteamVR initialization improvement[/h2]
Since some of our Oculus users use SteamVR to run Neos in order to use Vive Trackers or the SteamVR Big Screen, we’ve added a heuristic when auto-detecting runtime to always use SteamVR if it’s already running on the system, rather than running natively through the Oculus Runtime.

This should help improve behavior in those cases and reduce some confusion when the Vive Trackers don’t appear. However if SteamVR is just installed, but not running, Neos will still default to Oculus.

[h2]Extended session access control with cloud variables[/h2]
To provide more control over access to your headless sessions, we’ve added new configuration options for cloud variables in addition to allowUserCloudVariable. You can now use the following settings to define cloud variables to control access. Each variable needs to be of type bool.

  • denyUserCloudVariable - when defined as true for a given user, they will be denied access to a given session. This is mainly intended to serve as a cloud-variable based banning technique. If no value is defined or the value is false, the user will be let in if other conditions are satisfied
  • allowUserCloudVariable - when defined as true for a given user, they will be always granted access, even if the session is at the user limit. This is mainly useful for allowing certain users (e.g. admins, moderators, staff…) to a given session
  • requiredUserJoinCloudVariable - each user is required to have a value set to true in order to be able to join (unless allowUserCloudVariable is set true for them, which takes precedence). However they are still subject to other rules, notably the maximum user limit for a given session.
  • You can also add requiredUserJoinCloudVariableDenyMessage setting to your headless, to customize the message displayed to the user when the access is denied due to not having assigned a true value.


[h2]Security Improvements[/h2]
Based on community reports through our moderation ticket system, we have made a few security improvements. Notably the delegate references are now fully validated, preventing methods that aren’t part of the data model from being referenced.

The SimpleAvatarProtection will now also always ask user for confirmation before removing all instances, to prevent the user from accidentally or unintentionally removing it from their avatar.

[h2]Fixed avatar legs randomly jumping up[/h2]
One of the long elusive bugs in Neos has been finally fixed! On certain avatars and certain conditions, the legs of the avatar would randomly jump up, notably when the user was stationary.

With recent community reports and samples of avatars that reproduced this problem reliably, we were able to narrow down the issue to a general mathematical function Slerp, which would under some rare conditions produce invalid values (NaN’s), corrupting any behavior using this function internally.

Since this function is used across many behaviors and even exposed to users via LogiX, it’ll likely fix some other random oddities, both with Neos’ behaviors and user made ones as well.

[h2]Fixed glitchy audio with Mono, Quad and 5.1 videos[/h2]
Another notable bugfix is for the Unity Native video playback engine. When trying to play videos that don’t have stereo audio (e.g. Mono, Quad or 5.1), the resulting audio playback would be glitchy and either sped up or slowed down. With recent build this has been fixed, which should improve the video playback experience for those videos and prevent the requirement to switch to libVLC.

[h2]Community Player Survey[/h2]
Earthmark and dfgHiatus have been running a community survey for both new and existing players. If you’d like to help them out, you can fill the survey here: https://docs.google.com/forms/d/e/1FAIpQLSdp3nFz9Wt6o27S7jsJOukfzMv9dFjyrSfHrTgXiBAvmABzwg/viewform

[h2]Progress on BEPUv2[/h2]
As we announced last week, our major focus has now shifted to integrating the BEPUv2 physics engine with Neos, for improved performance and basis for various performance oriented features (notably culling systems).

This is still in progress, with a lot of the time dedicated to studying the internals and architecture and planning the redesign of integration of the physics engine with Neos. There's not much interesting to show yet, but if you're curious here are some internal notes, as well as footage of Neos with BEPUv1 removed and as a result not being able to interact with nearly anything! (until BEPUv2 is integrated in place of course).



[previewyoutube][/previewyoutube]

We'll continue working on the integration and probably start having first bits in over the next week. If you'd like to keep tabs on the progress, make sure to join our official Discord below with access to the #devlog channel.

And as usual, big thanks to everyone supporting Neos, whether it's our Patreon supporters, Twitch followers and subscribers or just any members of the community making the platform come alive every day!

2021.6.14.1204 - Extended session access control with cloud variables, fixes

Another patch, fixing a few more things that got broken! Also an extra new feature to give more flexibility when controlling headless world access with cloud variables (including custom deny message)! Check #devlog for a sample.

Compatible with previous build, but obviously you (and potentially the host) need to update if you want the fixes!

[h2]New Features:[/h2]
- Added denyUserCloudVariable to world startup configuration, which allows denying join access to users via a cloud variable
-- This functions similarly to allowUserCloudVariable, except when the value for given user is true, they will be denied access
-- This always takes precedence over other variables
- Added requiredUserJoinCloudVariable to world startup configuration, which requires a cloud variable to be set to true for given user so they can join
-- You can set a custom deny message via requiredUserJoinCloudVariableDenyMessage
-- If the variable isn't set to true for given user, they won't be allowed access
-- Setting the variable to true won't automatically grant access (unlike allowUserCloudVariable) and will still need to pass other rules - public access, session user limit and so on
-- allowUserCloudVariable takes precedence over this one, allowing to always allow given user access
-- This variable is useful for controlling access to a session, without bypassing the session max user limit and providing a custom message (requested by @Geenz | Graphics Programmer on behalf of VBLFC)
- Moderator badge is now fabulous

[h2]Tweaks:[/h2]
- Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]
- Merged Japanese locale additions by @kazu0617 Neos:kazu

[h2]Bugfixes:[/h2]
- Fixed Tween OnDone impulse not firing (reported by @MattyK, @GhostZ36 and @Dante)
- Fixed Model/Image/Video import dialogs not initializing properly when opened by other code
- Fixed some callbacks not running properly
- Added missing "Dash.Actions.TurnOffUIEdit" English locale key (reported by @kazu0617 Neos:kazu)
- Fixed not being able to Create a new inventory folder (reported by @Psychpsyo)