1. Neos VR
  2. News

Neos VR News

2020.11.27.104 - Nameplate, voice config, reflection probe tweaks and bugfixes

Sorry for smaller build again focusing on bHaptics mostly, but here are some important additions, tweaks and bugfixes. The new nameplate hiding mechanism should behave better now, there are some important bugfixes for the audio system (should fix many cases of background exceptions with playback and voice, causing audio stutters and performance degradations), physics world crash bugfixes, unityfing the voice audio configuration to the new system and some bugfixes for the ReflectionProbes too and more.

[h2]New Features:[/h2]
- AvatarAudioOutputManager now uses the same configuration structure as AvatarAudioConfiguration for Whisper, Normal, Shout and Broadcast, exposing every property for each of the modes
-- This unifies and expands the configuration options, allowing you to adjust/drive your default MinScale and other properties for all modes
-- The old properties are now deprecated, but will be automatically transfered on load
-- Note that Normal, Shout and Broadcast config can be overriden by presence of AvatarAudioConfiguration

[h2]Tweaks:[/h2]
- When nameplate visibility is set to Non-Contacts only, the own nameplate will now be hidden as well (based on suggestion by @Enverex, @Tatsu Kimiero, @Shifty | Quality Control Lead and others)
- Added "AlwaysShowToContacts" to AvatarNameplateVisibilityDriver, which will show the nameplate to contacts even when Non-Contact only mode is on
-- This can be used to show certain parts of the badge that are desirable to be visible even if the name itself is not, like heartrate monitors and similar (hiding all badges will still hide it)
- AvatarNameplateVisibilityDriver now supports explicit local hiding of specific badge by assigning False to the driven visibility field
-- This is mainly to fix certain items that temporary hide badges (e.g. when capturing a screenshot of the user)
-- The badge is hidden only for user who has assigned the value, it will still be visible to everyone else
- Added Key enum type to the EnumToInt and IntToEnum default templates
- Fixed ability to bypass SimpleAvatarProtection using ExternalSlotSaver (reported by @rhenium_75)
- Permission system security improvements (based on feedback by @Cyro)

- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]
- Merged Korean locale additions by @MirPASEC
- Merged Japanese, Esperanto and Chinese locale additions and tweaks by @Melnus

[h2]Bugfixes:[/h2]
- Reworked the audio buffer resampling algorithm to fix incorrect sample count calculations in certain scenarios as well as errors introduced by floating point imprecision (based on log and report by @Turk)
-- This fixes various cases of exceptions being thrown in the background when playing/processing audio (both audio clips and realtime voice for example), causing performance degradation and audio glitchiness
- Added type checks to ValueNode, to avoid instantiating versions with wrong type argument (based on report by @Cyro)
- Fixed AvatarAudioOutputManager not linking the properties properly in some cases
- Fixed exceptions when loading certain avatars with VRIKAvatar, when those avatars contain slots with null names (found in a log from @Turk)
- Fixed AvatarNameplateVisibilityDriver not updating visibility in some cases (e.g. on spawn as reported by @Enverex)
- Fixed BoxGizmo not being sized properly with the developer tooltip when it's in the size-only mode and not at the world's origin
-- This fixes the range of Reflection Probes misbehaving when resized with the dev tool (reported by @Cyro and @Shifty | Quality Control Lead)
- Added sanitization of NaN values for collider primitives, resulting in world crashes (based on report and sample world by @Shadow Panther [RU/EN, UTC+3])

2020.11.25.1148 - Official way to hide nameplates, ReflectionProbe improvements

Sorry for smaller build, I'm now focusing on the bHaptics integration and building an abstraction layer for it, but I don't want these updates to be held up by that.

There are some more improvements for ReflectionProbes, particularly visualization of their ranges which would be often incorrect.

There's now also official way to hide name and icon badges! You can hide all of them or only hide ones of your Contacts. There's a new component, so if you have a custom nameplate on your avatar, please set it up with it to ensure it works with this system. The hiding logic can be easily extended too, let me know what you think!

A bunch of bugfixes and tweaks as well!

[h2]New Features:[/h2]
- Added Equipped and Dequipped event impulses to RawDataTooltipEvents (requested by @Hayden (PolyLogiX Studio))
- Added DistanceSpace, MinScale and MaxScale inputs to PlayOneShot node (requested by @Hayden (PolyLogiX Studio))
- Added CopyGlobalScale (under Transform/Drivers) which copies global scale of another slot
-- This has optional NonUniform property, which will use the non-uniform global scale. I STRONGLY discourage from using this. If you want to use this, make sure you know what you're doing, otherwise you'll get weird sideeffects and behaviors.
- ReflectionProbe now has a custom range gizmo, which shows correct area of effect (unaffected by the transform rotation and scale) and also allows the range to be visually adjusted using the developer tooltip
-- This fixes the bounds being incorrect if there's any scaling or rotation applied (repoted by @Enverex)
-- Note that this gizmo is only enabled when "ShowDebugVisuals" in enabled
- Added AvatarNameplateVisibilityDriver (under Users/Common Avatar System/Nameplate) which drives visibility of nameplate (name badge and icon badges) based on user settings
-- If you're using a custom name badge on your avatar, please setup it with this component to ensure consistent behavior
-- It can be placed on the same object that it disables, it doesn't require to be active in the hierarchy to re-enable
-- Currently it drives visibility based on user's local setting. Let me know if there's need for a global per-world setting override and I'll add it
- Added Nameplate Visibility Facet (will be auto-injected to existing dashes) which allows toggling local nameplate visibility:
-- All (shows all nameplates)
-- Non-Contacts (hides nameplates of your contacts)
-- Hide (hides all nameplates)

[h2]Tweaks:[/h2]
- Flipped the sideness of the ReflectionProbe preview
- HiddenLayer now respects the Enabled property (based on report by @Turk)
- Discord bot now ignores GitHub edit events (based on feedback by @Turk)
- Reorganized AvatarBadgeManager, AvatarLiveIndicator and AvatarNameTagAssigner under Users/Common Avatar System/Nameplate

- Merged Czech locale additions by @rampa_3 (UTC +1, DST UTC +2)
- Merged Polish locale additions by @art0007i

[h2]Bugfixes:[/h2]
- Fixed duplicating of multiple components breaking their internal references (based on report by @Alex from Alaska, @Turk and @Shifty | Quality Control Lead)
- Fixed "Smooth Slerp" node using incorrect "Smooth Lerp" name from its overloads (reported by @Hayden (PolyLogiX Studio))

2020.11.23.1311 - Reflection Probe improvements, user voice configuration, more

A bunch of additions, tweaks and fixes for Reflection Probes! You can now bake them using LogiX, allowing you to make automated setups! Any developer interfaces and non-persistent objects are now also excluded and the bug where sometimes the excluded items appear should be gone.

I've also added a system for configuring user's voice in your worlds, you can now configure every property (volume, rolloff, distances and more) and even drive them with LogiX, allowing to create worlds with customized audio setups. The user voice now also scales with their size, so you should be able to hear large users easier now. All fully configurable of course.

A bunch of other tweaks and bugfixes as well, for example when recording a voice message your laser won't get interrupted by things in the world anymore and all other sounds will get attenuated.

[h2]New Features:[/h2]
- Reflection Probes can now be individually baked from LogiX, using BakeReflectionProbe node (under Rendering)
-- It's STRONGLY recommended to wait for OnBakeComplete before baking another probe when baking multiple ones, as it's relatively a heavy process
-- The probe must be a Baked type, Realtime reflection probes can't be baked

- Added BakeReflectionProbes LogiX node, which allows mass-baking of the probes
-- Functionality and parameters are same as in the Reflection Probe Wizard
-- You will receive impulse before each probe bakes (before the delay) and after it has baked
-- It provides indication on which probe is currently being baked

- Added DistanceSpace for AudioOutput, which allows switching the space of the distance metrics to Local from Global (based on request by @Shifty | Quality Control Lead, @H3BO3 and others)
-- This will make the MinDistance and MaxDistance scale with the global scale of the Slot it's on
-- You can use new MinScale and MaxScale fields to clamp the global scale, so the distances will stop scaling at certain point
- Added AvatarAudioConfiguration component (under Users/Common Avatar System/Audio) which provides voice mode configuration if placed within user's hierarchy (based on request by @ChrisWarner103 (DelVR))
-- This allows configuring all audio settings (range, falloff, spatialization...) for Normal, Shout and Broadcast. Mute and Whisper cannot be overriden.
-- All properties are driven locally. By driving the properties on this component you can divergently drive the voice properties of the user
-- Ensure there's only one instance on the avatar, when multiple instances are present, behavior will be undefined.
-- When not present, the default/per-avatar settings are used instead
-- Note that you cannot add this dynamically to the user, it needs to be present before avatar is equipped

- Added AutoInject reference to CommonAvatarBuilder, which will duplicate target slot and place it on each spawned user
-- It's placed right at the root of the user, at the same level as avatar and body nodes
-- You can use this to place AvatarAudioConfiguration on the users to create custom audio configuration in your worlds, as well as any custom LogiX (e.g. for game worlds)
- Added UserSpawn event node (requested by @ChrisWarner103 (DelVR), @Turk, @Rukio, @Shadow Panther [RU/EN, UTC+3] and others)
-- This is based on a new internal UserSpawn event, which fires anytime user should be spawned - when then initially join and anytime they get deleted and respawned again.
-- You don't need to use OnUserJoin at all when using this node, unless you speciflcally want to be informed when the user joins the session

[h2]Tweaks:[/h2]
- User's voice range is now scaled with the size of the user, making it easier to hear them when they're large
-- By default the minimum scale is clamped to 1 (you might see a different value on the AudioOutput as it's compensated by the avatar's scale) so small users are still audible
- When baking reflection probes, any developer interfaces (e.g. Inspectors) as well as any Non-Persistent objects are now excluded (based on feedback from @Kulza)
- When recording a voice message, all sounds (including other voices) are attenuated (based on suggestion by @Hayden (PolyLogiX Studio))
-When recording a voice message, the userspace laser will take priority, fixing cases where it would get interrupted by another user walking in front of you or a piece of environment (based on report by @Veer | Chief Moderation Officer)
- Recategorized avatar audio related components under Users/Common Avatar System/Audio
- Added a mechanism to correct locale keys in all locales and applied corrections to all current locales (based on report by @rampa_3 (UTC +1, DST UTC +2))

- Merged Japanese locale additions by @Aesc
- Merged Korean locale additions by @MirPASEC
- Merged Esperanto and Chinese locale additions by @Melnus
- Merged Russian locale additions by @Shadow Panther [RU/EN, UTC+3]

[h2]Bugfixes:[/h2]
- Baking Reflection Probes now render in one go to prevent certain faces from showing culled objects (e.g. Users or Gizmos appearing in the baked result, as reported by @Shifty | Quality Control Lead)
- Added guard when rendering thumbnail for saved items, to avoid any errors in this process from preventing the save from completing (item will save without a thumbnail, but it will save)
- Fixed invalid indexing operations for SyncTypeList, causing exceptions when trying to find particular elements
- Fixed incorrect Pico Neo 2 headset controller integration when using SteamVR streaming, Neos should now be completely usable with this headset (requested by @Kagifa)

DelVR released - D&D in Neos; Reflection Probes, Cubemaps, texture compression

Hello everyone and welcome to another weekly update!

This week we have very exciting additions that will help significantly increase the visual fidelity of worlds in Neos and enable some new cool visual effects, thanks to significantly improved texture compression options, full cubemap support and most importantly Reflection Probes, which can be created and baked completely in-game!

A long time community project by the DelVR team has also released an amazing Dungeons and Dragons world to the public, with beautiful environments and lots of interactive tools for D&D gameplay. This is probably the most complex project in Neos to date and it’s definitely worth checking it out.





[h2]DelVR - Dungeons and Dragons in NeosVR[/h2]
This week we have a big community highlight. The DelVR team (ChrisWarner and ToMo) has been working hard for about a year on creating a world and set of tools for playing Dungeons and Dragons inside of NeosVR and as of this Friday have released it to the public.

Originally posted by description
Embody your character, see the world from their eyes as you explore environments created intuitively and seamlessly by your gamemaster. Don't just play tabletop, Live in it.

Currently, DelVR seeks to bring the D&D ( Dungeons & Dragons) tabletop board game experience into virtual reality, but these tools enable a much broader scope of creativity, with gamemasters and players alike being able to import their own custom content with ease through the Neos VR platform.


We’re very impressed with the scope, depth and level of polish of this project. It features a beautiful medieval style tavern. Inside you’ll find plenty of nice areas to hang around and explore and importantly the game room.

[previewyoutube][/previewyoutube]

The world is filled with tools to enhance the D&D gameplay, from character sheets and stats to a board with a tile system, which allows you to easily set up the environment for the gameplay. Different environment pieces will automatically snap to the grid, making the building the scenery easy and quick.

The creators of DelVR have given us an in depth showcase on our last Friday stream, if you missed it, you can watch it here:
[previewyoutube][/previewyoutube]

Whether or not you’re a D&D player, this world is definitely worth checking out. You can find it in the published worlds or visit their official headless session. If you’re interested in learning more, you can visit their official Discord and YouTube channel. You can also support them on their Patreon.

We’re very honored to have this amazing project on our platform and hope it will bring a lot of joy to many players! Big thank you from all of us to the DelVR team for all their hard work on this!

[h2]200 Neos VR tutorials by Probable Prime[/h2]
One more community highlight that we shouldn't omit is more of a compound one. ProbablePrime has been creating amazing Neos VR tutorials for a long while now and recently he has uploaded his 200th tutorial.

This is very impressive amount of tutorials, covering all kinds of topics from making avatars, using different tools, components and axis aligners. If you'd like to check them out, you can watch all 200 on the playlist on his YouTube channel. If you'd like to learn more about Neos definitely give them a watch and big thank you to ProbablePrime for his continued effort to educate the Neos community!

[h2]AMD Compressonator SDK integration[/h2]
The first step towards implementing reflection probes was expanding support for different texture compression options that Neos has. Originally Neos only supported BC1 (DXT1) and BC3 (DXT5) crunch compressed formats. These cover the majority of textures, but since reflection probes typically use HDR textures, those were insufficient.

To solve this, we integrated the AMD Compressonator SDK into Neos’ codebase, giving Neos the ability to block-compress each texture into a much wider variety of formats. This includes BC6H, which supports HDR textures.

However, the benefits of this integration go beyond reflection probes. For BC1 and BC3 formats you can now disable the crunch compression, which will make Neos use LZMA instead. This can produce bigger files/downloads (VRAM usage remains the same), but will help remove some blocking artifacts introduced by the crunch compression.

For visually complex textures you can also now use the more advanced BC7 compression. It takes significantly more time to compress (although for textures already uploaded to Neos’ cloud this happens in the cloud too, not bogging down your own PC), but produces much higher quality results with fewer artifacts.

https://www.youtube.com/watch?v=mKYkGJN7EYE

If you only need a single color channel you can also use BC4 format. Internally Neos supports a much wider variety of formats as well, including a much more modern and flexible ASTC, but this isn’t currently supported with DirectX 11 and will have to remain a far future update, once we switch to Vulkan or DirectX 12.

All of these new formats automatically plug into Neos’ asset variant system. Neos will request the best matching versions, load textures by mipmap levels and automatically use fallbacks when the requested version isn’t currently available. For example, requesting 100 % quality of BC7 will load a 60 % quality version if it’s the only one available, while scheduling the computation of the higher quality version on the cloud.

The inspector will now show detailed information about which variant is actually loaded as well, giving you better feedback about the system and state of your assets.

[h2]Full cubemap support with time-sliced GPU uploads[/h2]
Another key component towards reflection probe support was a full featured support for cubemaps. Previously Neos had very rudimentary support, with on way to import or create cubemaps in-game.

We have significantly overhauled and generalized Neos’ texture and asset variant system to reuse the same code used for traditional 2D textures for any texture type, including Cubemap textures.

As a result, the asset variant system now fully supports Cubemaps, which includes computing metadata (this is used to select the right block compression format at runtime) and using block compression to reduce their VRAM footprint.

On Neos’ side Cubemaps are now natively uploaded to the GPU over the DirectX 11 (Windows) or OpenGL (Linux, Android) API’s, with time-slicing and progressive mip-map loading. This way you’ll see the low resolution version of cubemap as soon as it’s downloaded, while the higher resolution versions are still downloading and decompressing.

The timeslicing also reduces hitches while loading those textures, as the operation is split over several frames, rather than stalling the rendering until it’s completed.

https://www.youtube.com/watch?v=5wNldGkSmsA

In-game, we have added a new Cubemap Creator tool, in which you can simply drop 6 individual faces of the cubemap as standard 2D textures and create a cubemap out of them. This way you can easily create cubemap based skyboxes (the Projection360 material now supports both cubemaps and 2D equirectangular inputs), but also cookies for point lights.

Example of point light cookies used to project star maps into the world.

The cubemap textures themselves also now support typical texture options like filtering and selecting the compression formats.

[h2]Reflection Probe support[/h2]
Thanks to all these additions, we could properly implement Reflection Probes into Neos, which are now available as of the latest release. Each probe provides reflections for all materials within its volume, ensuring that the lighting more closely matches the surroundings. This can drastically improve visual quality of the scene.

Neos supports both realtime and baked reflection probes. You can simply create a new reflection probe and bake them in-game at any time. The probe will automatically exclude all players, gizmos and other probe visuals when baking. The result of the bake is simply a cubemap, which the probe then self-assigns.

https://www.youtube.com/watch?v=HV4g2o9ssLc

Since this cubemap is asset like any other, it comes with all the typical Neos flexibility - you can use an asset multiplexer to switch between different reflections for example or even assign custom made ones to produce interesting visual effects.

Typical reflection probe with 128x128 resolution and HDR enabled will use 96 kB of VRAM thanks to the BC6H compression, compared to 1 MB for raw uncompressed data (RGBA Half), allowing you to place dozens or even hundreds of them in the scene. This is why integrating the block compression was so crucial.

To make it easier to work with lots of reflection probes in a world, you can also use the new Reflection Probe Wizard. Using this you can mass bake all probes in the world or only part of the hierarchy. You can filter them out by tag or disabled state as well.

The baking wizard also has the option to teleport you to the probe’s location right before it bakes (with optional delay), which can be useful for worlds with culling systems.

https://www.youtube.com/watch?v=wtO21w7aS7I

The realtime reflection probes will render everything, providing very high fidelity realtime reflections, but are also using a significant amount of system resources, so should be used only in specific situations. Consider them like adding 6 extra cameras to your scene, each with the resolution of the probe.

We hope that the reflection probes will help you create more beautiful looking worlds and help increase their graphical fidelity. We’re already seeing some cool uses of them and can’t wait to see more!

---------------------------

Anyway this is everything for this week so far. As usual you can find more details about all the smaller additions, tweaks and bug fixes check out the patch notes on Steam or the #neos-updates on our official Discord. Thanks to everyone for your support as well, without it we wouldn’t be able to bring you all of these new features and keep growing into the future!

2020.11.22.1118 - Added Reflection Probes, including in-game baking support

Reflection probes are finally here! Neos now has full support for reflection probes, including in-game baking! Time to make your worlds look prettier and shinier. Realtime Reflection probes are supported as well, but they're very heavy, please be very mindful when using those.

Generally baked reflection probes are quite cheap, especially at original resolution of 128x128 (rarely you'd need more, unless you have mirror-like surfaces), which take only 96 kB of VRAM for each HDR probe instead of 1 MB, thanks to the recently implemented BC6H compression.

There is also a wizard, which makes them easier to bake in mass. You can filter them by tag, part of hierarchy or enabled/disabled status. The wizard can teleport you to each probe as it bakes too in case you have culling systems setup in your world.

A few other tweaks and additions, notably Valve has released new Steam Audio version, hopefully that fixes some of the audio spatialization issues!

[h2]New Features:[/h2]
- Added ReflectionProbe (under Rendering), which provides baked or realtime reflections to the scene and significantly improve visual fidelity (requested by @Toxic_Cookie, @Groxxy the Quote Warden, @Enverex, @Aegis_Wolf | Art Director and many others)
-- You can easily create one by going to Create New -> Object -> Reflection Probe, which will make a new probe and bake it immediately
-- You can (re)bake any probe at any time using the "Bake Reflections" button in the inspector
--- Baking will automatically exclude all users, gizmos, debug visuals and child objects of all probes from baked result
--- Baking process generates a new Cubemap asset, which is placed in the world's "Assets" Slot and will be saved with the world. You can use the cubemap asset as any other cubemap, there's nothing that ties it to the specific probe that baked it (other than the probe's position and configuration which is used for the baking process)
--- Asset variant system will automatically compress the baked cubemap. For HDR this will use the BC6H, significantly reducing VRAM usage
-- You can assign arbitrary cubemap to baked probe to create variety of effects or switch between versions (e.g. using AssetMultiplexer)
-- Area of effect of each probe is determined by the BoxSize. The bounding box of reflection probe is equivalent to this size
-- You can preview baked reflection by enabling the "ShowDebugVisuals", this is nonpersistent
-- Note that Realtime reflection probes are very expensive, use them VERY sparingly
- Added Reflection Probes Wizard (Create New -> Editor) which allows working with all probes in the world
-- You can filter probes by part of hierachy, tag and disabled status
-- If you have a culling system, you can use "Teleport me to each probe" option, so you get teleported to the probe as it gets baked (Noclip/Fly is recommended)
-- Using this you can mass bake multiple probes with a single button press
-- You can also show/hide the debug visuals for all the probes

[h2]Tweaks:[/h2]
- Upgraded to Steam Audio beta 19 (from beta 18)
- Default filtering mode for Cubemaps is now Trillinear (this is crucial for reflection probes to work well)
- Optimized Selective/Exclude renders to avoid marking same parts of hierachy as hidden multiple times if there are overlaps
- Light Sources Wizard is now localizable

- Merged Japanese locale additions by @Aesc
- Merged Korean locale additions by @MirPASEC
- Merged Polish locale additions by @art0007i
- Merged Japanese, Esperanto and Chinese locale additions by @Melnus

[h2]Bugfixes:[/h2]
- OnStart event node won't fire anymore if it's already destroyed (this can potentially fix a bug reported by @H3BO3)
- Fixed moderator badge being 2048x2048 instead of standard 128x128 (reported by @Groxxy the Quote Warden)