1. Neos VR
  2. News

Neos VR News

2020.8.1.782 - Fix for increased server load, flash highlight improvements

A quick patch, fixing a bunch of issues, including one that caused the server to be recently hammered with too many requests, making cloud stuff randomly break. If you're running a headless, please update ASAP!

[h2]New Features:[/h2]
- Added "ExcludeColliders", "ExcludeMeshes" and "ExcludeDisabled" inputs to FlashHighlightHierarchy node (requested by @Zyzyl)

[h2]Tweaks:[/h2]
- Merged OpenLink and OpenWorld nodes into one, simplifying the usage
-- Existing instances of OpenLink are autoconverted
-- You can now use either URL or WorldLink as the source (WorldLink takes priority over URL, but generally you only want to use one)
-- It also fixes the WorldLink input not properly accepting all world links (reported by @Dante)
- When unexpected error occurs while processing mesh on StaticMesh or StaticTexture2D, the button will now indicate Error, rather than getting stuck on "Processing..." indefinitely
- CapsuleCollider is now highlightable (e.g. with the Flash Highlight Hierarchy node) thanks to the new CapsuleMesh

[h2]Bugfixes:[/h2]
- Fixed clients connecting to headless servers on LAN through NAT punchthrough rather than directly discovered local IP, preventing the user from joining headless on LAN on networks without support for loopback (reported by @Cyro and @Tekno Catron through @Shifty | Quality Control Lead)
- Fixed equality comparison for SessionInfo incorrectly considering identical session info data as different
-- This fixes session info being sent to the cloud every update rather than just on changes, causing heavily increased server load and making many requests fail (e.g. causing sync errors, reported by @MilkTheCow, @Enverex, @Dante, @Zane and @Shifty | Quality Control Lead)
- Fixed empty meshes with zero vertices breaking the Append mechanism, breaking any mesh processing that works on a copy of the mesh data (reported by @Enverex)

2020.7.31.1099 - Custom Persistent Session URLs, Session Info access and more

I'm sorry there's not more stuff again, I ended up refactoring and extending the world/session announcing systems and things related to them as preliminary for the new World UI.This brings some new powerful functionality that you can utilize already.

A semi-major addition is support for custom persistent session ID's. This allows you to setup sessions on headless that will always be hosted on the same URL. There is also new component SessionInfoSource, where you can fill ID of a session and it will automatically fill it with live data of the session (if it's running, what is its name, how many users it has and so on), so you could create hubs or portals in your worlds that will automatically link to specific headless sessions.

This component was added thanks to a new event propagation system, which allows components to efficiently listen to session updates for particular worlds or specific sessions, which will be used by the upcoming world browser and other UI's/behaviors.

There are a bunch of optimizations as well, one major issue causing the background threads to starve was fixed and the cloud updates moved to separate asynchronous thread from the main game loop, hopefully this will improve things a fair bit. I hope to bring more stuff to you soon and get the new World UI done ASAP.

[h2]New Features:[/h2]
- Added support for custom persistent SessionIDs in the format : for the headless client, using new customSessionId parameter
-- This allows you to create permanent URLs and links to the session, which will always open it whenever it's running (even if you restart headless) (requested by @Rue Shejn | Artist 3D, @Nexulan, @Aegis_Wolf | Art Director, @jasonmo for Metamovie, @Enverex and many others previously)
-- This can be combined with the new "SessionInfoSource" component to update in-game objects based on the state of the session
-- userId needs to be your own (hosting user), you cannot use anyone else's
-- customText can only contain alphanumeric characters, "-" (dash) and "_" (underscore)
-- Example: U-FrooxLess:My-Custom-Session
-- Note that the actual session ID is always prefixed with "S-", for above example the session ID will be: S-U-FrooxLess:My-Custom-Session
- Extended the session fetching system to support local monitorying by associated world ID or session ID (this is mostly internal change that allows for new systems to be built on top)
- Added SessionInfoSource component under "World", which will automatically populate information from fetched data of a session with given ID
-- This can be utilized to build in-game behaviors and visuals based on whether the session is active or not, how many users it has, to get the thumbnail URL and more
-- Also this component can be used a world link input for Open World nodes

[h2]Tweaks:[/h2]
- Moved Cloud interface update cycle (including event dispatch) to another thread with a fixed update time rather than being tied to the main loop to avoid it affecting the framerate and running updates unecessarily often
- When typing custom type for generic instantiation of component, you can now omit the "FrooxEngine." at the start (based on feedback by @Earthmark)
- MeshCollider and ConvexHullCollider will now auto assign mesh from a MeshRenderer if it's present when attached (requested by @Enverex)
- Changed wrong default height of the capsule mesh from 1 to 2, that made it look like a sphere
- Session info now includes the ID of the corresponding record of the hosted world if it's public (this is mainly internal change at this point, which will allow linking the live session to the published world that's being hosted)
- Unified dispatching of world discovery events, preventing random glitches with discovered sessions and unecessary duplication of work
- Unified session info fetching system, automatically merging session information gathered from LAN and cloud, improving behavior when sessions are available on both and simplifying the system by not having two entries for the same session
- When joining sessions, direct connection on LAN will now always be prefered over NAT Punthrough over the internet if available
- Some internal moderation improvements in the cloud
- Upgraded to Unity 2019.4.6f1 (from 2019.4.5f1)

[h2]Bugfixes:[/h2]
- Added Mesh URL to logging of any processing errors to help diagnose problems better (based report by @Enverex)s
- Fixed Interactive Camera dialog causing freeze when exiting Neos (reported by @Davwyn through @Shifty | Quality Control Lead)
- Fixed background processing tasks getting starved when caching records during intensive inventory operations (e.g. creating inventory folder link, reported by @Vigilabo)
-- This can potentially fix UI breaking reported by others users as well (@ProbablePrime, @bobotron, @Rukio and others)
- Fixed WorldAnnouncer potentially misbehaving due to timezone or time changes and not properly announcing worlds

2020.7.29.748 - Capsule procedural mesh, LogiX visuals, RiftS controller model

Sorry for less big stuff, I'm still getting my computer up to speed after clean install, but there are some nice additions, tweaks and important bugfixes!

We now finally have a capsule procedural mesh! :smile: The mesh generation has gotten a bunch of general fixes and optimizations too. There are some tweaks to LogiX visuals as well!

RiftS/Quest touch controllers should now be detected correctly and have a proper model for tutorial, no longer confusing users. I finally fixed an elusive bug with the text rendering, making wrong symbols appear sometimes.

[h2]New Features:[/h2]
- Added "Setup fields by name" to Animator component, which will automatically link up fields in the child hierarchy based on the names in the current animation clip (requested by @Nexulan)
-- You can use this to setup a new Animator on an object without one and animation clip from an other object - e.g. if you have several FBX files, one with actual model and others that have just animations without the model
- Added "Recalculate All Tangents (Mikktspace)" to AssetOptimizationWizard, which will recalculate tangents for all static meshes referenced in the hierarchy with the Mikktspace algorithm (requested by @Enverex)
- Added Capsule procedural mesh (requested by @Aegis_Wolf | Art Director, @Turk and many others before)
-- It's also added to the Create New menu as a primitive

[h2]Tweaks:[/h2]
- Added RiftS/Quest version of the Touch controller model for the contextual tutorial (added by @Rue Shejn | Artist 3D, based on report by @Earthmark and @Hayden (PolyLogiX - ZyroDesign) of CV1 model showing instead and confusing users)
- UseVertexColors to QuadMesh, which allows disabling generation of the color channels on the mesh
-- This can be used to make the mesh compatible with the particle system (based on report by @Rue Shejn | Artist 3D)
- Changed the visual of relays to be less node-like (implemented by @Coffee | Programmer)
- Changed the visual of the LogiX cast nodes to be more compact, similarly to relays
- ShapeTip will now use the Material property as material for newly created shapes (the material is duplicated) (based on feedback by @Starkido)
- Upgraded some more old code to the C# async Task system from the old custom Job system and removed some related old code
- Added a mechanism for specifying quantization ranges for individual controller inputs and set default quantization for most 1D analog inputs to be 0...1 instead of -1...0
-- This doubles the precision of the controller inputs transmitted to other users on the network
-- This should also fix 0 value not decoding exactly as 0 for other users (reported by @I wont shut up about reflections and @Alex from Alaska)
--- However note that any -1...1 or other ranges for quantized inputs are not guaranteed to decode precisely to 0!
- Finger photo gesture now excludes lasers when taking photos (based on report by @Alex from Alaska and @Shifty | Quality Control Lead)
- Public and Listed flags are now cleared by default when saving a copy of a world (based on feedback from @GearBell, @ProbablePrime, @Shifty | Quality Control Lead and others)
- Light Tooltip will set the shadow type when moving the directional light source (requested by @Medra)
- Mesh Normal (re)calculation now ignores degenerate triangles, fixing visual artifacts for meshes that contain them (currently Sphere/Capsule mesh with flat shading generate those due to not handling the special case of top and bottom, but this should at least fix their visuals for time being)
- Some optimizations for mesh normal (re)calculation
- Some optimizations for UVSphere/Capsule procedural generation
- Inspector Slider will automatically format the number as integer for integer fields, rather than float
- Upgraded youtube-dl to 2020.07.28 (from 2020.06.06) (based on report by @Nexulan)
- Removed the native Azure Kinect support from the build (this should help significantly reduce the size of the build)

[h2]Bugfixes:[/h2]
- Fixed text rendering system picking the glyph atlas of a wrong font when it contains rendered glyph with the same glyphID
-- This fixes incorrect symbols appearing in certain cases, typically with certain Unicode and math symbols
-- This also fixes Logix tool showing incorrect characters for "greater than or equal" "less than or equal" and other symbols (reported by @Alex from Alaska)
-- Additional this tweak should somewhat improve performance of generating the mesh data for rendering text due to skipping unecessary dictionary lookups
- Fixed GPU mesh upload not properly clearing unused channels that were previously allocated (e.g. when turning color channel on a mesh that previously used it, it would turn black, rather than reverning to white)
- Fixed Audio Volume Settings being editable from world (reported by @Coffee | Programmer on behalf of @Cyro)
- Fixed normal and tangent calculation for Cone mesh with flat shading (reported by @A Monsoon of Babies)
- Fixed RiftS/Quest model of Touch controllers not being detected when running through SteamVR (reported by @Shifty | Quality Control Lead)

Introducing Neos Moderators, Always-on Facets, LogiX visual updates and more

Hello, and welcome back to the weekly update!

This week we have a few new minor, but powerful features, including the ability for Facets to keep running even when minimized, ability to project arbitrary 3D objects on the dash, new LogiX wire visuals which make it easier to see the flow of code and new self-moderation features! Check out the new features below!



[h2]New Facet Capabilities[/h2]
The Facet system has gained two new crucial abilities that expand their versatility. The AlwaysOnFacetModule component ensures that part of your Facet hierarchy will always stay on and keeps updating.

This lets you run any logic and other behaviors (like audio playback) even when the dash is closed, which is useful for things like music players, alarm clocks, notifications, custom dash behaviors and lots more!

Accompanying this is another component for UIX called ProjectedRectSlotDriver, which allows positioning 3D objects based on the RectTransform and automatically ensuring that those objects are correctly projected when the Facet is placed inside the curved Dash and other UI’s that use a non-flat projection.

In other words, this lets you show arbitrary 3D objects on your dash! Now you can make Facets that show private mirrors, emit sounds or particles from the actual point where you see them on the dash or just add a friendly 3D houseplant to your private dash!

This will enable lots of cool workflows in the future as well, like popping out a 3D preview of items in inventory or adding 3D effects to any UI.

We hope those new components will help you build even more powerful and versatile Facets than before and we can’t wait to see what kind of uses you’ll find for them!

[previewyoutube][/previewyoutube]

[h2]Banning people from specific worlds and pre-banning[/h2]
Based on a community request, we have added new self-moderation tools to your repertoire, to give you more control over your own sessions. You can now pre-ban people from your sessions through the friends list, by searching for their name, selecting them and using the buttons on top. You don’t need to add them as your friend to do this.

This way you don’t need to wait for them to come to any of your sessions to apply the ban. A new form of ban was added as well, which prevents the person from joining a particular world that you’re currently in, giving you a more fine-grained control for certain situations.

For this to work, you need to have the target world loaded and it needs to be saved either to your machine or to do the cloud for this option to be available. When you ban someone from a particular world, they are still free to join your other sessions.

We hope those tools give you more control over your experience and to deal with unpleasant situations.

[h2]Various updates in preparation for the new World Browser[/h2]
Our current task is reworking the world browser UI and unifying the world switcher, session joiner and world browser into a single consistent UI. While parts of this are still being designed, some underlying improvements and additions have been made in preparation.

For example Projection360 material now has new Perspective projection mode, which lets you do a traditional 2D perspective projection of 360 photos, with the ability to look around and change the camera field of view.

Other parts of Neos have received some tweaks as well, such as the LogiX visuals. The wires and connection points were updated to better visualize the flow and help distinguish between value wires and impulses.



UIX has received a bunch of new improvements and bugfixes. For example the GridLayout can now auto-size the child elements to fully fill the available horizontal space, rather than leaving a gap and RectSizeDriver lets you control other elements (like 3D objects) based on the size of the RectTransform in the canvas.

We’ve discussed some of the features of the new UI on our last stream if you’re interested in more information.

https://www.twitch.tv/videos/689707812?filter=archives&sort=time

[previewyoutube][/previewyoutube]

[h2]First round of moderators chosen![/h2]
It is our pleasure to say we’ve finally graduated our first round of Moderators! Bobotron, CanadianGit, Dante, H3BO3, Kal, LeonClement, Turk and Vigilabo have endured a long and strict 6 month vetting process to prove their determination to help keep Neos safe! If you feel you need moderation assistance in your worlds, you can go to these individuals for help!

You can find identify them by the silver Neos badge and a blue name (we recommend checking the session dialog to verify the badge, as users can have custom nametags). Meanwhile for Discord related problems, you can ping the @Discord Moderators role.

This is the first round of moderators, and there are many more who have recently joined the vetting process. If you feel you have something to contribute to the moderation team, please contact Veer, either on Neos or on Discord, and he will talk to you about the requirements and then give you an application. Welcome, new Moderators, to the Moderation team!

[h2]What’s Next?[/h2]
We hope to have a working version of the new world browser ready in this upcoming week and replace the old inconsistent system. We believe that this will greatly help new players as well, as it will reduce the number of different interactions they need to learn and make it much easier to join populated sessions, while also giving existing players better filtering abilities.

And as usual, thank you for reading our weekly update and supporting this project, we wouldn’t be here without you! We’ll see with you with the next one!

2020.7.27.3 - Always on Facets, arbitrary projected objects on Dash and more

New capabilities for Facets, you can now have parts of Facets be always on (useful for playing sounds or running LogiX when the Dash is hidden) and project arbitrary 3D objects onto the dash (e.g. mirror). Various other smaller additions, tweaks and bugfixes included as well.

[h2]New Features:[/h2]
- Added AlwaysOnFacetModule (under Radiant UI/Utility), which will ensure that all children of the slot this component is on will get parented under always Active hierarchy
-- This allows creating facets that have behaviors that stay running even when the dash is closed (requested by @Nexulan, @Coffee | Programmer and others)
-- The component also respects the Enabled property. It will automatically move the children back to normal hierarchy when disabled and move them to always active hiearchy when enabled
-- It makes sure the reparented children are properly saved with the facet when the workspace is saved, there's no need for a mechanism to spawn a new instance on load
- Added ProjectedRectSlotDriver (under UIX/Utility) which will drive transform and parent a target slot based on the UI rect position, projected through a canvas projector (if present)
-- Specifically, this can be used for Facets with the curved Dash to project 3D objects on the curved screen automatically when the Facet is placed
-- This works with any objects. E.g. you can now make a Facet which spawns a private mirror and works in the dash
- Added RectSizeDriver (under UIX/Utility) which will drive a 2D field using the absolute size of the Rect it's on, multiplied with optional scale
-- You can use this to size objects appropriatelly based on the size of the canvas/rect they're in (e.g. the actual placed size of a facet)
- Added DebugTransform component which will print out the hierarchy it's on for a given user (under Debug category)
- Added HoverEnter and HoverLeave to the Button Events node (requested by @Toxic_Cookie)
-- Note that not all buttons have hover events, particularly the NeosButton.
- Added pulse random Logix node (implemented by @Coffee | Programmer)

[h2]Tweaks:[/h2]
- Added quaternion overloads to the delta node (requested by @Cyro)
- Updated connector visuals to show directionality and increase contrast (based on feedback from @reddragon, @H3BO3, @ProbablePrime, @Turk and @Enverex, implemented by @Coffee | Programmer)
- Background thread snapshot in Debug Dialog (and with the F9 key) will now unwrap async state machines, to provide information about which async task is currently running (based on snapshots provided by @bobotron)
- Background thread snapshot now also includes hash of the task, to help differentiate different instances
- Neos can now classify the LZMA and LZ4 encoded objects/worlds just from the data, fixing scenarios where those objects could not be loaded due to the original extension being unknown (all cloud assets are also being reclassified)

[h2]Bugfixes:[/h2]
- Fixed ExternalSlotSaver causing crash on save when the target is itself (reported by @Shifty | Quality Control Lead)
- Fixed context menu appearing when BlockRemoteEquip is enabled on a tooltip (reported by @Hayden (PolyLogiX - ZyroDesign))
- Fixed DuplicateBlock placed on the avatar preventing all items from being duplicated (reported by @ProbablePrime)
- Fixed incorrect detection of RiftS Touch Controllers
-- This fixes incorrect tutorial graphic appearing on the dash (reported by @Rue Shejn | Artist 3D and @Earthmark)
-- This also fixes incorrect overlay model appearing for the contextual tutorials