1. Neos VR
  2. News

Neos VR News

2020.9.13.591 - Added Neos Localization Support, Czech translation, more to come

Neos is going multilingual! Introducing a new localization system, which currently allows all core UI to be translated into different languages. Currently it's available only in the original English version (but it has a bunch of improvements and better formatting in places as a result) and new Czech version (translated by me, might be a bit odd since I was doing it at the same time as converting all the UI, contributions to it are welcome).

If you'd like to help translate Neos into another language, you can do so through a public repository here: https://github.com/Frooxius/NeosLocale Just clone it, make your contributions and make a Pull Request so I can merge your contributions. Detailed instructions are coming within a day, you can check the en.json and cs.json files.

To quickly test your translations, simply copy them over to "Locale" subfolder next to Neos.exe, it will load them up. Make sure to use the correct language code (it uses the IETF language tag, use only the primary language tag if possible). The messages use the Unicode ICU MessageFormat syntax, details here: https://unicode-org.github.io/icu/userguide/format_parse/messages/

This build also contains some more tweaks and bugfixes, but most of the work was focused on converting into to multilingual support. There's still a few things to do, but vast majority should be translatable now! I might've also missed a few places and they might now display incorrect text as I was doing the bulk of it, please let me know.

[h2]New Features:[/h2]
- Implemented a localization/translation system for Neos, allowing the UI to be translated into any language (originally requested by @AlienInArea51 (MR-Alex) and many others)
-- You can dynamically change Neos' language if you go to Settings and type language code to "Override Locale" - e.g. en, cs or ja
-- This is done through new type of asset "LocaleResource" which contains localized strings
-- If given translation string isn't available in given locale, it will fall back to more general locale first, then to English (e.g. en-gb -> en or cs -> en)
-- New component LocaleStringDriver has been added, which will drive a string field with a localized string from the asset and optional arguments
-- Integrated the ICU MessageFormat syntax (https://unicode-org.github.io/icu/userguide/format_parse/messages/) for translation strings, allowing for variable replacement, selection, plural and number formatters to support wide variety of languages and high level of flexibility
-- Converted vast majority of Neos' UI to be localizable - dash, various dialogs, context menus, loading messages, tools, Create New, importer dialogs and many more
-- Inspector and Node names are not translatable yet, but are coming soon
-- English version of UI now has correct pluralization in places (e.g. "1 item" instead of "1 items") and various places now use % formatting instead of raw number (e.g. 42% instead of 0.42)
-- Added internal "LocaleString" type, which allows passing both non-localized and localized string data and will automatically propagate through many Neos' UI API's, automatically setting up components with LocaleStringDriver where possible (this allows the language to dynamically change without having to regenerate the UI)
-- Currently this system is only usable for core Neos UI, later on this system will be extended so you can import and reference your own locale resources to allow your items, worlds and tools be translatable as well
-- You can find the LocaleResources files in the "Locale" subfolder with your Neos installation
-- Added Czech translation of Neos (other languages depend on community contributions, will add them as they come)

- Added ConnectRetryInterval to WebsocketClient and connection retry logic
-- If the client gets disconnected or fails to connect, it will retry connection attempts at the specified interval
-- Interval is in seconds. If you want to disable the behavior, put Infinity as the value

[h2]Tweaks:[/h2]
- Changed linking mechanism for Facet presets for SearchBar and PagingControl - they are now setup themselves with general dynamic variable names, rather then being setup externally
- "Friends" tab has been renamed to "Contacts" (based on suggestions from @Shifty | Quality Control Lead, @Rue Shejn | Artist 3D and @Veer | Chief Moderation Officer on behalf of others as well)
- Cloud API now has extra validation for NCR withdrawal requests, rejecting any requests that don't contain a valid target address
- Set minimum NCR withdrawal to 50, to avoid transactions costs being higher than the transfered amount (requested by @Karel | CEO)
- Upgraded to Unity 2019.4.10f1 (from 2019.4.9f1)

[h2]Bugfixes:[/h2]
- Added SessionID check when establishing connection to a session, to prevent confusion when user joins an old invite/URL with Steam Networking Sockets (or direct IP URL) that is running a different publicly accessible session on the same Steam channel or IP (based on problem report by @Rue Shejn | Artist 3D and @Theo | Video Production)
- Fixed FilterInvalid node for quaternions defaulting the Fallback to invalid quaternion (reported by @H3BO3)
- Fixed detection when in-world laser is severely misalisnged with the userspace one, preventing the userspace laser from overriding the position and direction and the private UI to be interacted with (based on report by @SmolCookie and @Shifty | Quality Control Lead)

2020.9.9.214 - Many UI/UX Tweaks, Component Impulses, RawDataTooltip bendy laser

A whole bunch of Tweaks! Many tweaks were made to the UI and its defaults to improve general user experience. Please note that some old mechanisms were disabled by default (the old World Switcher and Double Grip to Equip), but you can re-enable them in the settings if you still want to use them.

The dash/world-switcher open/close mechanism has been reworked for Vive and Windows MR to make it easier and more intuitive to use. There are some additions and tweaks to the new World UI as well.

Also ability to send impulses to components has been added! This only features a few components so far, but more will be added over time (you can request certain actions). You can now get the bendy laser hits with RawDataTooltip too!

[h2]New Features:[/h2]
- Added Sort Direction and Parameter (First Publish Time, Last Update Time and Creation Time) to the Custom filtering settings (requested by multiple users)
- Added GetRawDataTooltipHit node (under Tools), which will get the current RawDataTooltip hit (requested by @Alex from Alaska)
-- This uses the bendy laser hit if available
-- It must be evaluated on the user currently using the tooltip, it won't give a correct result for other users
- Added "Index of First Match" node (under Utility), which returns the index of the first matching input (or -1 if no match is found) (based on request by @Alex from Alaska and @Aetoriz)
- Added "String Join" node, which joins number of strings using a custom separator (based on discussion with @ontodistro)
- Added ability for component methods to function as impulse targets, allowing them to be easily triggered through LogiX
-- Exposed methods will show as impulse targets in the LogiX interface
-- Following methods were exposed (if you'd like more to be exposed, please make a request, I only went through a few off the top of my head):
--- SetFromLocalBounds and SetFromGlobalBounds on BoxCollider and SphereCollider (requested by @ChrisWarner103 (DelVR))
--- Trigger and Capture on InteractiveCamera (Trigger respects the timer setting if enabled, Capture runs immediatelly)
--- Play on RandomAudioClipPlayer
--- NextPage and PreviousPage on PagingControl

[h2]Tweaks:[/h2]
- Added "Published Worlds" world category, which shows all the published worlds in the order of publishing (suggested by @Nexulan | Community Manager)
- "Active Sessions" world category now filters out empty sessions (suggested by @Shifty | Quality Control Lead)
- Increased (2x) the movement threshold for UI interaction passing upwards to reduce number of times where clicking an item ends up causing a scroll instead (suggested by @H3BO3 and @Shifty | Quality Control Lead)
- Reworked mechanism how is the dash / world switcher opened with Vive / Windows MR controllers (based on feedback by various users through @Shifty | Quality Control Lead)
-- The dash/world switcher is now opened immediatelly once the circle fills, rather than waiting for the user to release the button
-- To enable the UI edit mode, hold the Menu button on both controllers simultaneously, so both circles will fill in at the same
time (it doesn't have to be 100 % exact)
- Slowed down the userspace toggle charge on Vive & Windows MR controllers to prevent accidentally opening the dash when trying to open the context menu (suggested by @Shifty | Quality Control Lead)
- The molecule world switcher is now disabled by default to avoid confusing new users.
-- You can re-enable it in the settings on the left side using "Enable Legacy World Switcher"
-- When it's disabled, either controller button will open the dash
-- Once facets can be placed on avatar, it will be removed permanently
- Double-Grip equipping is now disabled by default to improve general user experience and focus on the new equipping methods instead
-- You can re-enable it in the settings on the left side using "Enable Legacy Double Grip Equip"
-- This gesture is not planned to be removed and will stay in some form (might potentially be reworked into a bindable gesture)
- Mesh baking will now preserve the SimpleAvatarProtection component on the baked mesh (suggested by @Aetoriz through @Cid)
-- Only the user owning the mesh can perform the bake, it will fail if another user tries to run the baking process
- Improved type castability detection, fixing cases where certain types would not be detected as castable to others (e.g. int3 to float3, reported by @H3BO3)
- Lowered the required pinch strength and confidence for finger-tracking grabbing to improve grabbing support with the Vive SDK (based on feedback by @Cyro)
- Upgraded youtube-dl to 2020.09.06 (from 2020.07.28) (based on report by @MADDMAXKZ)
- Added cleanup of Slot moved events for ConnectionWires, fixing potential resource leaks when LogiX is packed and unpacked
- LogiX interface link wires (going into the represented slot/component) no longer have colliders
- Changed minimum double click interval to 0.25 from 0.1, to prevent accidentally setting it too low (based on issue by @Rue Shejn | Artist 3D)

[h2]Bugfixes:[/h2]
- Fixed WorldListManager not updating when the sorting properties are changed
- Fixed RawGraphic not respecting the FillRect property when determining if a point is inside of the graphic or not
-- This fixes the world preview user/description box blocking the 360 preview panning when the box is hidden (reported by @H3BO3)
- Recompiled Linux binary, which should fix startup issues (reported by @jeana, @Enverex and @Shifty | Quality Control Lead)

Vive/Index Finger Tracking support, WebSockets, Twitch Channel Points & Rewards

Hello and welcome back to the Neos Weekly Update!

The new World UI has also received some more tweaks and updates to polish it up a bit more, but most of this week was devoted to a couple of new features: Websockets, Vive/Index Fingertracking and Twitch Channel Points support.



[h2]Vive Finger Tracking[/h2]
We’ve recently implemented Vive’s finger tracking system into Neos. In order for this to work, you would need to make sure your Vive/Index has the front facing cameras turned on in your steam settings, and you’ll need decent lighting in your room. After that, simply enable vive finger tracking in your Neos settings, and hold your (empty) hands in front of your face!

[previewyoutube][/previewyoutube]

Right now the Vive SDK’s tracking isn’t as high quality as say, Leap Motion, but as Vive releases newer versions of the software, we’ll implement them so we could see some improvements in the future. The tracking allows for pinch-grabbing of objects within Neos as well as finger splay, so give it a try!

Demonstration by June on Twitter

[h2]Twitch Channel Points support and other improvements[/h2]
We have updated the Twitch API library to the latest version from source, merging our performance improvements and other tweaks. Thanks to the new version we were able to fully integrate the channel points system with Neos.

Not only will the in-game Twitch chat dialog show users claiming rewards with the channel points, but you can receive it as an event with LogiX as well, triggering arbitrary actions in the world or on your avatar in response.

The integration has received various other improvements as well, like support for highlighted messages, removing messages in the in-game chat dialog when they’re removed by moderator and fixing various issues, like incorrect formatting or broken follower messages and events.

It’s always great to see our streamers enhance their experiences with the interactivity and we hope the rewards support will enable new cool possibilities.



[h2]Websocket Support for LogiX[/h2]
Based on many requests from the community and researcher group in Neos, we have finally added WebSocket support, extending the networking capabilities of Neos and enabling easier integration with custom services and local apps.

Unlike the HTTP GET/POST string nodes which only allow polling, WebSocket connection is bidirectional, allowing to both send and receive messages from the server and is significantly more efficient. This way you can send messages to Neos from your own apps and servers.

WebSocket connections follow the same security model as the HTTP nodes, requiring the user to manually approve each host that you want to connect to. You can use the same nodes for requesting host approval.



Currently only text messages are supported, with raw binary messages requiring the collections support to iterate over raw bytes. Once this is implemented, you’ll be able to send those messages as well.

If you’d like to get started with WebSockets, we have published a world called “WebSocket Example”, which uses a public echo service to test the functionality, which simply sends back the same text message you send to the server.

We can’t wait to see what kind of applications you’ll build with WebSockets! If you run into any issues or concerns, you can post them on our official GitHub or Discord.

[h2]Community Highlights[/h2]
[h3]Saturday Night DJ Party by Ark Gullwing[/h3]
Ark hosted a lively party last Saturday evening with a live DJ in QueenHidi’s dance world! He’s hoping to make this a weekly event so check the Neos discord for more information!





[h3]Hidden Grotto by Sykes[/h3]
A lovely little world for hanging out with friends! The atmosphere is calm and easy on the eyes, so this world is great for watching movies! Nice job, Sykes!



[h3]The Grid by BIOHAZRED[/h3]
Check out this very shiny futuristic world! With mirrored surfaces and shining buildings piercing the sky, this world is great for taking pictures and roleplay!



[h2]What’s Next?[/h2]
With the World UI now working and tweaked and some of the smaller requests out of the way, we’re considering a few smaller, but significant additions. One of them will be the ability to translate the UI into different languages, which will improve accessibility and pave the way for a global translation system in Neos later in the future. We have been looking into the Unicode/ICU libraries and standards and plan to incorporate those.

Another of the additions would be introducing an in-game workshop, utilizing the same subsystems for submitting worlds, because they were designed to handle any types of objects, so adapting them wouldn’t take too much time, while providing a big benefit to the community, making it easier to share, update and find items, tools, avatars and other objects.

Following those additions, we are considering switching the major focus to major optimizations and optimization features, to improve performance with multiple people in the world and make it easier to build more complex environments.

Let us know what you think! We’re always looking for the best direction that will make the biggest impact on both new and existing users and your feedback plays a big role in this decision. Without your support we wouldn’t be able to keep devoting our time to building out Neos and improving it every day.

2020.9.6.1418 - Hotfix for local assets not getting synced into the cloud

Pushing out an important hotfix for local assets (textures, meshes, audio & video) not getting uploaded to the cloud. I recommend updating ASAP, this build is compatible with current one. When you launch, all changed items and worlds since the last build will be resynced, uploading the missing assets from your local database.

[h2]Tweaks:[/h2]
- Potentially fixed missing Anorak badge after recent Cloud API sanitization (reported by @Cyro, @Nexulan | Community Manager and @Veer | Chief Moderation Officer, please let me know if it's still an issue, it's hard to test in isolation)
- Improved server response time detection to prevent cases of random "Slow" messages when it's not actually slow

[h2]Bugfixes:[/h2]
- Fixed local:// assets in record manifest not being uploaded to the cloud and replaced with "neosdb" URL's (based on report by @KierDran and @Shifty | Quality Control Lead)
-- When you launch this build of Neos for the first time, it will force resync for all items/worlds you changed in last few days (since the release of 2020.9.5.1190), making the local assets be uploaded into the cloud
-- The main asset (e.g. world or item description) is unaffected, only associated texture, mesh, audio and video assets would be missing

2020.9.5.1190 - HTC Vive Finger Tracking support (Vive & Index headsets)

The Vive finger tracking support is here! If you have Vive or Index headset, you can now use the headset's camera for finger tracking. It's off by default, so make sure to enable it in the settings.

Sorry for otherwise smaller build, some things took longer than expected to deal with. But there are some more improvements, like ability to set someone's voice to 200%, security/privacy improvements for the Cloud API and bugfixes!

[h2]New Features:[/h2]
- Added support for HTC Vive Hand Tracking (version 0.9.3), which provides finger tracking with the cameras on various Vive headsets as well as Valve Index headsets (requested by @Groxxy, @AlienInArea51 (MR-Alex), @Alex from Alaska, @Cyro, @Hayden (PolyLogiX - ZyroDesign) and others)
-- Currently this is off by default, to enable it go to Settings and check "Vive Hand Tracking Enabled" (note that enabling it for the first time might produce a hitch, this is coming from the SDK initializing itself and can't be avoided)
-- The SDK uses GPU to analyze the images from cameras so there might be a performance impact (this is why it's off by default). Please give it a test and see!
-- The finger tracking is used only when your hand is away from the controllers. Otherwise the controllers are used as source of finger poses.
- Added "MaxSize" to TextureSizeDriver, which allows clamping the maximum size of the driven value (aspect ratio is preserved) (requested by @H3BO3)
- Added ability to set user's local volume to 200%, amplifying their voice locally (requested by @Kal and others)

[h2]Tweaks:[/h2]
- Moved the Context Menu to later render queue for the user owning it, making sure it renders over transparent items in the world (suggested by @Shifty | Quality Control Lead, potentially fixing some cases of invisible menu reported by @Groxxy, @Toxic_Cookie and @sirkitree)
- Sanitized Patreon and ban data on the public cloud API to reduce how much information is given out (based on feedback by @Alex from Alaska and @H3BO3)
- Component Clone Tip now creates undo entries (suggested by @Alex from Alaska)
- Component Clone Tip now uses the bendy laser rather than direct raycast
- Increased line spacing on the user profile facet (suggested by @Zyzyl)
- Changed combination to close worlds in screen mode to Shift+Esc, rather than just Esc to prevent accidental closes (based on feedback by @Earthmark and @Electronus)
- Changed default noise gate to 0.025 (suggested by @Nexulan | Community Manager)
- Added hardware diagnostic information to the log
- Added diagnostic information for errors when decoding cloud variables
- Some more tweaks and bugfixes for the Metamovie

[h2]Bugfixes:[/h2]
- Fixed malformed neosdb:// URL's causing errors when saving world, updating assets and synchronizing items (reported by @Alex from Alaska)
- Fixed Twitch highlighted messages not showing emotes (reported by @Shifty | Quality Control Lead)
- Fixed broken gifted subscription message in the Twitch Chat Dialog (reported by @Shifty | Quality Control Lead)
- Close world modal overlay will now switch to a non-legacy radiant dash screen if one isn't currently focused (this fixes it being incorrectly scaled when opened on the legacy screens, reported by @Shifty | Quality Control Lead and @orange)
- Added a mechanism to OnLoaded upgrade actions to prevent running upgrades on components that have been deleted by another upgrade action, causing exceptions (found in logs from the Metamovie runs by @Avinash | WeMakeVR)