1. Neos VR
  2. News

Neos VR News

Two Factor Authentication support, Upcoming branding refresh

Hello everyone and welcome to another of our weekly updates!

We have some exciting news for you. Based on increasing community requests, feedback and votes, we have implemented two factor authentication for the accounts! You can now secure your account with Time-Based One Time Password (TOTP), using an app like Authy or Google Authenticator.

The setup is quite simple and can be done by scanning a QR code given to you in Neos. By default any credit transactions (NCR and KFC) will always require a code to process. You can optionally enable the protection for login into your account as well, once we update account.neos.com website it'll be made default for everyone as well.

We have also begin overhaul of Neos' existing branding, to bring it up to modern standards and design guidelines. In the upcoming weeks, we'll start replacing our logos, banners and other materials with brand new designs and releasing official branding guidelines. If you'd like a bit of a sneak peek, check out some of the materials below!



[h2]Upcoming Branding Refresh[/h2]
The Neos Metaverse is getting a fresh coat of paint!

[previewyoutube][/previewyoutube]

We are excited to announce that Neos has begun an overhaul of its existing branding! These changes include but are not limited to, a redesign of the official logo, the introduction of an official color palette, and the introduction of the official Neos Metaverse typeface, “Stephenson”.

In the weeks to come, we will be releasing an official set of branding guidelines and updating the brand identity across the board. This includes updates to the design of Mentor and Moderator badge and onward to the existing icons, along with new background artworks for the Discord, Steam page, and website. These changes will open up a new world of opportunity when it comes to ways Neos is able to promote itself and be identifiable in the wild. There are many plans in the works…



For specific thoughts and concerns feel free to contact or tag Chroma on our Discord.

It's a new day in the metaverse!

[h2]Two Factor Authentication[/h2]
Implementing two factor authentication has been something we heard our community asking more and more frequently as time went on, so we decided to prioritize it, to provide increased account security for everyone.

As of the latest build, Neos now offers the Time-Based One Time Password (TOTP) 2FA authentication which anyone can setup on their account. In order to use this method, you’ll typically need an authenticator app on your phone, such as Authy or Google Authenticator.

[previewyoutube][/previewyoutube]
2FA account setup. The code shown in the video is for demonstration purposes only and has been scrapped. NEVER show your QR code and recovery codes to anyone.

In Neos on the tools panel (the same one that contains New World, Avatar Creator and NCR Withdrawal & Deposit options), you can find a new “Setup 2FA” option. Clicking this will open up a wizard that will walk you through the setup.

You can do so by scanning a QR code with your phone or manually typing in the security code (the latter is not recommended). Once you have it scanned, you will be given a set of 8 recovery codes.

Those codes can be used in place of the 6-digit code in case you lose access to your phone. If you do need to use them, we recommend that you deactivate 2FA (using the same button as to activate) on your account immediately and reactivate to generate a fresh secret and set of recovery codes.

Keep in mind that each recovery code is 1-time use only, meaning you will run out of them quickly and get permanently locked out of your account if you lose both. We recommend storing them at a secure location.

[h3]Protecting NCR[/h3]
By default, once 2FA is setup, you will be asked for a 2FA code for every NCR (and KFC, since they use the same underlying system) transaction. This provides a great degree of security, preventing anyone from sending or withdrawing credits from your Neos account when your computer and/or password gets compromised.

https://www.youtube.com/watch?v=Db10T1CXpHA

[h3]Protecting Account Login[/h3]
At the moment logging into your account isn’t protected by 2FA by default. You can enable this by sending /enableLogin2FA command to the Neos account in your Contacts, which will require each fresh login to input the 2FA code.

https://www.youtube.com/watch?v=Jw2vGjI-10k

One caveat is that our account.neos.com website hasn’t been updated to support 2FA yet, so when the login protection is activated you won’t be able to login there. We are working on updating the website as soon as possible, but this solution should provide a good workaround.

If you need to login to the website, you can also use the /webLogin command from Neos or the AdminX tool bundled with Neos. It will suppress the 2FA login for 3 minutes, giving you enough time to login and automatically re-enabling it afterwards.

If you use the "Remember Me" option you will not need to input 2FA code every time you start Neos. This trades some security for more convenience. The authentication codes are refreshed every time you login, so generally shouldn't pose a big risk, but if you want even higher security you can just do a fresh login every time.

[h2]QR Code Procedural Texture[/h2]
One of our core design philosophies is to implement any functionality in the form of general building blocks that can be used for other purposes as well by everyone in Neos. One of such blocks is a brand new procedural texture - StringQRCodeTexture.

[previewyoutube][/previewyoutube]

This texture lets you specify arbitrary text string as payload (as long as it fits into the QR code), level of error correction and two colors for the QR code. It will update dynamically in real time, so you can build whatever logic you like to encode any text you like.

While it’s a bit more niche, we hope that some of you will find it useful and fun to play with!

[h2]New LogiX nodes for detecting open dash and quick time formatting[/h2]
If you’d like to add a cool visual to your avatar whenever you have your Neos, SteamVR or Oculus dash open, now you can! With two new LogiX nodes you can detect whether the Neos’ own dash is open or the external platform one (e.g. SteamVR or Oculus) is.

We also added a set of three nodes to make formatting DateTime more convenient, making it easy to show just the time or date part with configurable style. Similarly there’s a node to quickly format a TimeSpan structure.

[h2]Desktop can now send items to contacts, export and set profile picture[/h2]
Thanks to some recent changes, we added a behavior where holding an item in the desktop mode with the Right Mouse button and opening the dash with Esc will keep the item held in hand. This implicitly enabled some previous VR-only interactions, such as sending items to Contacts, exporting through File Browser or setting a Profile picture to work.

We still plan to redesign those UI’s to make the interactions more intuitive and idiomatic, but it should help make those old ones usable in the meanwhile! We also disabled physical grabbing in desktop, fixing cases where the avatar would grab a nearby item with their hand due to proximity, rather than the item the mouse cursor was pointing at.

[h2]What’s next[/h2]
Apart from the new features, tweaks and fixes, we are continuing with several other tasks, notably the BEPUv2 upgrade. We have now finished implementing all collider types and using the asset variant system to generate and cache the acceleration data for Mesh Colliders and Convex Hulls.

This change will significantly speed up loading of worlds and reduce CPU load - a moderately heavy mesh collider would take about 680 ms to generate, but only 48 ms to load from a pre-generated version.

We also implemented tracking of transform hierarchy changes, updating the collider transform in the physics engine in all cases as well as responding to changes in scale. The system that tracks those changes has been extended to allow separate tracking of position/rotation changes and scale changes, so parts that are only interested in scale changes do not have to update when only the position/rotation changes, resulting in better efficiency and less wasted cycles.

[previewyoutube][/previewyoutube]

There is still much to do, you can check the tasks on our Physics roadmap on GitHub. We also recommend checking other roadmaps, the #devlog channel on our official Discord and release notes for a full list of all the additions, tweaks and bugfixes.

And as usual, big thanks to you, our supporters! You are what makes all of this possible and keep us moving forward with your feedback, support and creativity every day. We’ll see you next week!

2021.7.21.1383 - 2FA deactivation mechanism, crash bugfix, SignalR reconnect fix

Another smaller patch, adding ability to disable 2FA on your account once setup. This can be crucial if you lose your phone and need to setup a new one (you use the recovery codes in this case) or your phone/code becomes compromised and you need to regenerate a new secret.

Also new command that makes it easier to login into the account.neos.com with Login 2FA protection enabled before the website is updated, just send /weblogin to the Neos bot and login to the website in the next 3 minutes!

Some small fixes as well, one causing a crash and another for the SignalR not reconnecting in some cases.

Compatible with previous build.

[h2]New Features:[/h2]
- Added mechanism to disable 2FA on the account. This can be used to run the 2FA setup again, generating a fresh secret and set of recovery codes
-- To disable, open the "Setup 2FA" dialog again after you have set it up on your account
-- Deactivating will require either a 2FA 6-digit code or a recovery code
-- If you lose your phone, you can use the recovery codes to setup a new one. We recommend disabling and re-enabling IMMEDIATELLY, as each recovery code is 1-use and you will run out of them quickly
- Added /weblogin command, which temporarily (3 minutes) supresses account login 2FA requirement
-- This can be used just before you want to login to account.neos.com, e.g. to edit Wiki
Tweaks:
- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged Japanase locale update by @Aesc

[h2]Security:[/h2]
- Fixed PlayOneShotAndWait causing stack overflow and crash Neos when playing the same clip after it has finished playing and the clip hasn't been loaded yet (@epicEaston197)

[h2]Bugfixes:[/h2]
- Added custom reconnection logic to SignalR which will reconnect to the service in case the built-in reconnection logic fails
-- This should fix cases of messages to being sent/received in case of connection interruptions (reported by @Banane9, @AshtonSparx, @Shadow Panther [RU/EN, UTC+3], @brodokk and @Froppy)

2021.7.21.402 - Fix sending large items, desktop can now send items and more

Just an extra small patch with some improvements for desktop (no more accidental grab sphere grabbing and you can now send items to Contacts and Export stuff, since it was easy enough to do thanks to recent addition) and important bugfix for large items not being able to be sent. Also the Discord bot now links properly to the actual GitHub webpage instead of the API JSON! :smile:

Compatible with previous build.

[h2]Tweaks:[/h2]
- The Neos Discord bot now links to the HTML page for the #🐱github-feed channel for pull requests instead of a JSON (fixed by @ProbablePrime | Docs, reported by @Alex from Alaska)
- When opening dash in desktop mode, the last grab input is now preserved
-- This allow sending items in Desktop, Exporting through file browser, setting profile picture and doing other interactions that require holding object in world (reported by @kazu0617 Neos:kazu, @Gawdl3y, @Psychpsyo and @Alex the фурри авали🐦)
- Physical hand grabbing (with grab spheres) is now disabled in Desktop mode (suggested by @AshtonSparx, @Turk | Mentor Manager, @H3BO3 and @Toxic_Cookie | NTC CEO)

- Merged Korean locale additions by @MirPASEC
- Merged Japanese locale additions by @Aesc

[h2]Bugfixes:[/h2]
- Fixed complex objects failing to send due to entire manifest being included in the message and exceeding SignalR limit (based on report by @Enverex and @kazu0617 Neos:kazu)

2021.7.21.127 - 2FA support with TOTP, dash opened LogiX & quick format nodes...

Hello everyone, sorry it took so long to get a new build out, things have been a bit rough lately. However there are some nice goodies in this one, we finally have 2FA support!

You can setup TOTP two factor authentication with apps like Authy or Google Authenticator - scan a QR code that Neos generates for you and then enter 6-digit code to confirm certain actions. By default any KFC/NCR transfers always need a code. You can optionally enable it for login as well, but currently this breaks login on account.neos.com (e.g. used for Wiki login).

We'll expand on this in the future and cover more actions and make it configurable too, so you can decide how much of a tradeoff between security and convenience you want for your account, but this should be a good start.

One of the building blocks for 2FA is also completely general and you can use it for anything you like - we now have QR code procedural texture! You can generate QR code for any text string (within a size limit)!

There are a bunch of other goodies too, e.g. you can now detect when Neos dash and/or SteamVR/Oculus dash are open with LogiX! There are some handy nodes for DateTime formatting too. Some other tweaks and bugfixes too.

[h2]New Features:[/h2]
- Implemented Two Factor Authentication (2FA) using the TOTP - Time-Based One Time Password (based on combination of GitHub voting, Patreon priority voting, and general community feedback, originally requested by @0utsider | Programmer, @Karel | CEO, @Alex from Alaska, @ProbablePrime | Docs, @Toxic_Cookie | NTC CEO, @3x1t_5tyl3, @Raith (CytraX) | Programmer, @Jack, @chemicalcrux and others)
-- You can enable 2FA on your dash from the tools facet, which has new "Setup 2FA" option
-- To setup you'll need a TOTP authenticator app, like Authy or Google authenticator
-- Once enabled, every credit transaction (NCR, KFC) will require a 2FA code to complete
-- Optionally you can enable 2FA requirement for login by sending /enableLogin2FA command to the Neos account
--- IMPORTANT: Currently this breaks login at the account.neos.com website, as it's not been updated with 2FA support yet
--- Using "Remember Me" will not require 2FA code every time you start Neos. If you want even more increased security, do not check this option and manually login every time. However this shouldn't pose a significant risk, as the "remember me" token is invalidated every time you login
-- You can disable 2FA requirement for login by sending /disableLogin2FA command
-- Take care to protect your secret code and recovery codes. If you lose them, you'll PERMANENTLY lose access to your account
-- AdminX and Headless support 2FA login as well
--- Note that with Headless you cannot use auto-login in the configuration file with 2FA, only the dynamic "login" command will work
- Added StringQRCodeTexture procedural texture, that generates QR code for a string payload
-- ECC Level and colors are configurable
-- QR code size is automatically chosen based on payload length. If the payload is too large, error texture will be generated.
- focus headless command now also accepts session ID (requested by @Glitch)
- Added logsFolder setting to the headless configuration file, which allows overriding where the logs are stored (requested by @Glitch)

- Added quick format LogiX nodes for DateTime (implemented by @ProbablePrime | Docs)
-- Format Date (shows just the date)
-- Format Time (shows just the time, with optional 24h clock and milliseconds)
-- Format TimeSpan (with optional seconds and milliseconds display)

- Added "Export Screenshot" option for screenshots that were already saved (based on feedback by @FreeSpirit)
-- This allows you to re-export screenshots or export them on another machine
-- Note that this doesn't check if it's already been exported on given machine, so you can end up exporting multiple copies

- Added IsNeosDashOpened LogiX node (under Users) which indicates whether given user has their Neos dash opened
- Added IsPlatformDashOpened LogiX node (under Users) which indicates whether given user has platform-specific dash opened (SteamVR dash or Oculus) (based on request by @Shifty | Quality Control Lead, GrayBoltWolf)
-- Note that Oculus dash is untested, if you run into issues with it let me know!

[h2]Tweaks:[/h2]
- Removed VBLFC badge from the session dialog
- Updated various cloud libraries to latest versions
- Images imported as Neos Photo are now implicitly treated as a captured screenshot - saved to the Steam Screenshots, Pictures in Documents and to Inventory (when enabled) (based on feedback by @FreeSpirit)
- Save As Screenshot nd Export Screenshot context menu options now close the context menu when activated, to help confirm that they went through
- Enabled detailed SignalR errors to help diagnose some issues (e.g. sending large objects not going through as reported by @Enverex and @kazu0617 Neos:kazu)

- Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]

[h2]Security:[/h2]
- Removed legacy Registration Form (reported by @badhaloninja)
- Improved security of authentication tokens by hashing them at rest

[h2]Bugfixes:[/h2]
- Fixed credit transfer messages showing red as failed to send (reported by @Earthmark and @Shadow Panther [RU/EN, UTC+3])
- Headless account is no longer counted against the max user limit (reported by @Shadow Panther [RU/EN, UTC+3], @Kulza and @Fuzzy)
-- This fixes confusion where the world seems to have 1 free spot, but will fail to join due to that spot being occupied by the headless host account
- Fixed not being able to assign null as valid cloud variable value of type Uri
-- This fixes not being able to unfavorite default avatar (and other things) (reported by @Shifty | Quality Control Lead, @Shadow Panther [RU/EN, UTC+3] and @epicEaston197)

VBLFC event over, more cloud optimizations, new hands, Neos Festa 3 coming soon

Hello everyone and welcome to another weekly update!

This one is going to be relatively short, as we were busy with the VBLFC over past week, the first official online convention held on our platform. It has broken the record number of concurrent users, reaching 432 peak on Steam.

We also look at some of the optimizations and effects on the cloud infrastructure with the sudden surge in users and how they helped to keep the cloud stable and make it more efficient in long term.

The creator festival Neos Festa is also coming next month for its third installment, held by the Japanese team. If you'd like to have an exhibit, you can find more information at festa.neos.com!



[h2]VBLFC[/h2]
During the last Friday through Sunday, Neos saw its official online convention, the Virtual Biggest Little Furry Convention. This event brought hundreds of new users and broke our all time record for number of concurrent users! We reached 432 peak concurrent users on Steam, with our metrics going slightly above 500 with all accounts considered (including headless).



We’d like to extend a huge thanks to the organizers for choosing Neos, building beautiful worlds and a number of interacted gadgets and accessories for the attendants of the event and bringing a number of guests to serve as entertainment for the program. So again, big thanks to everyone for their hard work making this event happen and thanks for everyone participating!



VBLFC plans to reopen the worlds during the physical convention in October, so if you missed them, you’ll be able to revisit them again! The VBLFC suite world is open to the public already and we’ve already seen many people decorate it and make their own versions of it, so feel free if you haven’t!





[previewyoutube][/previewyoutube]

[h2]Analyzing Cloud Usage & Further Optimizations[/h2]
As many people started joining during the VBLFC Opening Ceremony, we started noticing the cloud response times sharply rising up due to the sudden increase of users. This has resulted in noticeable slowness of much of the cloud functionality.

To compensate, we started scaling up (and out) the infrastructure beyond our default limits, which brought it down to usable levels, but still far from ideal. Based on the live metrics, we began optimizing the biggest culprits that resulted in slow responses and releasing them to the cloud as the event was ongoing.

Overall response time during the first night. The sharp increase is when people join in, the decrease is when the scaling up kicks in. Afterwards the drops and smoothing out are due to optimizations being deployed.

The first bits addressed some quick low hanging fruit, like unnecessary database queries and adding some bits of extra caching. This has smoothed out some of the response times, but still wasn’t sufficient to make it snappy.

Following that, we implemented a quick optimization for the user status update system - the one responsible for updating status of your contacts - whether they’re online, which world they’re in and so on. This system was the second biggest contributor in the cloud load after the messaging system, so it was a prime target for the optimization.

Once this update was pushed out, to our surprise the response times have dropped more than we expected them to, under 50 ms on average, despite about 500 people still being on. This resulted in better response times than before the sudden increase in active users, at the cost of some precision - status of new contacts might take a few minutes to show up.

Impact of the status system optimization

Thanks to this optimization the remainder of the convention was pretty smooth and without any cloud slowness or interruptions. Those optimizations still help even after the event has finished. Based on their effectiveness, we’ll be moving the status updates to SignalR next, similarly to the messaging system, which will make it significantly more responsive and improve the cloud scaling even further.

It is always a bit scary getting a sharp increase in users, as it doesn’t give much room for the infrastructure to adjust, but this event has given us a wealth of information on how it behaves with a quickly rising user base and which parts become bottlenecks and need to be redesigned.

With this, we’ll be better prepared for other big events in the future and just general growth of the Neos community, at least from the cloud perspective.

[h2]New Neos Hands[/h2]
Next time you start Neos, you'll see the update I just pushed for the new default avatar. These new hands were designed to match the headset, and the headset itself was updated with a new Neos logo on the back.

Every time you apply the default avatar, you are normally assigned a random color. However, now you can choose to assign yourself a persistent color that can be used beyond your default avatar using the cloud variable G-Neos.CustomUserColor! Please note that this cloud variable's name and function is subject to change.

The whisper bubble's visuals have also been re-imagined as a ring, to be more light and less isolating.



[h2]Community Highlights[/h2]
Hello everyone, friendly neighborhood Turk here! I hope your week has been wonderful! It’s been jam packed these past 2 weeks mixed with all the stuff that’s been going on! So I hope you have been having fun with all the things going on! This month has all kinds of community events and moments going on so here’s some of them for you to see!

[h3]Firr’s New Homeworld[/h3]
VBLFC has come and gone in the community, and there were some fun times! But for one last hurrah it seems like Firr needs a new homeworld! So everyone quite literally had come into his world and trashed his room. Whether he makes this his homeworld is a thing to be seen, but boy is this headless session/world a treat. There is ALOT of memes.



[h3]Neos Festa 3[/h3]
Neos Festa 3 is soon on the way! Neos Festa is a creator showcase event, where folks can submit content and applications to showcase their works in Neos. Neos Festa has been quite the staple in our community bringing many games, toys, and avatars to the community enriching the community in ways we can’t expect. So if you want people to check our work, and see what people think feel free to submit! Find out more details on the Discord, or in the submission world. You can also find more stuff at the website festa.neos.com.

Thank you to everyone who’s collaborating to make this event possible!



[h2]What's next[/h2]
After the event, we're continuing main focus on BEPUv2 integration. We have already finalized all collider types, getting mesh colliders and convex hulls to also work with the asset variant system, precomputing and caching the data, instead of generating it on the fly every time you load into the world.

There's still quite more to do. We'll also be interweaving some more tasks and updates in between. You can always find the latest progress in the official Discord in the #devlog channel or check out the Roadmaps on GitHub.

And as always, huge thanks for everyone's support! Thanks to your passion and creativity, this place keeps growing and becoming better every day! See you next week!