We’ve got another weekly update for you. We’ve made some great progress on the font rendering system and are gaining momentum with it. We also saw some great dances in Neos with our revamped full body system and more users utilizing the 11-point tracking system.
Don’t forget to join our livestream that starts in about an hour from this post (3 PM PST) here: https://www.twitch.tv/neosvr You can chat with us directly, ask us questions or just hang out and have fun with our interactive chat commands.
Font rendering system progress
The new font rendering system is now moving forward, with some important parts of it already implemented. We have integrated the FreeType library and are now able to load various font files (commonly .ttf) and extract the necessary data from them, including glyph outlines.
We also have integrated the Msdfgen library for rendering multi-channel signed distance fields of the glyphs from within Neos - the data necessary for high quality font rendering in realtime. The process is quite fast too, being able to generate thousands of glyphs in a few seconds on a single core and even more when running on multiple cores.
And lastly, the system also packs all the generated glyphs into an atlas, with support for automatic growth. This will allow elegantly generating atlases both ahead of time and dynamically at runtime for any missing symbols (e.g. Japanese or various unicode symbols).
The system isn’t yet in state where you could utilize it, as some crucial subsystems are still missing (see What’s Next section), but here are some of the generated testing data! Here’s a big atlas of pre-generated symbols:
And here are some examples of text rendered directly from Neos code into a bitmap. Text will not normally be rendered this way so there’s no anti-aliasing, but it’s a good quick way of testing that all parts are operating as intended:
Various small additions
Since most of the focus is currently on the UI overhaul, particularly new font rendering system which represents the major part of the rework, there are fewer new features. But over the week we’ve still released a bunch of smaller additions, tweaks and bugfixes.
Based on popular demand, there’s now a “POST String” LogiX node, which allows making a POST request with a string body from within Neos for communicating with remote API’s. The proper set of nodes with rich API’s will have to wait until future additions to LogiX (like the collection system), but this should help in the meantime.
We’ve improved humanoid detection when importing avatars, increasing the compatibility with a variety of different models out there, fixed some issues when setting up dynamic bones on certain models with (near) zero-length bones and did various fixes and improvements to full body setup.
The Vive Pro Eye tracking support has been updated to the latest version of the SDK and a new expression “eye widen” has been added. Now you can make shocked face right inside of Neos when you realize how much has the headset cost you!
If you’d like to see more of the updates I recommend joining our Discord, we have #neos-updates channel with full release notes for each build! You can also follow the patch notes here on Steam.
Community Highlights
We’ve seen some great use of our full body and eye tracking system this week!
Fusty Lugs VR dance We’ve got an awesome dancer Fusty Lugs come to Neos and stream using 10-point full body tracking on Twitch. Check out her clips and broadcasts on her channel, they look really great!
Reactant’s Fully Body & Eye Tracking impressions Reactant, one of our new big supporters has went all out on his VR experience with 11 point full body tracking combined with the Vive Pro Eye for maximum avatar immersion. He has created this video talking about his experience with Neos. It’s quite mesmerizing seeing this level of avatar fidelity.
Learning Chemistry inside VR The Sydney Human Research Factor lab has published two new educational worlds created entirely by chemistry students, with no prior VR or programming experience.
According to prof. Hamish MacDougal the students were only given an hour intro to Neos and taught themselves the rest thanks to tutorials by ProbablePrime and BusinessLawyer.
It’s quite astonishing that they were able to create such cool looking worlds to teach chemistry, even with some interactivity!
One of our goals with Neos has always been to give creative power to students and teachers to improve how we learn, so we’re very happy to see such content. We even have a new Discord channel #edu-science for all the educators and researchers in our community!
The worlds are available in the Neos hub if you’d like to check them out, called “Group A V1 [ChemDalyell]” and “Group B V1 [ChemDalyell]”.
Neon Arcade Hangout Love the 80s vibe? Check out the new Neon Arcade Hangout by RueShejn, Shalefoot and Lewis_Snow! It’s a cozy chill hangout world. It’s currently hosted on our headless server too, so you can stop anytime.
What’s Next
With several major parts of the font rendering system implemented we’re now gaining some momentum on this system. Currently the work is focusing on actually displaying the text from the generated data.
This needs a few new subsystems. One of the major ones is parsing and layout, which takes an input text, processes any tags and lays out the glyphs properly, fitting them into boundaries (if present), wrapping words to new lines, adjusting line spacing and computing all the necessary parameters for the actual display.
Once this part is finished, everything can be integrated and put together and you’ll be able to start playing with the new text system inside of Neos and importing your custom fonts!
- Added new "Eye Widen" eye tracking parameter for Vive Pro Eye from the v2 tracking engine -- This tracks how much the eye is widened. You can access it on the EyeManager and drive through LinearEyeDriver - Added "Don't show in session lists" setting to the session dialog, which allows excluding the world from showing up in the session lists, regardless of its access level (requested by @Shifty) -- If the world access level is set to Anyone, then anybody with a link/invite will be able to join (and anyone can invite anyone else) - Added "Griping Body Node" to the locomotion grip events, which indicates which body node (usually LeftHand or RightHand) is gripping onto given object (requested by @Vigilabo) - Added "Remove Alpha" texture processing option which completely removes the alpha channel - Added "Is User Patron" LogiX node, which allows checking if given user is Patreon supporter (based on suggestion by @0utsider)
Tweaks:
- Increased broadcast volume to normal to compensate the current audio spatializer - Added a delay when opening world from a link and the engine is booting up, to prevent joining of private/friends-only sessions failing due to not being logged in yet (reported by @Shifty)
- Improved accuracy of color -> color32 conversion (also when writing color values into bitmap), using rounding rather than floor - Full Body Calibrator will first classify trackers as feet, before classifying as knees. -- This fixes issue where putting the feet trackers higher causes them to be mis-classified as knees, when no actual knee trackers are present (encountered by @CodeF53)
Bugfixes:
- Broadened auto-retry for unexpected errors in cloud API communication, to prevent syncing and other cloud functions from getting stuck (discovered in log from @RezilloRyker) - Fixed new dynamic impulse targets not showing properly on nodes (e.g. ImpulseDemultiplexer, reported by @Alex from Alaska) - Fixed session token not getting properly extended after some recent changes (this could lead to cloud functionality getting broken on long running Neos instances) - Neos won't auto-mirror to screen when starting OBS recording when using screen mode (discovered by @Theofilus the Folf) - Added a guard to prevent inventory items being spawned in the world root (reported by @Shalefoot) - Fixed not being able to perform full body calibration if using previously calibrated tracker for only one elbow, foot or knee (discovered by @CodeF53) - Fixed the metric/imperial units switch for the full body calibrator not working correctly in world with multiple users
Another small build with some tweaks and additions. Features extension to the unsafe mode for better automation.
New features: - Added "-OpenUnsafe" commandline argument that allows auto opening a world in unsafe mode on startup (requested by @ProbablePrime) -- This requires the URL to be added to a whitelist in Config.json file next to the Neos.exe like this:
- Added "Grabber Body Node" which allows getting which body node goes a given grabber correspond to (requested by @DeliriousJax)
Tweaks:
- Locomotion turning now uses the SpeedExp setting (based on feedback from @Shifty ) - Tweaked combination of speedexp and deadzone - Vive Pro Eye will now try initializing several times on startup if it fails, increasing robustness of the service - Adjusted the Vive Pro Eye tracking driver, so it tries to keep fetching data even when there are errors in communication -- This should fix it eye tracking from breaking due to a temporary loss of connection (reported by @FustyLugs) - Removed GrabWorld from default locomotion lists (existing worlds are unaffected)
Bugfixes:
- Fixed "Clamped Sum" dual input locomotion handling for movement breaking locomotion modules (reported by @InsaneGrox) - Fixed private worlds not opening correctly with the -Open or -OpenUsafe due to the user not being logged in yet when starting neos
Some small but important additions, tweaks and bugfixes! Fixed another issue preventing worlds and items from saving encountered during last Creator Jam.
New features: - Added "POST String" node which allows sending a POST request with a string body (based on feedback from @AlienInArea51 (MR-Alex) , @Bom "Bitman" bomb (PolyLogiX) and @Alex from Alaska) - Added StatusCode to the "GET String" node - Added "Skip and just adjust avatar" button to the full body calibrator, which allows to use the height compensation without using full body tracking (based on feedback by @Turk)
Tweaks: - Removed "Height Compensation" for the tracking reference in the full body calibrator (based on feedback by @Coffee and @Nexulan) - Optimized world/item saving and world transfers to use async methods, to prevent blocking threads - You can now remove components from the component inspectors - Component inspectors now clean themselves up when the component is removed
Bugfixes: - Fixed world/items saving breaking when there are assets in the hierarchy that cannot be gathered - Fixed world data not getting correctly dumped in some cases when there's an error in the saving process - Fixed nodes that use dynamic impulse targets not packing properly, e.g. ImpulseDemultiplexer (reported by @ProbablePrime) - Removed old ClipboardSlot and ClipboardRecord components - Fixed broken baking of meshes when none of the meshes have tangents
It was filmed and edited by Theofilus The Folf , with Nexulan as main dancer and director. Also featuring InsaneGrox as me as backup dancers.
It was made almost entirely using in-game tools (except the video editing), collaboratively across the globe, to show what's possible in our metaverse!
Music is My Favourite Drug by MorganJ ft. Philip Matta.
Welcome back to the Weekly Update. We’ve got some exciting features to share with you this week! We’ve implemented a major new shader, a new world mode, and some session management options.
We’ll be talking about these features in our Friday Twitch live stream, so come and hang out with us, ask us questions! We'll also be showing off community creations from November. The stream starts at 3 PM PST (when this post is 2 hours old).
Color grading with LUT Shader
Want to have more control over the color grading of your world? We’ve implemented LUT (look-up table) shader to do just that. If you want to just boost the contrast, create a colder looking atmosphere or make the world look psychedelic, this feature makes it easy to accomplish your goal!
There are two ways you can get LUTs into Neos. Simply take a picture in Neos of your world, export it as a LUT through the file browser. Then apply color grading in a photo manipulation tool such as Photoshop or GIMP, and reimport the image as a LUT. You can also directly import .cube files as LUTs if you prefer.
To give you a better idea of what you can do with LUTs just look at this awesome image made by Hayden and Coffee:
Fog Volume improvements and PBS Color Mask Shader
The fog volume shader has also received significant improvements to help improve the graphical fidelity of your worlds. You can now use it in worldspace mode to prevent thinning around the cube edges, you can clamp the colors to prevent strange color artifacts, set minimum and maximum distance, use linear, exponential or exponential squared fall-off and even use a vertical color gradient!
Another addition is a PBS Color Mask shader, which lets you use a color map to selectively tint parts of a mesh. It’s a cheap and easy way to get a lot more variety out of models without having to separate them into pieces.
Unsafe Mode and Experimental LogiX nodes
For a long time, we’ve been asked to add file manipulation features to Neos by some users, particularly the Sydney Human Factor Research, for capturing research data. We’ve avoided this for security and future compatibility reasons, as we want to take a proper care to implement those features properly, but that put them lower on the priority list.
After recent discussions we found a good compromise solution for the meanwhile! We’ve created a new world mode called “Unsafe Mode” in which you can test some potentially dangerous LogiX. Any session started in unsafe mode cannot be accessed over the internet (it is LAN only or private) and this state is immutable for the whole run of the world.
We’ve also introduced a new “Experimental” category of LogiX nodes. To access it, open your LogiX tooltip through the inspector and check “Show Experimental” field before opening node selector.
For starters, we’ve introduced node for writing/appending text into files. This node obviously only works when the session is in Unsafe Mode and only for the host.
Any nodes you find in the experimental category aren’t going to stay, so make sure to not build anything that you don’t want to break in the future. We’ll make an announcement when they are going to be replaced by a proper alternative, so if you only need them for a project right now, feel free to utilize them!
Research data captured from Spider Island in Neos (see below) and plotted
Session Management Improvements
Recently we’ve received our first griefing reports in Neos. It is sad, but inevitable step in growth of this project. To help you manage your experience better, the long awaited ban from world feature has been implemented.
If you have a user who is causing you grief, even after you’ve asked them to stop, you can easily ban them through the session menu. This will ban them from accessing any world you host, so use wisely! You can also remove the ban from within the Debug menu, but this will be polished and updated later for easier access.
We’ve also changed the default access level for Anonymous users to default as Spectator. This is to prevent users from creating multiple anonymous accounts with which to re-access your world and cause more trouble.
These are just the default settings, you can still change this setting for these users within the Session menu if you choose to do so and trust the user. It’s ultimately up to you!
There have been some other additions to our moderations tools as well to deal with those situations. If you encounter a situation that you can’t deal with yourself, contact a member of the team or user in Neos with a sheriff badge and we’ll take the necessary actions and find ways to provide you with more tools.
Community Highlights
MetaMovie Project
Jason Moore has been working hard at creating his next MetaMovie inside Neos, called Alien Rescue. This has been a huge collaborative effort to provide users with a very unique and entertaining story-telling experience within VR, where YOU are the main character.
He has released this awesome update video on the progress of the project and how he’s utilizing Neos to build this experience. It’s worth watching all the way to the end, the bloopers at the end had us in stitches!
Spider Island by SHFR (Sydney Human Factors Research)
ProbablePrime and other members of the community have been helping out Hamish and his VR lab in Sydney to build a research application in Neos, using the Vive Pro Eye support and the newly added file write support, called “Spider Island”.
Using the eye tracking the application determines when the user is looking at the spider and records this information along with the distance from it. This way the researchers can gather data on how the subject with agoraphobia reacts in the virtual environment and plot it for analysis and study.
Oxford Artificial Intelligence Society presenting in Neos VR
This Wednesday we live streamed a special event held by the Oxford Artificial Intelligence Society held simultaneously at the Oxford Library and in Neos. We had a few AI researchers talk about their work, so if you’re interested in the AI (particularly in the context of MMO) give it a watch!
Medra and friends have created an escape room in Neos this week! Come give it a shot, and bring your friends for a fun and challenging experience!
Creator Jams are held every Sunday and everyone is free to participate and build collaboratively with others.
What’s next?
The work is still underway on the new font rendering system. Major parts of the system have been designed and the implementation is slowly starting on the individual pieces. So far this is the most challenging and tedious part of the technical phase of the UI overhaul process, as it involves a lot of concepts and additions to the engine.
Once the system is up and running, we expect things to start ramping up! We’ll let you know once we have more.
Thank you very much for reading and see you next time! And don’t forget to join our stream!
"Unsafe Mode", File Write access for logix (experimental), support for CUBE LUT files, full body improvements and more!
New Features:
- Added "Unsafe Mode" for starting worlds, which allows use of dangerous experimental features in safe context -- You can enable "Unsafe Mode" in the session start dialog -- Unsafe Mode worlds can only be accessed from LAN at most. They can never be accessed over the internet - Added special "Experimental" LogiX node category -- To access, open your LogiX tooltip with inspector and check "ShowExperimental" field. Then open the LogiX node selector -- DO NOT build anything long term using these nodes. It WILL BREAK at some point. - Added experimental "Write Text To File" node (requested by @SHFR_H, @ProbablePrime) -- Only works if the world is running in Unsafe Mode and only for the host -- This is an experimental node. Make sure to follow the warning above - Added support for .CUBE LUT format (implemented by @Coffee, requested by @Zane) - Added NewLine node (this provides new line constant) - Added ability to switch audio track on the VideoTextureProvider -- Default is "null" which uses the default audio track. Use a number to override it (there's currently no feedback on how many are available and which ones they are, but usually there's few enough to try them all)
Tweaks:
- Changed the calf rotation for the full body IK, so the calf follows rotation of the foot rather than hips/pelvis (based on feedback by @InsaneGrox) -- Let me know if it works better this way, might need to do some more tweaks - Changed default height compensation to 0.95 (based on feedback by @InsaneGrox and @SmolCookie ) -- Existing avatars will be auto updated only if they use the original value of 1.05, otherwise the value is left unchanged - Tweaked Maintain Height to properly offset the user height by the eye-level difference -- This fixes avatars standing on their toes when using "maintain height" (they will still stand on their toes if you look down, that requires rework of seated mode) -- If you changed your actual height to a lower one to prevent this, you'll need to change it so you're not scrunched - Tweaked height compensation supression to see if it fixes issues with the avatar randomly becoming small until the user height is changed (reported by @InsaneGrox) - Default Anonymous user role is now Spectator. Existing worlds are auto-updated to this on load, but you can reconfigure them afterwards if needed. - "Mirror To Display" is now grayed out and cannot be used in screen mode now (based on feedback by @Shalefoot) - Upgraded to Unity 2019.3.0f1 from 2019.3.0b12
Bugfixes:
- Fixed UI buttons not working when in the screen mode and not the host (reported by @pammematth and @Rukio ) - Fixed "-ForceLANOnly" command line argument not working correctly in all cases (reported by @ProbablePrime)
Build with some important changes. First, finally direct access to finger data! Also due to recent reports of abuse, I had to finally implement banning functionality for your sessions. And last there are some important bugfixes to prevent some random crashes (particularly with headless).
New Features:
- Added "FingerPose" node, which allows reading raw finger pose from a IFingerPoseSource (requested by @Addim, @Coffee and other users before) -- This pose data is "normalized", meaning that it's always using the same coordinate conventions, regardless of avatar - Added "UserFingerPoseSource" node which allows fetching the pose source for a particular user - Added ability to ban users from your own sessions (can be found in the session dialog, next to kick) (based on recent abuse reports by several users) -- You can also remove the ban through the debug dialog (this is temporary, will have better UI soon) -- You can also use the ban <username> and unban <username> commands on the headless client - Other improvements to session security and moderation tools
Bugfixes:
- Reworked mechanism for enqueuing changed components and objects out of the update loop to fix race conditions -- This should fix some random Neos crashes, particularly headless which is prone to this - Added exception guard for world events, to prevent Neos/headless from crashing due to errors in the registered events - Added exception guard for registering changed objects, preventing it from leaking and crashing the whole client/server - Added a guard check for database corruption when fetching record lists (discovered in logs from Rubik , @Ballistic ) -- This should notify you of database corruption in cases where it previously wouldn't, leading to assets or inventory randomly not loading - Fixed vertical GradientStrip procedural textures being vertically inverted after recent change (both new and existing textures are auto-fixed)
I'm mainly focusing on the new font rendering system now (sorry, it's taking quite some time, it's quite complex problem), but here are some bugfixes, tweaks and improvements!
Tweaks:
- Settings will now always sync, even if there's a sync conflict, overwriting the cloud version. This should fix lot of cases of sync errors and help prevent settings from reverting to defaults - Model Exporter will now name materials by the object they're on (based on feedback by @Business Lawyer) -- Let me know how well this works, it might need some tweaks - Updated the Unity SDK to latest version of Neos (this fixes sync issues from the SDK encountered by @Quinix )
Bugfixes:
- Improved security by preventing simulated button presses (reported by @ProbablePrime ) - Fixed public worlds opening with the access level they were saved with (e.g. opening as private) (reported by @Nexulan ) - Fixed objects turning black when too near the camera due to changes in the post processing stack (reported by @Lewi-bean and @Veer ) - Fixed exceptions during Neos startup due to missing object - Fixed worlds reverting back to private when users join (reported by @ProbablePrime) - Removed diagnostic message for destroyed updatables (based on log from @Coffee ) - Fixed synchronization diagnostic data not always getting logged correctly (to help diagnose @Steamkraft's sync issue)