1. Neos VR
  2. News

Neos VR News

2021.7.6.1154 - SignalR for messaging system, user timezone offset and more

Hello everyone! I got another build for you! As I mentioned in #devlog, I paused work on BEPUv2 for a bit (just about two days) to integrate the SignalR service, given some issues that cloud has been having. As of this build it now powers the messaging system, which should greatly improve the overall responsiveness and robustness of the cloud, since the old system was the major source of load, especially with lots of people on.

It's also good foundation for lots of other features that are to come later as well (see the cloud roadmap on GitHub for more)! I might do a few of them soon too, I'll see how it goes. Since this is a major change to how the messaging system works too, keep an eye out on some weirdness and bugs as usual, we'll clean them up as they come and make adjustments like usual whenever something new comes out!

Also there's a whole bunch of goodies and quality of life improvements from @ProbablePrime | Docs, including user timezone nodes and blocking gizmo interactions from guests!

[h2]New Features:[/h2]
- Implemented new message delivery system based on the SignalR service
-- This is significantly more efficient and scaleable system (push notification vs polling)
-- This reduces the load on your connection and on the cloud servers, resulting in much better overall responsiveness (more cloud resources are available for other things like inventory, world searching and so on)
-- This also reduces the message delivery latency to near instant (ignoring networking lag)
-- The robustness is also improved, decreasing likelihood of failed delivery
-- The system is compatible with the old message API, but not that it will likely disappear or be severely restricted at some point!
-- Messages that have been viewed by the user are now marked green (note that it doesn't necessarily mean the other user has actually read them)
--- Note that this won't work for users on the old build
- Added nodes for getting user's time offset from UTC (requested by @Earthmark, @Alex from Alaska, implemented by @ProbablePrime | Docs)
-- User Time Offset - gives current TimeSpan offset of given user relative to UTC
-- User Time - gives given user's current time in their timezone
-- Local User Time Offset - gives time offset of local user

- Added DatetimeKindNode (implemented by @ProbablePrime | Docs)
-- This provides the type of DateTime structure - UTC, Local or Unknown

[h2]Tweaks:[/h2]
- Non-builders can no longer grab or click the LogiX node browser (reported by @Shifty | Quality Control Lead, Maliceowo, implemented by @ProbablePrime | Docs)
- Non-builders can no longer click gizmo buttons (reported by @Shifty | Quality Control Lead, Maliceowo, implemented by @ProbablePrime | Docs)
- DateTime LogiX display now shows (UTC) at the end when it's UTC. Nothing otherwise (based on request by @Shadow Panther [RU/EN, UTC+3], implemented by @ProbablePrime | Docs)
- Increased timeout for getting message history (this can help resolve cases of the history failing to load in some cases, reported by multiple users)
- Added warning about wallet needint to support ERC-20 tokens when making NCR withdrawal (suggested by @pammematth)
- Upgraded Cloud libraries to latest versions

- Merged Korean locale addition by @MirPASEC
- Merged English locale typo fix by @InnocentThief

[h2]Bugfixes:[/h2]
- Fixed CDN not being used for all accounts
- Fixed API accepting credit transactions addressed to the same account they're sent from

2021.7.3.282 - Override corresponding world ID, tweaks and fixes

A small update, mostly just adding a new headless option and fixing up a few issues reported by community. This should also fix fresh installs of headless not working on Linux due to incorrectly named file.

Compatible with the last build!

[h2]New Features:[/h2]
- Added overrideCorrespondingWorldId to world startup configuration
-- This lets you override which world ID is used to match and group sessions in the world browser, as well as which one will be used for "" option
-- You can use this if you're hosting a specialized version of a public world, but you still want it to be grouped with the normal ones (and prevent people from starting sessions of the specialized one) (based on request from @Rue Shejn | Artist 3D and others)
-- This is in form of explicit record ID, as follows:

"overrideCorrespondingWorldId" :
{
"recordId" : "R-xyz",
"ownerId" : "U-Owner/G-Owner"
},



[h2]Tweaks:[/h2]
- Unsafe sessions will gray out "Invite Here" button and not announce themselves on WAN to avoid some cases of internet users being able to join
-- Note that even if you join Unsafe session, the unsafe features are only available to the host and they pose no risk to joined users, only pose danger to the host (meaning, if you use those sessions, do not try to invite people you do not trust)
- LogiX nodes will now break drive on Enabled on failure to avoid the node staying on when it's misbehaving
-- If the node keeps breaking rapidly, it'll be removed
-- Please do not drive the nodes to stay enabled, this is a protection mechanism against faulty LogiX
- User and Slot are now presents for Dynamic Impulse nodes (implemented by @ProbablePrime | Docs, requested by @Sharkmare)
- Merged Finnish locale additions and tweaks by @Napo and @Toni Kat
- Merged Japanese locale update by @Aesc
- Merged Russian locale addition by @Shadow Panther [RU/EN, UTC+3]

[h2]Bugfixes:[/h2]
- Rebuilt headless, which should fix incorrectly named BEPUPhysics.dll file, causing the headless to not load on Linux (reported by @Glitch and @Shadow Panther [RU/EN, UTC+3])
- Increased timeout for initial fetching of the friends list from the cloud API, to prevent the request from failing for people with exceptionally large friendlists (reported by @Nexulan | Producer)

2021.7.1.437 - Importing external screenshots as Neos photos, tweaks and fixes

Hello everyone, just a small build again since most of the time goes into BEPUv2 now, but here's a few goodies! Most notably you can now import external screenshots (e.g. with Print Screen) as Neos Photos, meaning they get all the metadata (including "Save Screenshot" option) as ones captured in-game! There some improvements for cloud and bunch of bugfixes as well.

[h2]New Features:[/h2]
- Added "Neos Photo" preset for importing images, which will setup the image with metadata as if it was in-game photo
-- Note that the metadata is picked at the moment of import, so it won't be fully accurate. This option is recommended only if you've just captured the screenshot (e.g. with Print Screen or other capture tool)
-- Externally captured photos imported with this option will have the "Save Screenshot" option for other users to allow convenient saving
- FocusedWorldStatus now reports the MaxUsers (implemented by @ProbablePrime | Docs)
- users command on headless now lists the "Silenced" status of the user (requested by @Glitch)

[h2]Tweaks:[/h2]
- You can now use your Neos username or ID to login at auth.neos.com in addition to just the email (requested by @kazu0617 Neos:kazu and @Shifty | Quality Control Lead on behalf of VBLFC)
- Internal moderation tools improvements and bugfixes (based on report by @CanadianGit | Moderation Team on behalf of the moderation team)
- Reverted moderator badge to original
- UIX Canvas sample from "Create New" now has Grabbable on it by default (implemented by @ProbablePrime | Docs)
- Starting playback with speed set to negative will now correctly start playing from the end (e.g. with Play One Shot, based on report by @Shifty | Quality Control Lead)
- Laser is now hidden for other users when the context menu is opened as hidden (based on request by @Psychpsyo)
- Inspectors, Panels, LogiX Node Selector, Full Body Calibrator and Avatar Creator now have object roots (requested by @AshtonSparx)
- Account recovery code email now omits the period in the email to avoid confusion (based on report by @Shifty | Quality Control Lead)
- Account recovery code is now shorter to make it easier to copy & paste or manually type, but it's also valid for 15 minutes instead of 1 hour (after 15 minutes, you'll get a new code)

- Merged Czech locale additions and tweaks by @rampa_3 (UTC +1, DST UTC +2)
- Merged Russian locale addition by @Shadow Panther [RU/EN, UTC+3]
- Merged Korean locale addition by @MirPASEC
- Merged Japanese locale addition by @kazu0617 Neos:kazu

[h2]Bugfixes:[/h2]
- You can now change your password on auth.neos.com when your username contains userspace (reported by @Shadow Panther [RU/EN, UTC+3], fixed by @ProbablePrime | Docs)
-- Note: Many non-unicode characters will still prevent the password from being changed, a proper solution is being investigated
- Fixed Right leg haptics being setup as left leg (reported by @Turk | Mentor Manager, @ALEX VR and @Rue Shejn | Artist 3D)
-- Existing avatars should be automatically fixed, but if you made any customizations for your avatar, you might need to redo them for the right leg
- ContextMenuSubmenu now properly ignores all item sources if they're in the hierarchy of another user (reported by @Psychpsyo)
- Fixed regression causing Spawn methods on RandomObjectSpawner not working (reported by @kazu0617 Neos:kazu and @esnya)
- Fixed ExternalSlotSaver causing crash when the target is currently parent of the slot this component is on (reported by @seif1)

June Community Showcase, bHaptics Tropical Paradise event, Builder guidelines

Hello everyone!

This week has been pretty quiet in terms of Neos updates as BEPUv2 implementation has ramped up, but we still have some interesting things that have happened around Neos!

If you missed our June community showcase livestream, check out the recording below, we showed off some awesome maps, games and assets created by you! We look at some interesting ones in the article below too, including external LogiX editor, cool maps and gadgets!

We have also showcased the Tropical Paradise map for the upcoming bHaptics event that's happening this Saturday. The map is packed with detailed visuals, gadgets, interactions and vehicles, all setup with full haptics too for those who own bHaptics vest (but works with just controllers too). If you'd like a bit of taste of what's coming, check the video below!

To help creators better understand on what features and patterns they can rely on to build long lasting content and which approaches to avoid, we have also put together Things To Avoid Wiki page. This continually growing document (community contributions are welcome too!) should cover on what to avoid and what to use if you want your content to last a long time without having to fix it.

This is not to discourage from poking around and hacking things together - it's one of the parts of Neos and a very fun thing to do, but rather to understand which things will break at some point and which will last and pick the right approach for whatever you're doing.

And last, we showcase some progress on BEPUv2 integration! It has now moved majorly to the implementation phase, with several core things already functional. There's still quite some to do, but things are now falling in place and becoming more complete bit by bit.



[h2]June Community Showcase[/h2]
On our last Friday livestream, we did our regular end-of-the-month community showcase, showing off all the amazing worlds and gadgets made by the community during this month. If you missed the stream, you can watch the recording below.

[previewyoutube][/previewyoutube]

[h2]Tropical Paradise map sneak peek[/h2]
As one of our extra streams during last week, we showcased the progress on our latest upcoming map - the Sojourner Island for the bHaptics Tropical Paradise event. This island is one of the most complex maps that we have built so far, featuring rich vegetation, many interactive environment pieces and items, vehicles, day and night cycle and is fully setup with haptic volumes.



On July 3rd it’ll be open as part of the official bHaptics event, but it will also be accessible afterwards for anyone who wants to check it out, use it as a hangout world or take it apart to see how it’s built.

If you’d like to see some of what’s to come when the map is released and you missed the stream, we have published the recording here:

[previewyoutube][/previewyoutube]

[h2]Things to avoid - building content that lasts[/h2]
Long term content compatibility is one of the core values of Neos and much of its architecture is designed to avoid or at very least minimize content breakage as development continues. However we have noticed usage of particular patterns that do not utilize those systems properly or build complex behaviors on some implementation quirks.

Unfortunately such patterns tend to be brittle and can cause unexpected breakage as things change, without possibility of fixing things on our end due to them being outside of the scope of the designed systems.

To help everyone understand what kinds of patterns lead to compatibility problems and what features should be used instead, we have put together a Wiki page detailing some of the common issues and what to use instead to ensure that your content keeps working. This page is also open for everyone’s contributions, if you have tips and tricks on avoiding compatibility issues, feel free to share them with the rest of the community!

This is not to discourage or call out any such usage - Neos is a platform designed for experimenting, toying around and hacking things together, but we want everyone to understand which things will break at some point and which ones can be relied upon in the long term, so you can pick whatever suits you the best.

Doing some silly cursed things that you don’t care if they break? Feel free to go to the darkest depth of hackery. Want to build something that lasts for years? Use systems and behaviors designed for longevity!

[h2]Office Hours Update[/h2]
A few weeks ago we announced official office hours - a way to directly ask us questions about Neos and its development through the Discord stage. Since then we’ve done a few office hours and gathered some generally positive feedback.

If you missed any of the office hours, check out the Wiki page. It contains their times, as well as notes from the past ones, so you can keep up to date on what was asked and answered.

[h2]Community Highlights[/h2]
Hello everyone! I hope you’ve been all enjoying the summer heat! This month has been filled with alot of spic-y has been quite nice-y. So check out some of the community creations and maps and let us know what you think!

[h3]Remote Logix Editor by Voyage[/h3]
Often folks have always wondered, “Why can’t I use Logix in a 2D Editor?” Well now you can! A member of the Japanese Community has come out with a plugin that allows you to do just that! If you're interested in it’s setup, or would like to try it for yourself. Check out the itch.io page.



[h3]Cyberdelic Plane by Spex[/h3]
Brought to you by one of our Vaporwave Technicians, we have Spex making quite the 90’s aesthetic comeback with visuals yet again in another world! Give this world a check out as you get a nice blast to the past. Thanks Spex for the wonderful aesthetic.



[h3]Midnight Rooftop by Jellyosaurus[/h3]
Another recreation map from Jellyosaurus, you may recognize this one as this is a map originally made by ImLexZ. There are some Neos tweaks here and there, but generally a good map for those unfamiliar and wanting something more of the social variety in Neos. Thanks Jelly for the map!



[h3]Swarm Slaughter by Gearbell[/h3]
Rip! Tear! Destroy! In this wonderful stress relief simulator world, you are imbued with the power of guns, gas, and glory! There are a variety of weapons, also with special abilities, so check out the map and squish some bugs! Thanks Gearbell for the good time!



[h3]Seeing Red by Creator Jam[/h3]
In the middle of the night, lost in the woods, you notice something following you, hunting you. As It approaches, you lose it in the dark of the colors before. It’s Seeing Red! A wonderful tag game made by the participants at Creator Jam where the theme this week was to make out a whole hide and seek tag like system, where it plays like zombies. Get tagged, become a werewolf! Tag your friends afterwards. Thanks for the awesome game mode folks at Creator Jam!



[h3]Community Gadgets[/h3]
GhostZ SpryRa One Water Gun:
Feeling the heat this summer? Cool down with these really neat and refillable Super Soakers that will drench your friends and foes in water particles. Thanks Ghost for the awesome water guns!



[h2]Progress on BEPUv2[/h2]
Majority of the development focus is now focused on the BEPUv2 integration. We’ve already got some things implemented and working (some only partially) - primitive colliders and mesh colliders now work, as do raycasts and convex sweeps. Some metadata management is implemented too.

[previewyoutube][/previewyoutube]

There’s still a lot to do, but as the development transitions from the design phase (figuring out how everything will take together) and more to actually coding everything out, things should start coming in quicker.

If you’d like to see all the subtasks of the integration, check out the Physics roadmap here. You can also find a lot more in depth information in the #devlog channel on our official Discord, as well as some implications of the new implementation. We’ll sum those up once the implementation is done though, so don’t worry if you don’t want to go that much in depth!

That's all for this week, see you in the next one! And as usual, huge thanks for everyone's support in moving this project forward, whether it's supporting us on Patreon, Twitch, ICO or just being part of the community and making the whole place come alive with everyone's passion and imagination! See you next week!

Nested Sessions, bHaptics Tropical Showcase event, VBLFC Registrations Open

Hello everyone and welcome to another weekly update!

This week has been quieter in terms of development as the last, as the main focus is on integrating BEPUv2, but we have added some useful features regardless. Notably, Neos now supports nested sessions!

Those are ideal for setting up hub worlds, when hosting an event across multiple instances. The instances won't show up until you enter the hub session and the world browser will also showcase total number of users across all instances for the hub, giving you better representation of the number of attendees.

Projection 360 and PBS Displace materials have also received some new additions, notably offset support for Projection 360 to create shimmering and distortion skybox effects and PBS Displace now allows modulating the vertex displacement by the XZ position the world, allowing to easily randomize displacements when used on large set of objects, rather than having them all synced.

In cooperation with bHaptics, we also have an official Tropical Showcase event on July 3rd at 1PM PST in a brand new tropical island map! This map is fully setup with haptics, which will let you feel the environment in ways you couldn't before, especially if you own the haptic vest and accessories!

The VBLFC convention has also opened registrations, if you're interested in attending, make sure to register in the link below.



[h2]Friday Livestream Q&A[/h2]
If you missed our last Friday livestream you can watch the recording here! We answered a whole bunch of questions about Neos' development, features and other things, so if you're interested in learning more about the development it's worth a watch!
[previewyoutube][/previewyoutube]

[h2]Nested Sessions[/h2]
We have added support for nested sessions, allowing easier creation of hub worlds for events such as the Metaverse Meetup, Creator Jam and the upcoming VBLFC. Nested sessions by default don’t show in the world browser unless you’re present in the parent world (typically a hub session) to avoid cluttering the world browser.

In addition, the parent session will also display the total number of users in all of its nested sessions. This way you can get a much better idea of how many people are attending a particular event, even though it’s spread across multiple individual sessions and hosts.

If you’d like to make a nested session, all you need is to add a configuration setting to your headless server named parentSessionIds. This is an array of session ID’s that are the “parents” - essentially a hub worlds through which the session will be accessible.

For this reason it’s recommended to use custom session IDs, otherwise you’d need to update your configuration every time the parent session restarts.

The second requirement is that the host account of the parent session needs to be a friend of the host of the nested session, otherwise it won’t be accepted as an actual nested session. It will still not show in the world browser, but won’t be counted to the totals.

We have also updated corresponding components that provide metadata about the number of users. In addition to JoinedUsers and ActiveUsers, there are now TotalJoinedUsers and TotalActiveUsers which contain the summed up numbers from all nested sessions.

One important note is that nested sessions aren’t a security mechanism. They are primarily designed for public events as an organizational tool, but do not actually protect the data necessary to join the session. If you need to control and who cannot, you’ll have to use proper mechanisms for that, such as cloud variables. You can read the last week’s weekly update to learn more about those.

[h2]New Haptic Volume Filters[/h2]
We’ve made some small improvements to the haptic support in Neos as well, adding a CylindricalDistanceHapticFilter and VelocityHapticFilter, to give more flexibility in modulating haptic feedback from the environment, whether it’s just for your controllers or haptic vest like bHaptics.

CylindricalDistanceHapticFilter allows modulating the strength of the haptic feedback based on a distance along a cylinder. In contrast to Sphere, it can be configured so the intensity remains the same along the Y axis, but increases or decreases as you move further from the center.

VelocityHapticFilter does pretty much what it says on the tin. It allows the change of haptic strength in response to the relative movement speed within the haptic volume. This is calculated for each individual haptic sampler point. This can be useful to create air or water drag haptics.

[h2]Projection 360 and PBS Displace material additions[/h2]
As a fun thing on the side, we have made small, but hopefully quite impactful additions to two of the materials in Neos. Projection 360 now supports offset map, which displaces the view direction per-pixel using the R and G channels in the texture. The displacement can be also modulated or completely masked out using another texture.

This is ideal for various distortion and shimmering effects. For example for skyboxes with clouds or water, you could make those parts wobble and shimmer to give them a bit more life. The material now also supports worldspace view projection, which simply ignores any rotation of the mesh.

[previewyoutube][/previewyoutube]

The PBS Displace material has also a significant addition in the form of worldspace vertex offset map. This uses a texture which is sampled either based on the position of the mesh or each individual vertex, to produce an offset for the vertex displacement map. This can be particularly useful for randomizing or otherwise modulating animated offsets for things like subtle motion of plans, so all plants don’t move fully in sync.

[previewyoutube][/previewyoutube]

We hope that those small additions will open up some new cool creative options when building worlds and items in Neos!

[h2]bHaptics Tropical Showcase event[/h2]
Coming this summer on July 3rd at 1 PM PST is the Tropical Showcase! Set in an upcoming map built by our team to showcase the possibilities of Neos and the haptic feedback system with the bHaptics vest and accessories.

This beautiful tropical island map is designed to not only be a cool summer hang out map, but it’s equipped with many environmental pieces fully set up with haptic volumes. Those will trigger haptic feedback not only on your controllers, but also any bHaptics accessories, including the vest, arm and feet attachments and the face haptics.

If you’d like to join for the main event, make sure to RSVP here. However the map itself will be open for anyone to join any time in case you’d like to check it out on your own or take it apart to see how the haptics work!



[h2]VBLFC Registrations Open[/h2]

Virtual Biggest Little FurCon has officially opened their registration! You can sign up here.

Their event dates are July 9th through July 11th. Make sure you register for the event prior to attending. You won’t be able to access it until you do!

[h2]Progress on BEPUv2[/h2]
The first bits of BEPUv2 are now starting to get integrated into Neos! The work is still pretty much in phase where there are many disconnected pieces floating in the air and we’re looking for a good way for them to crystallize, but based on some more experimentation and designing it’s starting to form.

The core goal right now is to determine how Neos’ concepts (e.g. different types of colliders, like Static, Triggers, Active, Haptic Triggers and Samplers, Character Colliders and others) map to the BEPUv2 physics engine and what’s the most efficient approach for them.



Determining where exactly physics fits into the pipeline has been also an important part of the design process, since our goal is to solve some long-standing problems, notably collider interactions lagging by a frame when inside a moving vehicle or other moving structure.

This has been pretty much narrowed down to the physics poses being stale when queried due to being updated before beginning of the frame from the network and the restructuring will help there. We’re still considering how it’ll fit in with other update phases and some future optimizations and changes, avoiding some duplicate work.

One of the key things that we’re focusing on with this implementation is designing it so the engine gets utilized more efficiently too. There's one major problem right now in Neos, where even static colliders and triggers currently eat a lot of performance due to constant broadphase updates.

With BEPUv2 Neos integration will make sure to properly manage the kinematics and make them sleep when they're not being actively changed, which should improve performance quite a bit, especially on maps with lots of colliders.

It's essentially one of the issues that the huge Minecraft world imports ran into - tons of triggers for the culling actually eat lots of performance because of constant updates in the physics engine. With this redesigned system that will be avoided.

There’s still a bit to do before we get the first functional version and then aim for feature parity with the current version of Neos, reimplementing all the existing functionality. Stay tuned for updates, as we’ll likely have danger nightly builds once we have things working!

There will also be some more types for colliders. E.g. Static Triggers and Static Haptic Triggers and some more, for ones that you're certain won't be moving in the scene, which will allow them to be even more optimized (they won't have to be managed to wake up or go to sleep at all).

Anyway, that's all for this week! And as usual big thanks for everyone for supporting Neos and being part of this platform, without everyone's help we couldn't be working hard on it every day! See you next week!