1. Neos VR
  2. News

Neos VR News

2020.7.24.489 - Added control diagrams for CV1 Touch, Cosmos and Screen

Extra patch, forgot to include new controller graphics made by @Coffee | Programmer. Compatible with previous build.

[h2]Tweaks:[/h2]
- Added graphic for Cosmos controllers (made by @Coffee | Programmer)
- Added new simpler version of controller diagram for the screen mode (made by @Coffee | Programmer)
- CV1 version of Touch controllers now have their custom graphic to prevent confusion (based on feedback by @Electronus) (made by @Coffee | Programmer)

2020.7.24.446 - Perspective 360 projection, updated LogiX visuals, world ban...

Currently I'm focusing on the new unified Worlds UI/Facet (combining world switcher, world browser and session joiner into one interface). It's still being designed, but here are some things that have accumulated along the way, like new Perspective projection for 360 shader, GridLayout auto-fitting, UIX bugfixes and more!

Visibility of lasers has also been tweaked so they show less for other users and to prevent cases where they briefly flicker when moving a hand around rapidly.

Also includes new LogiX wire visuals by @Coffee | Programmer! Other changes are still being worked on before they're ready to be merged to the main build.

Now there's also ability to save objects outside of hierarchy together with the object! This lets you make objects that unparent some important pieces during use, but can be safely saved, without losing those pieces.

Based on urgent requests, also added ability to ban people from specific worlds, without need for them to join - you can search for them in the Friend list. Also includes the global ban from all your sessions too.
[h2]New Features:[/h2]
- Added "Perspective" projection mode to Projection 360 material, which renders a perspective projected view of the image to the UV coordinates of the mesh it's on
-- This works essentially like a traditional camera view for 360 photos in screen applications
-- You can use The new PerspectiveFieldOfView and PerspectiveAngleOffset fields to control the projection properties
- Added "ExternalSlotSaver" (under Utility), which will ensure that a referenced slot is saved as a child of the slot this component is on even if it's outside of the saved hierarchy
-- This can be used for any items that parent some crucial elements outside of themselves during use, making sure those elements are saved with the item
-- It allows overriding the local position, rotation, scale and active state of the item when it's saved
-- The hiearchy change is only applied during the save, after the save is finished the target slot remains where it was originally before save
-- It also ignores the "PersistentSelf" by default, making sure the target slot is saved despite being non-persistent, but allowing it to be set as such so it's not saved as part of other objects it's parented under
- Added "ExpandWidthToFit" to GridLayout, which will auto-expand the size of the cells to fill remainder of the free space
-- This can be used so the grid perfectly fits the width of the container, even if the size isn't a multiple of the CellSize and Spacing
-- You can also use "PreserveAspectOnExpand" so the height of the cell is scaled by the same ratio as the width, preserving the aspect ratio (default on)
- Added basic Viveport profile integration (in preparation for @jasonmo's Metamovie project)
- Added "Notify Modified" node under "Interaction", which allows sending modification events up in the hierarchy for components
-- This can be used to trigger the dash workspace to save (requested by @Toxic_Cookie and @Alex from Alaska)
- Added ability to ban any registered user from all sessions through the Friends list (based on feedback by @GearBell, @Ryuvi, @Zane and many others)
-- They don't need to be added as friend, simply search for them
-- This allows banning people without having to wait for them to join the session
- Added ability to ban any registered user from a specific world (requested by @GearBell, @Ryuvi and @Zane)
-- This is also done through the friends list, by finding the user and selecting them, the buttons appear in the upper bar
-- It will ban the user specifically from the world the user is in.
-- The world must be saved for this option to be available.
-- This is persistent for the given user and saved as part of the profile in the cloud, but doesn't transfer to other hosts of that world
-- User will still be able to join other worlds by the same host
- Added "Damping" property to CharacterController, which controls what percetange of player's velocity is removed over a unit of time
-- This can be used to easily setup physical fly (set damping to 1.0 and AirForce to a high value) (requested by @Nexulan, @Rue Shejn | Artist 3D, @Shifty | Quality Control Lead and others)
- Added "SearchFromEnd" to IndexOfString, which will search the string backwards for a match (requested by @Alex from Alaska)
- Pressing F9 on keyboard will log a snapshot of the background workers to the log file
-- Added to help diagnose some resource starving issues (reported by @Rukio, @ProbablePrime and @H3BO3)
-- If you experience UI freezing, press the F9 key repeatedly (about twice a second is enough) for about 10-20 seconds and then send the logs

[h2]Tweaks:[/h2]
- Revamped Logix wire visuals to indicate flow direction (implemented by @Coffee | Programmer)
-- This also changes the texture for impulse wires to be visually distinct from other wires
- Changed Impulse connector texture to be visually distinct to other inputs on Logix nodes (implemented by @Coffee | Programmer)
- Tweaked interaction laser visibility behavior for other users to prevent it from being distracting in some cases (based on feedback by @GearBell, @Rukio, @Shifty | Quality Control Lead, @Turk, @H3BO3 and others)
-- For grabbing it's now only shown when holding the object
-- For interaction, there's a small grace period before it shows, to prevent it from flashing briefly when it happens to hover over an item
- The easter egg exit messages now show who submitted the currently shown message
- Added memory pooling to loading/saving events
- Renamed "Sequence" to "Impulses" on ImpulseMultiplexer
- Tweaked some join error messages for better clarity
- Optimized Grid procedural mesh generation
- Upgraded to Unity 2019.4.5f1 (from 2019.4.4f1)

[h2]Bugfixes:[/h2]
- PerformanceMetrics component will automatically link local user when it's in the Userspace
-- This fixes the FPS facet (and any others that use this) randomly breaking when local database is cleared or the link to the user is somehow broken (reported by @Shifty | Quality Control Lead and @Turk)
- Fixed equipped item repositioning triggering for other users when toggled on and off (reported by @Conduit)
- Fixed non-functional B button on the Cosmos Controllers (reported by @I wont shut up about reflections)
- Removed useless outputs (analog Grip, Grip Touch, AB/XY Touch and Menu Touch) from the Cosmos Controllers (reported by @I wont shut up about reflections)
- Fixed keyboards being favoritable from public folders (with exception of owned by the Neos group) - you need to save a copy to your own inventory - only favorite keyboards you trust! (based on feedback by @Alex from Alaska)
- Added extra logging information for cases when local elements are attempted to be encoded, resulting in a world crash (based on report by @Enverex)
- Potentially fixed UIX canvas randomly breaking for certain users due to corrupting awaitable task state (reported by @KierDran)
- Fixed GridLayout not recalculating the layout when only the width of the parent container changes\
- Fixed default filename when exporting a photo defaulting to "FrooxEngine.PhotoMetadata" instead of the actual photo label (reported by @Shifty | Quality Control Lead)
- Fixed number of vertices for GridMesh being swapped between flat shaded and smooth shaded variant
-- This fixes the GridMesh breaking when flat shading is turned on reported by @A Monsoon of Babies)
-- This also fixes lots of unused invisible vertices being generated for smooth shaded version

MikkTSpace generation algorithm, Vive Cosmos support, Cross Universe Tournament

Hello, and welcome back to the weekly update!

This week we have a couple new things to talk about, with our new inclusion of the MikkTSpace algorithm for calculating tangents and the Vive Cosmos support! We’re also introducing a new easter egg perk for our Patreon supporters.

The Japanese community has also held a Cross Universe Tournament in Neos, check it out below in community highlights!





[h2]MikkTSpace Algorithm[/h2]
We’ve implemented this ubiquitous algorithm which is utilized in Blender, Substance Painter, Marmoset Unity, Unreal Engine and many other creative tools, so that your designs in these programs will look the same when uploaded into Neos.

Prior to this, we were using a much simpler algorithm to calculate tangents, resulting in some normal maps and height maps looking incorrect in Neos, particularly on a more complex geometry.

This algorithm produces a lot more robust results and ensures consistency for generated tangents across different tools and as such it has become the de facto industry standard. For this reason, it’s integrated natively into Neos itself.

It is automatically applied on imported 3D models, but you can also recalculate tangents of any existing model through the inspector, by clicking on the “Recalculate Tangents (Mikktspace)”. The original simpler algorithm is available in this manner as well.

Because we couldn’t find any existing library to utilize this algorithm from C#, we have created our own and made it open source (MIT) for anyone to use! Since Neos greatly benefits from many open source projects, we are happy to have found a small opportunity to contribute ourselves.

You can find the repository for Mikktspace.NET with both native and C# code here on GitHub, with scripts for compiling for Windows, Linux and Android (ARMv7) as well as precompiled binaries. The algorithm itself has been designed by Morten S. Mikkelsen and you can read more about its benefits here.

[h2]Vive Cosmos Support[/h2]
Until now, due to a lack of high demand, Vive Cosmos controller support has not been implemented, causing Cosmos players to not be able to use Neos in VR. We’ve heard of a few new players having this trouble, so we’ve decided to fix this so they too can enjoy Neos.

For now, the Cosmos support might not be without bugs, so for our Cosmos users, we need your feedback in the bugs-feedback channel or on the GitHub! It’ll really help speed along the debugging process for your system, since we do not have the hardware for our own testing.

We want to support as much hardware as possible, so even if you feel you may be in the hardware minority, let us know what you’re using and we’ll act if we get enough demand for the product.

[h2]Put your permanent mark into Neos through a custom exit message[/h2]
As many of you have already noticed, with our new Radiant UI, Neos now features a small easter egg on the exit screen - random exit messages, that range from various quotes, references to some in-jokes.

Every time you exit Neos there is a random chance to get any of those messages for any user. We’ve had fun adding more of those each build, so we thought, why not share some of the fun with you?

Starting now, if you’re a Patreon supporter starting at the Neuromancer level, you can submit your own custom message that will have a chance to appear for any of the users. If you have a message you’d like to add, let a team member (ideally Shifty) know through our official Discord channel.

The messages need to be fairly short (maximum 2-3 sentences) and appropriate for the general public, but other than that they can be generally anything. However we reserve the right to deny or remove any potentially controversial messages. If you’re a higher Patreon tier you can submit multiple (check the Patreon tiers for details).

The location and/or presentation of this easter egg might change in the future as well (and it doesn’t show up at all when using the Neos Pro license), but we do want to keep it around for fun permanently, so there’s a good chance your message will still be popping up years into the future (it will stay even if you’re no longer a Patreon)!

[h2]Community Highlights[/h2]
[h3]Cross Universe World Championship 2020[/h3]
The Cross Universe World Championship was held last night and streamed by Nexulan! We had many contestants from across the globe competing to win, and we have the whole thing archived down below, so check it out!

[previewyoutube][/previewyoutube]

[h3]Rukio’s Twitch Streams[/h3]
Rukio has been streaming Neos for quite some time now, and is quite the talented world designer. He’s a very gracious host who streams Neos and other games, so go check him out!



[h3]Vigilabo On The Keyboard[/h3]
This clip was from one of Rukio’s streams, showing Vigilabo creating and playing some loops on his keyboard! It’s quite a catchy tune, definitely well worth the listen!



[h3]Rhenium is making a texture painting system[/h3]
This system seems quite interesting! Rhenium is making a tool that allows one to paint a projection onto an image with some new custom tools.



[h2]What’s Next?[/h2]
This week has been a bit quieter on updates, as we’ve focused on some smaller things and taking a bit of a break on the development, so our goals remain pretty much the same. We’ll be continuing the UI overhaul, by recreating the world switcher as a Facet and then adding ability to place Facets on the avatar.

After this, reworking the World browsing UI is going to be the main priority, which will involve integrating it with session joining, to make finding populated worlds much easier, particularly for new users.

On the side, we’re also investigating switching to the official libVLC Unity bindings for video playback, as the current solution (UMP) is the source of majority of crash reports and hasn’t received any new updates in well over a year. Hopefully the switch will be relatively smooth and help improve stability and control.

And as usual, thank you again for reading this weekly update and for supporting Neos!



2020.7.19.1204 - Fixes for Vive Cosmos support, tweaks and bugfixes for headless

Just a small patch. Should fixup some issues with the Vive Cosmos support and adds a LogiX node for accessing its raw inputs. Also important fix for inventory items getting orphaned in rare cases, where they exist in a inventory path that doesn't have a corresponding folder for it. A few more tweaks and bugfixes as well.

[h2]New Features:[/h2]
- Added "CosmosController" node for accessing raw inputs from the Cosmos Controller
- Added autoSleep configuration property to headless (default true). Disabling this will ensure that the world always runs full updates even if nobody is present (based on feedback by @guillefix)
- Added "Smoothing" and "Power" to VolumeMeter component to give more control on how it the volume measured (based on feedback by @H3BO3)

[h2]Tweaks:[/h2]
- Inverted the "Smoothing" range on AudioDeviceVolume to be more sensible (0 smoothing will not smooth at all), existing instances are auto-updated

[h2]Bugfixes:[/h2]
- Added a mechanism to prevent rare cases of orphaned inventory items (items in folder paths that were deleted) (based on reports by @Enkiko)
-- All existing items were revalidated and folders regenerated where necessary. You might find folders appear in your inventory that were previously there. You can safely delete those (EDIT: I just checked the report for this, looks like only two users (including Enkiko) were affected, so this is very rare indeed. The fix should prevent future occurrences of this, only seem to happen when you run out of space)
- Fixed incorrect binding for the context menu on the Cosmos controllers (based on report by @I wont shut up about reflections)
- Added a small grace period (4 frames currently) for running full update cycles on worlds that turn into background worlds, which lets any logic that disables things to run (based on report by @Enverex)

2020.7.17.1288 - Initial (untested!) Vive Cosmos support, storage usage report

Fixing Mikktspace generation for multi-submesh meshes, initial (UNSTESTED!!! Please try it out if you have the headset and controllers) support for Vive Cosmos, some new commands to help with analyzing your storage usage (they're very technical right now, but should help in some cases if you really need to use them)

[h2]New Features:[/h2]
- Added initial support for Vive Cosmos Controllers (requested by @I wont shut up about reflections and @Zalno)
-- This includes input bindings and handling controller inputs for Neos interactions
-- CURRENTLY UNTESTED!!! I'll make any fixes and tweaks as necessary based on this build
-- LogiX nodes for accessing Cosmos-specific inputs aren't included yet
- Added /requestRecordUsageReport command to the Neos account in your friends list, which will generate a basic storage usage report for your account and send it to your email
-- This list includes all records (worlds, items...) on your account that use any storage, sorted by sum of the sizes of their assets
-- This doesn't take into account assets that are shared across records. The raw sum of all records is very likely going to be much higher than your actual storage usage, because shared assets are only counted once
-- Conversely if you delete a world/item, your storage won't necessarily go down by the amount reported, but only by how many unique assets it has. If the assets are used by other records, your storage won't go down by the full amount
-- Additionally some assets are "free", like various Neos assets (e.g. some stuff you find in public Neos inventory) and will be counted in the report, but doesn't actually contribute to your storage
-- The report includes name, path, ID, record type (and whether it's message item) and public status of each record
- Added /deleteRecord command to the Neos account, which allows you to delete any record from your account by its ID
-- IMPORTANT! It doesn't ask for confirmation, double check you've got the right Record ID as this action is mostly irreversible.
-- You can use this to delete some message-item records for the time being. For inventory items and worlds I strongly recommend using in-game UI
- Added "AdminX" utility in the "Tools" folder in Neos installation
-- This lets you conveniently run the above Neos commands outside of Neos from command-line interface after logging into your account
-- When running commands through this tool, don't include the initial slash in the message
-- You can use echo command for testing
-- This tool requires .NET Core 3.x runtime installed

[h2]Optimizations:[/h2]
- Removed all memory allocations when enumerating mesh submeshes
-- This severely reduces memory allocations for functions that do this often, e.g. fetching faces by their global index or triangle index (used for fetching hit triangle from raycast or during Mikktspace calculation)

[h2]Bugfixes:[/h2]
- Fixed incorrect global mesh face/triangle indexing, particularly when there are multiple submeshes
-- This fixes the Mikktspace algorithm producing incorrect results, making some parts of meshes appear black (reported by @Aegis_Wolf | Art Director, @Dante, @Sykes, @Ubes and others)
-- You can recalculate tangents on already imported meshes using Mikktspace through the inspector to fix the wrong tangents (I STRONGLY recommend doing this if you already recalculated using simple one, as the mesh might've ended up with a weird mix of tangents)
- Fixed Headless client/server not updating Thumbnails and other behaviors properly (reported by @Enverex)
- Added more diagnostics for canvas update cycles to help diagnose bug reported by @KierDran