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!
