Significant improvements to the asset variant system with support for a bunch of new block compression formats thanks to the AMD Compressonator SDK integration!
For your existing BC1 and BC3 textures, you can now disable the Crunch compression to reduce some blocking artifacts, which will make the system compress the block compressed asset with LZMA (lossless). This will usually increase the download size of the texture, so use it only when needed.
Other formats are supported as well. Notably HDR textures are now block compressed with BC6H, cutting their VRAM usage by eight times (e.g. 16MB to 2MB for 2048x1024) - you can now use much higher resolution version HDR skyboxes while using less VRAM and this is an important step towards support for reflection probes as well.
You can also request textures to use more advanced BC7 format. It has same VRAM usage as BC3, but significantly higher compression quality, dealing better with visually complex textures, at the cost of taking longer to compute.
In other news, the intro tutorial is now skippable via a gesture and commandline argument, details below. A bunch of bugfixes and tweaks as well!
The MTC 2.0 is now also in Spanish and German thanks to our translators!
New Features:
- Integrated AMD Compressonator SDK into Neos' codebase to significantly extend support for block compressed formats and allow for a higher quality compression - Neos now internally supports all BCn formats, ETC2 formats, all ASTC variants and potentially more in the future (e.g. ATC for WebGL) -- Currently the generation of non-crunched variants is only supported on Windows. Linux headless won't be able to generate those variants and will have to rely on the cloud -- Also note for BC6H and BC7 currently the requested quality is 60%, other formats use 100%, due to significantly higher processing time for any values above this (e.g. over 2 minutes for a single 2048x2048 texture with 100 % utilization on AMD Ryzen 5950X, but only about 9 seconds for 60%)
- Extended the asset variant system to support LZMA compressed variants for storage & transfer rather than crunch compression -- You can disable crunch compression by unchecking CrunchCompressed on StaticTexture2D -- This will reduce some blocking artifacts, as crunch is a lossy compression, at the cost of potentially increasing the download size (VRAM usage is exactly the same) - Added new texture asset variants to the asset variant system. All currently supported variants are: -- BC1_Crunched/LZMA - RGB only, 1:8 compression ratio vs RGBA32 -- BC3_Crunched/LZMA - RGBA, 1:4 compression ratio vs RGBA32 -- BC4_LZMA - R only, useful for single channel textures (usally requires shader to use properly) -- BC6H_LZMA - Supports HDR textures, 1:8 compression ratio vs RGBAHalf -- BC7_LZMA - RGBA, 1:4 compression ratio vs RGBA32, significantly higher compression quality vs BC3, much slower to compute, recommended for visually complex/colorful textures -- ETC2_RGB_Crunched/LZMA - analogue of BC1, supported on Android -- ETC2_RGBA8Crunches/LZMA - analogue of BC3, supported on Android -- ASTC(block size)_LZMA - more modern replacement of BCn/ETC2 with varying quality (block sizes 4x4, 5x5, 6x6, 8x8, 10x10 and 12x12 are supported, each block is 128 bits) --- Not supported by DirectX 11, should work on Android/Linux, but currently untested --- Can achieve extremely high compression ratios (0.89 bits per pixel for 12x12), at same block size 4x4 has superior quality to BC3
- Extended Neos' bitmap/texture system to handle block-compressed formats with block sizes other than 4x4, as well as fractional bits per pixel rates - Added "ForceExactVariant" to StaticTexture2D, which will force it to load specifically requested variant, without using a fallback version -- This is STRONGLY recommended only for debugging/testing purposes. It's recommended to leave this unchecked and leave Neos to load fallback variant if the currently requested one is not available, otherwise you might be forcing every user to generate the variant locally on their computer - Added PreferredFormat to StaticTexture2D, which allows overriding the preferred variant to load (e.g. BC7) -- Note that this API will likely change in the future, but will be auto-upgraded -- If variant is not supported on the system, it will never be loaded and closest supported variant will be used instead -- Please note that requesting a new variant of the asset might take a while to load, as it will be queued in the cloud. It can take even several hours. Neos will use best available variant in the meanwhile. - You can now skip the intro tutorial (based on feedback by Moorekun, @DeliriousJax, @Turk, @ohzee, @ProbablePrime and @Shadow Panther [RU/EN, UTC+3]) -- Pass -SkipIntroTutorial to Neos on startup, which will prevent the intro tutorial from starting -- Same option was added to Neos launcher as well as persistent -- You can also skip the tutorial by enabling Edit mode while at the "Welcome" screen (suggested by @Alex from Alaska)
Tweaks:
- HDR textures will now load BC6H block compressed texture variants by default, reducing VRAM usage for those textures by factor of 8 (e.g. 16 MB to 2 MB, which is why those will be crucial for reflection probes later on) - Removed grabbed object contextual tutorial as this is now taught in MTC. Contextual tutorials for tools are still present (based on request by @Nexulan | Community Manager) - Added support for color type to the SmoothValue<T> component (requested by @Coffee | Programmer) - Increased the size of the credits section for language selection - Texture2DAssetMetadata will now continually update when the texture asset is in partial load state, to keep showing the latest info, rather than getting stuck until the load is fully finished - Optimized cloud asset variant generation to skip regenerating variants in a variant chain, if they have already been generated (e.g. by previous failed task or request for lower mip levels) - Texture2DAssetMetadata now also reports the exact variant that was loaded, which is shown in the inspector for StaticTexture2D as well - Graphical Neos and headless log file naming is now same and consistent (requested by @Shadow Panther [RU/EN, UTC+3])
- Merged Spanish locale additions (including MTC 2.0) by @Ruzert - Merged German locale additions (including MTC 2.0) by @Bluigi - Merged Korean locale fixes by @MirPASEC - Merged English MTC 2.0 locale tweaks by @Coffee | Programmer
Bugfixes:
- Fixed server status fetching causing background exceptions in some cases - Fixed asset variant system loading completely incorrect variants in some cases, when the exact requested variant isn't available - Fixed requests for exact variants of texture getting ignored and not forcing the variant to reload if one is already loaded, but using a fallback - Contextual tutorial now ignores tooltip multiplexer, fixing excessive lagging (reported by @3x1t_5tyl3 and @Shifty | Quality Control Lead) - Fixed Stopwatch node reseting itself every time the Start is pulsed, rather than resuming (reported by @Coffee | Programmer) -- Note some internal handling of playback for "infinite" playback was changed, so NormalizePosition for such clips is always -1 to indicate that it's not valid/applicable. There are possible sideeffects and glitches to this, keep a lookout, but things seem to be good from testing - Fixed Tooltips generating LocaleStringDrivers on each load (reported by @3x1t_5tyl3 and @Alex from Alaska) - Fixed LocalePostprocessor not handling extra keys in locales properly, resulting in percentages over 100 % and negative numbers of missing keys - Fixed Setup Guide screen not using localized versions of the "Primary Controller" label (reported by @Bluigi)
This week we have good news mainly for all the new users coming into Neos VR as we have finally overhauled and extended the introductory experience to Neos, to make sure everyone has their basics setup and knows how to navigate Neos.
There have been improvements on a few fronts, including a new setup guide, which then leads to the redesigned MTC (Metaverse Training Center) with a simple interactive tutorial that walks through the basic controls and interactions in Neos VR.
Setup Guide
Starting a few updates ago, any new user will be now welcomed by a new setup guide on their dash, which walks them step by step through some basics, ensuring that Neos is in the right language, the correct audio input device is selected, some crucial settings are set and ideally registers an account before continuing.
Once the user finishes the setup, they’ll be offered a choice between starting the intro tutorial as public world or as a private. Making it public will allow community members to join and help them out. We wanted to make that choice ultimately up to the user and what they’re more comfortable with, as we have received many reports of users getting startled when others have joined their sessions unexpectedly.
Some of the existing flows were improved as well to make the process simpler, for example the registration process will now automatically login the user after they click on the verification link, rather than requiring them to type their credentials again.
During the intro tutorial, closing the dash or switching to another screen is also disabled, to ensure that new users don't accidentally get lost before completing the tutorial.
If you'd like to try out the new setup guide yourself, you can force it to start by passing -ForceIntroTutorial to Neos on startup or using similarly named option in the Neos Launcher.
New MTC with intro tutorial
The meat of the new user experience is in a brand new MTC 2.0 hub (Metaverse Training Center), which now features an UIX based interactive guide that walks the user through basic controls and interfaces of Neos.
We have redesigned the look and feel of the MTC as well, to make it more open and inviting, with the new design having more out-door lighting, water and plants, combining with the futuristic architecture design.
Currently only the main hub is redesigned, with the Avatar, Creation and Recording/Streaming rooms still using the old design, but they will also be redesigned one by one.
Thanks to all the additions, improvements to Neos as well as new experience since the first MTC, building the new version was much simpler and more flexible. Making the main tutorial based on UIX rather than static textures provides several benefits as well. It makes it much easier for us to update as we continue to overhaul more of the UI’s and makes it localizable.
Not even a day after its release, the new starter tutorial is already available in Japanese, Esperanto, Chinese, Korean, Czech and Russian, making Neos more accessible to many non-English speaking members. Thank you everyone for translating!
Much of our team has come together to build this new experience, from direction, art design, video editing, scripting, world building and sound effects and we had a few community members help out as well, notably Ryuvi and Earthmark, with many other members providing feedback.
Even after release the experience is open to suggestions and feedback, you can leave them at our official Discord or at GitHub.
Our goal is to make Neos a lot more comfortable to new users and remove a lot of the common initial frustrations and problems that new users encounter. Knowing what users get stuck on or what frustrates them can help us a lot to smooth those issues out over time and help the community grow!
New Audio Input Selection
As part of the new experience, we also built some new UI’s to make certain common tasks easier. One of them is a new easier way to switch the active audio device, which now lists all the available devices and shows a live waveform and volume from the currently selected one, utilizing the waveform procedural mesh that was recently added.
It also features a quick way to check the microphone by playing the audio back to the user, allowing to easily verify if the selected audio device is correct one or not or if there are any issues with the sound.
You can access the new selection through Settings screen at the original location of the audio switching. It’s also part of the new Setup Guide in the dash, making sure new users start with the correct audio device.
New Language Selection
Similarly to audio devices, we have also built new proper UI for selecting Neos’ language. It will list all the currently available languages, rather than having to type a specific locale code to override the active one. Note that Neos will use system locale by default, so in most cases there shouldn’t be a need to change it in most cases.
Since many of our community members are continually putting effort into translating new strings to their languages, we have also added a list of credits for the currently selected languages (picked up from the list in the locale file itself), to make sure every contributor is properly credited for their efforts.
The language selection is also part of the new Setup Guide and can be accessed anytime in the Settings dialog. Looking at the list it’s impressive how many translators have sprung to get Neos translated into different languages, with 20 locales available!
Community highlights
Charma’s breakdance
We've seen an epic trend of VR Dancers utilizing Neos VR's fullbody tracking. Charma shows off their spectacular moves in this newly released Twitter video, check it out here!
School of fish simulation by thotgamma
If you like playing with simulations in VR, you should check out the new “Boid Simulation” world by thotgamma, which simulates a school of fish that you can interact with.
Turtle Drawing VM by thotgamma
Another very technically impressive creation by thotgamma is implementation of the classic turtle drawing algorithm. The implementation features a simple VM, which executes instructions, making a turtle move around and draw various shapes.
Oscilloscope Music visualization by June
June, one of our newest Moderators, has created a fun way of showing off the power and precision of our new oscilloscope features. By connecting the oscilloscope with Jerobeam Fenderson's Oscilloscope Music, June was able to recreate the visuals that are created by Soundwave programmed into the music!
------------------------------------
Anyway this is all for now! We hope the new MTC experience will help out many new users and make it easier and less frustrating to get started in Neos. We still plan to rework many of the old UI’s in the future, which should make things more intuitive and with the new design, we can update the MTC much faster and easier, rather than it growing progressively more outdated.
We wouldn’t be able to put all of this together without you and your support and feedback and if you know of anything that could make Neos easier to use for new users, please let us know! Even if we cannot address certain issues right away, we put them on our long term roadmap when redesigning many of the new systems.
It wasn't even a day and the new MTC 2.0 tutorial has already been translated to Japanese, Esperanto, Chinese, Korean, Czech and Russian thanks to our amazing translators! Pushing a build with the new translations before we make an official announcement.
We have updated the MTC itself as well with some bugfixes and tweaks and this build has a minor related bugfix too, if you see the skybox material distorting in the MTC, please update!
The build is compatible with previous two.
Tweaks:
- Merged Japanese, Esperanto and Chinese locale additions (including MTC 2.0) by @Melnus - Merged Korean locale additions (including MTC 2.0) by @MirPASEC - Merged Czech locale additions (including MTC 2.0) by @rampa_3 (UTC +1, DST UTC +2) - Merged Russian locale additions (including MTC 2.0) by @Shadow Panther [RU/EN, UTC+3] - Merged English locale fixes by @Melnus and @rampa_3 (UTC +1, DST UTC +2) - Merged Japanese locale fixes by @orange and @Aesc
Bugfixes:
- Disabled instancting on Projection 360 material, which causes random distortions when the same material is applied to multiple objects (reported by @Aegis_Wolf | Art Director) - Added extra logging information for CircularAudioBuffers to help diagnose errors - Fixed Welcome screen of the MTC 2.0 tutorial not using the localized strings (reported by @rampa_3 (UTC +1, DST UTC +2))
After weeks of effort by our team and a few community contributors (we'll post more in the weekly update tomorrow), the new MTC 2.0 is now live! Pushing a new build with tweaks and new locale strings required for it to work, please update before visiting, otherwise some text will be missing. The build is compatible with previous one so you don't need to update right away though.
So far only the main welcome room has been reworked, featuring a new tab based tutorial, the other rooms are still using the old style and will be reworked over time.
New Features:
- The main room of the new MTC 2.0 is now live! -- The welcome screen on dash will now open this version as well as the MTC button on the dash -- When opened through the welcome screen, opening of the dash is blocked until page on how to open it is reached -- Added locale strings for the new MTC, it should be fully localizable
Tweaks:
- Merged Japanese, Esperanto and Chinese locale additions by @Melnus - Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2) - Merged Dutch locale additions and fixes by @Alex the insufferable avali 🐦 - Merged Russian locale additions by @Shadow Panther - Merged German locale additions by @Bluigi
Bugfixes:
- Fixed OBS menu on the Camera/Streaming menu breaking, rendering the UI blank (reported by @Kulza, @Medra and @ProbablePrime)
Some more additions for the welcome experience, adding a screen that allows setting basic preferences and some internal things as well as related improvements. Adding a few smaller new features as well like SmoothValue<T>, GridLayout and some other.
A bunch of tweaks and bugfixes as well. I traced down sources of some freezes, particularly when a world crashes, so Neos should lock up less in such cases now and I fixed some cases of worlds crashing in the first place, so hopefully it'll help.
New Features:
- Added "Basic Preferences" screen to the Welcome Guide on the dash, that lets user configure Smooth/Snap turn, Primary Controller and their height (height previously requested by @Earthmark) - Added a new Create Account icon to the welcome guide dash screen (icon created by @Coffee | Programmer) - Added "ReactivateDash" LogiX node (in Experimental), which will reactivate dash disabled by the welcome tutorial -- This node is mostly for internal use, it won't have any effect when the dash is already activated - Added "World Path:" to the dialog for editing world metadata -- This allow assigning the world a fixed path, which allows it to be loaded dynamically without having to hardcode it's Record ID using the neosrec:/// URL
- Added SmoothValue<T> (under Transform/Drivers) which will smoothhly lerp arbitrary target value of supported type (requested by @Coffee | Programmer) - Added CreateDirectlyOnTarget and CreateNonPersistent inputs to CreateDynamicVariable<T> and WriteOrCrateDynamicVariable<T> nodes (based on requests by @Zyzyl, @Robyn (QueenHidi), @Turk and @Enverex) -- CreateDirectlyOnTarget will create the component directly on the target slot, rather than the space root (I recommend only using this if really necessary and if you have full control over the target slot) -- CreateNonPersistent will create the component as non-persistent, meaning it won't save with the world. If one already exists the persistence won't be altered - Added "Align Last Row Individually" to the GridLayout, which will align the last row of items on its actual number of items (e.g. centering them) - Added Welsh (cy) pluralizer (requested by @Raith) - Added Inverse (A^-1) support for 2x2 matrices (based on report by @Zyzyl)
Tweaks:
- Reworked connector disposal mechanism to avoid running individual deletions and cleanups in connectors (typically interacting with Unity API) when the whole world is being disposed -- This saves some performance when closing the world, making it happen a bit quicker -- Importantly this also fixes random Neos lockups, particular when the world crashes due to unexpected exception, requiring Neos to be completely restarted - Left/Right Close Override now works with simulated eye movement, rather than just eye tracking (based on report by @Alex from Alaska) - SyncType fields will now use the type redirection system on load -- This will make renamed component types load correctly, e.g. for the locomotion permissions (based on report by @ProbablePrime) - TimerCountIndicator and TimerColorIndicator on InteractiveCamera are now optional and won't break the camera when not present (based on report by @Hayden (PolyLogiX Studio)) - Distance/length quantity parsing now accepts singular forms of units as well (e.g. "inch" in addition to "inches") - Record/World edit form is now localizable - Component attacher will now filter out any common type presets if they're not actually supported by the component - libVLC playback engine will attempt to load video 5 times to help in cases where the load fails on the first try (based on report by @Enverex) - Upgraded to youtube-dlc 2020.11.11-3 (from 2020.10.31)
- Merged English locale fixes by @Bluigi - Merged Japanese, Esperanto and Chinese locale additions and updates by @Melnus - Merged Gereman locale additions and fixes by @Bluigi - Merged Russian locale additions and fixes by @Shadow Panther - Merged Turkish locale additions and fixes by @Blaze - Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2) - Merged Polish locale additions and fixes by @art0007i
Bugfixes:
- Fixed uint values larger than signed int not being able to be saved (reported by @thotgamma) - Fixed biped rig heuristics not correctly detecting bones with "eyeball" as eyes (based on report and sample model by @H3BO3) - Fixed tooltip validation causing a tooltip to get dequipped on behalf of another user causing the user to freeze (reported by @Alex from Alaska and @3x1t_5tyl3) - Fixed users validating other user's tools as their own if they make changes to them (discovered based on report by @Alex from Alaska and @3x1t_5tyl3) - Fixed Locomotion modules being validated against the validating user, rather than the user they're equipped on (discovered based on report by @Alex from Alaska and @3x1t_5tyl3)
Sorry for the lack of updates over past few days, I was rebuilding my PC and reinstalling everything, but here's a bunch of new goodies!
Neos now has Welcome Guide, which will get new users setup with basics (making sure their audio works and they register an account and some more), which will tie into the new MTC tutorial as well (currently it still opens the new one), hopefully this will help to improve the initial experience and get rid of a lot of common problems.
I built and tweaked a bunch of the UI's for it as well, like the language selection (it now also shows credits of the authors!) and login/registration process.
Message/invite notifications now also have sounds based on popular request! Currently they're just semi-random sounds from royalty free library, they'll be replaced by custom ones at later point, but hopefully they'll serve well.
There's many other tweaks and improvements as well as well as some security/privacy fixes. The cloud server was also upgraded to the brand new .NET 5 runtime that released a few days ago, giving the cloud some performance boost!
New Features:
- Added new "Welcome Guide" to the dash, which will walk new users through a few basic settings to get them setup and avoid common first time problems -- Currently this includes language selection, screen mode warning, audio device selection and account creation -- At the end, the screen will take user to the MTC (currently old one, will be replaced with new soon), with choice for it to be either public or private session -- More screens will be added later, particularly basic options (Snap/Smooth turn, Height and such) -- Opening & Closing dash and switching dash screens are disabled for the duration of this tutorial to prevent the user from accidentally getting lost -- You can force this welcome screen to open by passing -ForceIntroTutorial argument or using same option in the Neos Launcher - Added message notification sounds (requested by @spider, @Alex from Alaska, @H3BO3, @Enverex, @sirkitree and others) -- The sounds are currently temporary 3rd party ones picked from this website: https://www.tonedock.com/samplepacks/6 official ones will come at later point -- Sounds only play on text/voice message, session invite and credit transfer and only if the notification is actually shown - Added LanguageSelection UI, which lists all available languages with their English and Native names and allows easily switching by simply clicking on them -- It will also show the authors of given locale and all its fallback locales - Added "CurrentLocaleInfo" component (under Localization) which provides basic info about user's current locale -- Currently it outputs the locale code, native name and English name - Added "LocaleAuthorsInfo" component (under Localization) which generates credits string for a given locale resource - Added ability to remove the reticle in Screen mode by passing -HideScreenReticle command line argument (requested by @Randy) -- You can also use a new option in Neos Launcher - Added transparency support for PBS Triplanar (requested by Brandon Schmeidler on GitHub and others in the past) - Added ` and ~ characters as Shift modified versions of Esc and Tab keys (requested by @H3BO3)
Tweaks:
- Improved new account registration dialog -- User will now be automatically logged in after they click on the verification link, without having to enter their login credentials again -- The registration success message mentions the email that the link was sent to -- @Translators the success registration string has changed in the locale, please make sure to update it when you can! - Upgraded CloudX API server to .NET 5 runtime from .NET Core 3.1, along with all associated libraries - Upgraded to System.Text.Json 5.0.0, which should improve some performance for communication with Cloud API - Upgraded many other internal dependencies to newer versions - Various permission and avatar protection security improvements based on community reports - Sanitized public group API (based on report by @Bitman) - When user is in Contacts Only world that's Hidden from lists, it will show as "In Hidden, Contacts Only World" (based on feedback by @Enverex, @Turk, @Electronus and @Shifty | Quality Control Lead) - Renamed FlyLocomotion component to NoclipLocomotion - Added cleanup of removed locale files from Neos' build - Cloud API now reports correct user verification status - Removed Live.com email warning from the registration dialog - VirtualKeyTextDrive will now use the TargetKey if the append string is pure whitespace - Merged German locale additions and updates by @Bluigi - Merged Japanese, Esperanto and Chinese locale additions and updates by @Melnus - Merged Czech locale additions and updates by @rampa_3 (UTC +1, DST UTC +2)
Bugfixes:
- Fixed PBS Distance Lerp Specular Transparency shader not loading (reported by Steven Azari on GitHub) - Fixed Noclip locomotion speed being affected by the scale of the avatar's hand (reported by @marsmaantje) - Fixed "Repeat Email:" in login dialog saying just "Email:" (reported by @Bluigi) - Fixed session access level in the Session screen not using the localized strings (reported by @Bluigi ) - Fixed Microphone tooltip continuing to record user's voice when they're recording a private voice message and the recording was started by another user / script (reported by @H3BO3 and @Zane) - Fixed registration success message not using the localized string
New audio input device select screen! It should be much easier and faster to use and will also be incorporated into the upcoming initial Neos setup for new users.
It's also designed in a modular way too, so you can now create your own facets and UI for switching audio devices (e.g. having a quick switch between two commonly used on your dash), I've even thrown in a component to easily map audio device by its name to make it easier.
Also added new procedural AudioSourceXYMesh, which graphs the stereo channels on XY axes, allowing the sounds and signals to be visualized as interesting patterns (see #🎥devlog for example).
I'm also slowly working on preliminary work towards ReflectionProbes, a first tiny step made it into this build, having Projection360 support cubemaps. No way to import/create them yet, more to come.
Also a bunch of bugfixes as usual!
New Features:
- Added AudioInputDeviceSelection, which provides new UI for selecting the default input audio device -- This shows list of all audio devices at the same time -- It also shows the device monitoring data - volume bar and realtime waveform -- Additionally you can quickly test the input, by having it play the audio back to you -- This replaces the audio selection in Settings - Added ButtonAudioDeviceSet component, which sets the default audio device based on index or name -- Using value of -1 will revert to system default -- This component only works in Userspace - Added LocalAudioDeviceStream which is an audio source that directly passes audio data from an audio device, without syncing the audio data to other users - Added AudioDeviceInfo (under Audio/Utility) which provides information about audio device -- Currently provides DeviceName, if it's Neos default, if it's system default and the device type -- Providing -1 as DeviceIndex will make it show properties of the current Neos default -- This component only works in Userspace - Added AudioDeviceIndexFinder (Audio/Utility), which will find the device index of audio device by name -- Name match can be case insensitive (on by default) and allow partial matching of substring (on by default) - Added Cubemap support to Projection360 material - Added AudioSourceXYMesh procedural mesh (it's a RectMesh) which graphs stereo audio signal as XY graph (based on request by @Hodufan) -- When cubemap texture is assigned, it takes precedence over the 2D equirectangular texture -- Field of view and angle offset are not supported when cubemap is in use -- Tint texture is not supported when cubemap is in use -- Creating cubemaps in-game isn't supported yet - Added nodes for getting and setting the OrderOffset of slots (implemented by @Coffee | Programmer)
Tweaks:
- Improved biped rig heuristics to filter out twist bones when there are other better bone candidates (based on report and sample models provided by @Turk)
Bugfixes:
- Fixed audio updates not running on overlay worlds (e.g. Userspace), causing certain behaviors to break or misbehave - Fixed volume sliders in Settings being affected by the whisper sphere activation - Fixed audio group volume filters not updating properly every frame -- This fixes whisper spheres not immediately lowering volume of Sound Effects, Multimedia and UI sounds (previously reported by Iforgotwhosorry ;_;) - Fixed "Bake Mesh" button on procedural meshes in the inspector not working (reported by @Aesc) - Fixed DefaultUserScale throwing exceptions when changed and currently inactive (found in a logs from @Toni Kat, @3x1t_5tyl3, @Cyro and reported by @Shifty | Quality Control Lead) - Fixed permission validations scheduled on disposed worlds throwing exceptions (found in a log from @Toni Kat) - Fixed "Separate parts of mesh unaffected by blendshapes" breaking the SimpleAwayIndicator by not adding the user reference assigner (reported by @runtime) - Fixed model import breaking when searching for external textures, when certain paths cannot be enumerated or when the search path is invalid
Pushing a high priority bugfix that prevents some worlds/items from being properly saved. Compatible with previous build, but I recommend updating immediatelly.
If you've saved your world recently and the changes didn't go through, you can recover them as long as you haven't cleared your cache. Check any recently saved worlds to see if they're missing any changes. If they are, do the following:
1) Locate the corresponding log file in the Steam installation for when you last saved the world 2) Search for the first occurence of "Exception in the save process!" following "Saving world: <name of your world>". Make sure to find the last one in the log for particular world. 3) Copy the path following "Dumping the raw save data to:" (including the .lz4bson extension) from the log 4) Switch to Neos and paste (e.g. Ctrl+V). This will load the last version of the world that failed to save. 5) Verify that it's the right version and save a copy of it. You can then use this copy to overwrite the proper version (overwrite worlds by clicking on an world orb while holding the world orb you want to overwrite with)
Tweaks:
- Merged Polish locale additions by @art0007i
Bugfixes:
- Fixed saving of a worlds/items breaking when there's an object asset file referenced in the session, that hasn't been gathered (discovered in log from @GearBell, @Nexulan | Community Manager, @Medra and @Shifty | Quality Control Lead ) - Fixed Undo Manager becoming persistent by default - Added extra diagnostic information when writing data into a CircularAudioBuffer (based on issue found in log from @GearBell)
Hello and welcome to another of our weekly updates!
This week we spent a lot of time on many quality of life improvements, featuring numerous tweaks, bugfixes and security improvements. We have added some nice new features as well, notably procedural meshes for rendering realtime audio waveforms and custom graphs.
Those will be useful for future optimization and debugging purposes as well, as we'll use them to display some performance metrics, but you can already start using them for your own purposes as well.
We have also started work on more optimizations, this time focusing on LogiX and using the opportunity to also implement mechanisms necessary for future features like collections. We're in process of reworking the MTC experience for new users as well.
Procedural RectMesh system & Generic Member support
To enable some of the new features, we added some new architectural building blocks to Neos. Two particularly notable ones are RectMeshSources and Generic members on components/workers.
RectMeshSource is a new type of procedural mesh, that’s typically constrained to a 2D plane (though technically it doesn’t need to be) and defined by a rectangle. It’s designed so it can be used both as a standalone mesh (using StandaloneRectMesh<M>) or within a UIX canvas (using RectMesh<M>). This allows better code reuse and reduces errors. With standalone mesh you need to provide the rect area explicitly, while within UIX it’s implicitly provided by the canvas RectTransform.
The second addition is a more technical one, allowing Components/Workers to have members that are pure generic arguments, which wasn’t previously supported by Neos’ IL postprocessing - code that generates highly efficient code for initializing and accessing sync members. This gives us some new flexibility to implement new features more elegantly.
Realtime Audio Waveform Mesh
Thanks to the architectural additions, we have added two new RectMeshSource procedural meshes. The first one is AudioSourceWaveformMesh, which takes in any audio source as an input (voice stream, sound effects, music) and generates a real time mesh of the shape of the waveform.
The mesh has a configurable number of points, width, color and buffer history (allowing it to show up to 1 second of the waveform). This new mesh can be used to create some cool audio visualizers, so we hope you’ll have lots of fun with it!
Tutorial by ProbablePrime on how to use the new audio waveform mesh
Procedural Line Graphs
Using the same underlying procedural generator we added another RectMeshSource, called LineGraphMesh. This is a more general procedural mesh, which allows rendering arbitrary line graphs, using a series of scalar values. It has similar configuration options to the mesh above, but supports arbitrary values.
Since the list of points is defined in an array, which is currently not directly accessible from LogiX or inspector, we have also added additional components to make it easier to use with common setups. To allow for efficient updates, it also has StartIndex property, which allows offsetting the input array. This can be used for history graphs, by simply updating a single value in the array and shifting the index, eliminating the need to constantly shift the entire contents of the array.
Using the ValueGraphRecorder you can simply point to any float value in the world and have it automatically graph over time. You can configure the capture time interval and automatic range scaling.
Great tutorial by ProbablePrime on how to use the new graphing functionality
The component can be used to explicitly write values to the graph as well using LogiX. In this case you might want to set the interval to infinity, so it never writes a new value on itself. It’s also recommended to disable the “Drive” option with this, so the state gets synced to others (for values automatically graphed over time this is not necessary if the value is already same for everyone).
We plan on using this ourselves to create improved performance debugging tools, which will help with further optimizations, but the possibilities should be pretty wide, allowing other educational or practical uses.
Metaverse Training Center work in progress
Over the past weeks, we’ve also been reworking the MTC (Metaverse Training Center) and building a new starter tutorial to help new players get started in Neos. We’re going to be using a simplified version of the tutorial for the time being, before other major features like physics and more of the UI gets reworked, so it’s easier to update.
We’ll have more news to share soon, but here are some screenshots of the new remodelled MTC, which has been improved based on the experience we gained over past year and based on the feedback from both new and existing users.
Optimizing LogiX (work in progress)
As part of the optimizations, we started working on redesigning internal parts of LogiX to significantly reduce overhead based on performance profiling and at the same time solve some long standing issues and introduce new capabilities.
One of the major general performance sinks with LogiX is currently change propagation. Any changes need to be propagated through the whole node setup forward to the nodes that care about them, even for nodes that update every single frame.
The new system will have a LogiX validation process that happens on any change to the node setup. During validation, the correctness of LogiX will be verified, preventing things like evaluation loops that cause crashes and information about change sources propagated and registered.
This way the propagation of every frame will be avoided and done directly from source nodes to the listeners, rather than having to go through all the nodes in-between. For nodes that change continually every frame this will be optimized even further, as the changes won’t need to be propagated at all, reducing overhead.
As another benefit, this system will be propagate other information about inputs as well - e.g. “localness” of values. This will allow us to add support for local only variables, while at the same time preventing accidental misuse by driving a shared state from them (there will be a mechanism to do this if really needed).
Currently this work is still in the design stage, but we’ll be likely implementing it over the next week, hopefully resulting in a good performance boost as well as unlocking path to other future features like collections.
#NeosFans on Twitter
We’ve seen a fun trend occurring on Twitter, where people grab onto a ceiling fan and spin about their virtual rooms in Neos! Funny enough, this has been a tried and true passtime of sorts since the early days of Neos, so it’s really fun for us to see this trend coming full-circle! Puns!
And here's a little throwback clip from beginning of 2019. Were these fans too ahead of the curve?
----------------------------------------
Anyway that's all for now! If you'd like to know more about other changes, updates, security fixes and other improvements, check out the #neos-updates channel on our official Discord or the patch notes on Steam.
And as usual thank you everyone for your support, especially our Patreon supporters and ICO investors, for keeping this project going and improving every day!
Another maintenance build, with a bunch of bugfixes for bug old and new! A few additions and tweaks as well, but mostly bugsquashing.
New Features:
- Added "WriteValue" impulse target to ValueGraphRecorder, which allows explicitly writing a value to the target graph, regardless of the time interval -- This can be invoked multiple times per frame -- You can set the UpdateInterval to infinity, so it never updates on itself and any values are written only by this means -- If you use this method, it's strongly recommended to uncheck "Drive", otherwise the graph will be local only - Added MinSpeed and MaxSpeed to RandomAudioClipPlayer (requested by @A Monsoon of Babies)
Tweaks:
- Doubled the fixed bandwidth for Steam Networking Sockets (based on request by @Cyro, please let me know if this causes more problems) - Merged Japanese locale fixes by @Aesc
Bugfixes:
- Permission system security bugfixes (based on reports by several users) - Implemented workaround for change in Patreon's API, where the reported amount of US cents is no longer necessarily US cents, resulting in the wrong amount of NCR and wrong tier being awarded to users using their own currency (e.g. GBP instead of USD) (based on reports by @Shifty | Quality Control Lead, @Raith and others) -- Anyone affected by this should now have correct tier and remainder of NCR minted, please contact us if there are any more discrepancies - Fixed exceptions during Neos initialization in the LoopbackAudioInputDriver (reported by @Shifty | Quality Control Lead) - Fixed active Neos Loopback audio input device causing the output audio to get volume normalized - Fixed SetGlobalTransformMatrix applying to the node slot, rather than the target one (reported by @Dante) - InteractiveCamera will now parent itself back to the world root, if it's within part of hierarchy that gets deactivated (e.g. camera anchor that gets disabled) (based on report by @Enverex and @jasonmo) - When switching interactive camera from camera anchor to smooth POV, it will now properly unparent itself from the anchor - Fixed item shelves accepting items with empty bounds, causing items that are visually too large or too far away to attach to them -- This fixes camera anchors attaching to tool shelves from long range (reported by @Rukio, sorry it took so long!) - Fixed incorrect matching of audio devices in CSCore, causing the default audio device to be determined incorrectly (based on report by @Lucaedr, @Kulza) - Fixed RandomObjectSpawner not respecting the passed spawn point (reported by @Epsilion) - Fixed AssetFrameSlot receiving other AssetFrameSlot's of the same type (reported by @sirkitree) - Fixed Local2Global matrix invalidation not propagating to local parts of hierarchy -- This fixes variety of strange bugs, particularly ones relating to anything to do with bounding boxes -- This includes AssetFrameSlots grabbing slots from long distances if they contain TextRenderer, particularly audio clip players (reported by @sirkitree)