1. Neos VR
  2. News

Neos VR News

2020.12.2.583 - HapticVolumes VR controller support, connection reliability fix

The new haptic framework now supports regular VR controllers as well! You can use the HapticVolumes to trigger haptics on user's controllers and to experiment with how the system works without needing a haptic suit. I've added a quick setting to disable the haptics as well in case you don't like that kind of feedback, more fine-grained control will come in the future.

The bHaptics integration driver has received some important additions and bugfixes too, you can now use Pain, Temperature and Vibration sensations too, it will interpret them into different vibrations (I tried to use something that made most sense, but might change/tweak over time). In the future when there's hardware that can actually simulate something closer it'll be able to use this information automatically, so I encourage you to use the right type of sensation where applicable!

This build also has a bunch of important usability tweaks and bugfixes. Importantly connecting to users and headless servers should be more reliable now when custom session ID is used or when the connection need to fall back on the Relay. Let me know if you still encounter some trouble!

[h2]New Features:[/h2]
- bHaptics integration driver now supports the Pain, Temperature and Vibration sensations instead of just Force
-- Each one has a unique function to make them somewhat distinct (these are subject to potential change), but only the most intense one at given moment will be used
-- Note that temperature is interpreted as difference from "ambient" in Celsius/Kelvin (e.g. -20 will be understood as -20° colder than ambient)
- Haptic Volumes are now integrated with SteamVR and Oculus controllers as well, supporting all sensations
-- Force and Vibration will map most directly, Pain and Temperature have a simulated sensation since the controllers only support vibrations
- Added "Haptic Feedback" setting, which allows to disable haptic feedback from Haptic Volumes (any kind, controllers and bHaptics vest)
-- More detailed settings will come in the future (per person, environmental, UI and such)
- Added ControllerHapticPointMapper, which will link up a controller haptic point
-- You can use this on your avatar if you want to replace the default mapping, simply set the Priorty above 0 so it will override the default one

[h2]Tweaks:[/h2]
- When muted, the voice mode facet allows to simply select another voice mode to disable the mute, rather than having to click the mute button again, reducing some user confusion (based on feedback by @Coffee | Programmer and others)
-- The mute button can still be simply clicked agian to restore the previous voice mode
- Improved security of NAT punchthrough system
- SessionOrbsController will now hide all session orbs while the Welcome Guide is active, to prevent new users accidentally joining worlds (based on report by @Shifty | Quality Control Lead)
- Minted NCR amount will now equal to the actual dollar value of the pledge even if it doesn't match a perk, but only if the pledge is made in USD. Other currencies will match the claimed perk
- Tweaked the intensity of Oculus Touch haptic feedback with the native driver

- Merged Polish locale updates by @art0007i
- Merged Russian locale updates by @Shadow Panther [RU/EN, UTC+3]
- Merged British English locale additions by @CyberZott and atomicwave
- Tweaked autosave interval label to be more consistent (suggested by @yellowcrash10)

[h2]Bugfixes:[/h2]
- Fixed NAT punchthrough not working when a custom session ID is used and the world restarts before the old session information expires (based on a report by @Enverex)
- Added NAT connection retry logic to the relay server, which should fix cases where the connection fails to establish when falling back on the relay (reported by @Aegis_Wolf | Art Director and @Shifty | Quality Control Lead)
- Fixed exceptions in the cloud backend when asset variant worker requests a job and there isn't one
- Fixed incorrect condition when collecting ReflectionProbes causing inactive reflection probes to be processed even when not enabled (reported by @Zyzyl)
- Fixed ReflectionProbes on inactive parts of the hierarchy failing to bake (reported by @Zyzyl)
- Fixed Light Source Wizard title randomly switching between locales when mutliple users are present (reported by @Raith)
- Fixed bHaptics integration driver degrading in performance over time and causing the haptics to interminently stop
- Fixed in-game Neos bot not processing commands with a single quote as an argument or missing end quote
- Fixed Patreon update system breaking on accounts that were previously awarded extra storage (e.g. through MMC)
- Fixed Patreon pledges that are higher than the perk they claimed getting an incorrect reward that's equal to the extra amount (e.g. $25 pledge would first award $24 reward, then $1 one, as reported by @June)
-- If your account was affected by this, contact me and I'll correct the info so it gets the right rewards
-- Awarded NCR amounts were unaffected

2020.12.1.501 - Small patch, fixing race condition and potential misbehavior

Just a tiny patch, fixing some issues. Compatible with current build, don't need to rush to update, but you might get some misbehaviors and bloated logs otherwise.

[h2]Tweaks:[/h2]
- Merged Japanese, Esperanto and Chinese locale tweaks by @Melnus

[h2]Bugfixes:[/h2]
- Fixed some changes being processes on background threads, causing race conditions and potential data corruption, resulting in misbehavior and potential lock contention
-- This also fixes log-spam due to errors caused by this as reported by @3x1t_5tyl3, @H3BO3 and @Alex from Alaska
- Added extra diagnostic information for exceptions when reading audio data (based on information found in log from @Alex from Alaska)

Official bHaptics integration, Haptic Feedback Framework, new team member

Welcome to another weekly update!

This week we have added official support for the bHaptics hardware to Neos, featuring a brand new haptics framework. This system is designed to allow you to easily enrich your Neos content with different types of haptics feedback and have it work across variety of different devices.

This week has been just as exciting and creative as the last! For community highlights we have cats, singing, and pots!



[h2]Welcome Ryuvi to the team[/h2]
As many of you probably already noticed, we had another community member join our team! Say hello to Ryuvi, our new technical artist! Thanks to his help with the new MTC 2.0 and his excellent MMC entry, we have decided to fully onboard him on the team to work with Aegis and RueShejn on graphical design and content creation.



[h2]Haptic Volumes and Filters[/h2]

[previewyoutube][/previewyoutube]

At the core of the new support for haptics is a new component called HapticsVolume. You can attach this component to any collider, which will turn that collider into a source of haptic feedback. Each haptic volume can provide a specific type of sensation, like force, temperature, pain and so on, depending on what the hardware supports. Currently only force is supported.

While you can modulate the intensity freely using LogiX as any other system in Neos, you can also utilize a set of Haptic Filters for a more fine-grained control that’s not tied to the game’s update loop.

For example the intensity can be modulated based on the time of initial impact, either for individual haptic point or global volume impact. This allows you to model certain things like impact forces (e.g. when a user gets shot or an explosion happens) by simply attaching haptic volume on the user alongside other effects like particles, blood or forcefield, giving the user a strong initial jolt and potentially low lingering force.

Similarly you can attach haptic volumes to weapons or environmental pieces. Intensity can be modulated based on relative position, noise and other properties. For example you could cover a virtual hottub with a box collider and use the simplex noise to simulate the turbulence of water. All of these fine-grained filters are updated off the main thread at a fixed rate, which should help ensure enough precision to create different effects.

Long term we plan to make the fine-grained control over the modulation fully programmable with LogiX, but that requires certain extensions to the system to be done first.

[h2]Haptic Point Samplers[/h2]
The other part of the equation for the haptic subsystem are haptic samplers. These essentially probe the environment for the haptic volumes and sample the intensity for different sensations and relay them to different haptic hardware for interpretation.

Each haptic device (currently specifically bHaptic Vest, forearm sleeves and face cover) is then abstracted into a set of points with a body mapping parametrization. This parametrization is then taken by point mappers on the avatar, which create temporary haptic point samplers based on the hardware you have present on your system.

Currently there are 3 parameterization types - torso, head and arms, but more will come in the future. Both new and existing avatars are automatically initialized with those mappers with estimated values. You can adjust them so they fit your avatar and its body shape better.

The torso points are automatically mapped to the nearest bone, making the set of them follow the shape of your spine, rather than staying rigidly flat. When combined with full body tracking, this should provide a good degree of realism.

The benefit of this system is that once calibrated, the avatars will work with different haptic hardware and different combinations, automatically picking up and mapping the available points. All you need to do is specify the dimensions of the avatar's head, torso, arms and other body parts and the system will do the rest, future-proofing the whole system.

[h2]bHaptics Integration & Avatar haptics[/h2]
Thanks to the two subsystems above, we were able to integrate the bHaptics hardware natively with Neos thanks to a devkit kindly provided by their developer relations. If you have the Tactot vest, Tactile face cushion or Tactosy for arms, Neos will automatically pick them up and supply them with haptic sources from any environment or items that were setup with haptic volumes.

For avatars the support is fully automatic out of the box assuming they’re a full body (IK) avatar. The avatar’s body colliders are automatically utilized and locally injected with haptic volumes. By default the hands and head use 5 % intensity, while the rest of the body does 1 %. This will be likely changed and tweaked as we go, you can play with it yourself by modifying the properties on the HapticsManager at your root in the scene.

You can create custom avatar haptics by attaching AvatarHapticSourceManager anywhere on your avatar and providing it with a list of the active states of the HapticVolumes placed on your avatar. Thanks to this system you will automatically feel other users, not just their hands, but whole bodies as well.

[h2]Future Proofing the haptics system[/h2]
A big part of the integration was making the haptics system future proof enough, so content created today can still work with new haptic devices that come in the future without changes and to provide abstractions so creators don’t need to worry about the implementation specifics.

As new hardware comes in, we’d like to incorporate more sensations, like simulating temperature, pressure and so on, once hardware for those becomes accessible. We hope that exposing the haptics this way will also make it easier for everyone to start experimenting and prototyping with those systems.

What we’ll be doing soon is adapting the controller haptics to this system as well. That way you can utilize this system even if you don’t have any haptic suit and more easily create environmental effects to enhance your creations.

[h2]Community Highlights[/h2]

[h3]Cats in Neos[/h3]
Cats have invaded Neos! They come in many forms! from a BreadCat attached to a tracker brought to you by Mentalish! To a Kitty Kat Matching Band parading through our worlds thanks to Enverex! On top of all this catiness we had a Catssss Creator Jam host by Medra where many a feline foe or friend was created that day!



[previewyoutube][/previewyoutube]

[h3]O Mio Babbino Caro opera performance by Neivi[/h3]
This week we also had a VR Opera Performance made by the Wonderfuil Neivi! Here she uses a HTC Vive Lip Tracker to express her performance with some wonderment and presentation!

[previewyoutube][/previewyoutube]

[h3]Pot maker by Lewis[/h3]
Also our Lead Audio Designer made a fun new Toy this week! Find out all about in his video show casing it’s wonderful uses, ever just wana make a happy little pot?

[previewyoutube][/previewyoutube]

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

Anyway this is everything for highlights of this week! If you'd like to know more, check out our official Discord for #neos-updates to see all the smaller additions, tweaks and bugfixes as well as many other amazing creations by our community. See you at the next one!



2020.12.1.27 - Security bugfixes, Haptic system tweaks and fixes

A smaller, but important patch. Fixing some security exploits in the permission system. It's a pretty general fix, which should fix cases where some changes were not validated that were supposed to be, so this should harden the system a fair bit.

Also some tweaks and bugfixes for the Haptic Feedback system!

[h2]Tweaks:[/h2]
- HapticVolumes injected to other avatars are now setup with radial distance filter, so they will get gradually stronger as they get closer to the haptic point
-- The radius ratios (relative to the collider size) and power are tweakable on HapticManager for experimentation. Note that you need to rebuild all injected colliders after change
- Added extra logging information for permission system to help diagnose future problems
- Added blueberry
-- Note that blueberries grow under very different conditions from oranges
-- In extremely rare conditions, both can ripen at exactly the same time of the year
- Tweaked the default intensities of HapticVolumes injected to other avatars to compensate for the radial distance and certain interactions being too weak

- Merged German locale additions by @Ardes
- Merged Spanish locale additions by @Ruzert

[h2]Bugfixes:[/h2]
- Fixed Permission system not running validations in some cases, particularly when objects was marked for validation, but no validations were setup yet
-- This fixes exploit that allowed modified clients to kick/ban users from the session without having the permission to do so (reported by @H3BO3, @3x1t_5tyl3, @Komdog, Wolfie#1199 and @ItsDusty)
-- Also as a note, please avoid renaming the default session roles unless absolutely necessary. This has caused unecessary delays with diagnosis of this problem problem
- Addiitional security improvements for hijacking user's hand
- Fixed HapticPointSampler debug visual not being properly destroyed when disabled
- Fixed Tween not completing if it's disabled mid-transition (this fixes tiny badges reported by @Shifty | Quality Control Lead, @Tatsu Kimiero, @Ryuvi | Technical Artist and others)
- Fixed haptics breaking when an invalid Sensation class is used (reported by @jeana)
- Fixed haptic feedback not stopping when the HapticVolume collider is deleted while the user is intersecting with it (reported by @jeana)
- Fixed haptic feedback momentarily spiking to 100 % intensity when the HapticVolume is deleted
- Fixed invalid MinScale assignment when equipping an avatar producing a warning in the logs (reported by @Enverex)

2020.11.29.1371 - Official bHaptics support, HapticVolumes & HapticPointSamplers

Official bHaptics support is here, sorry it took so long! Major chunk of the work was implementing a generalized haptics system for Neos, which is build around the concept of Haptic Volumes and Haptic Samplers. Haptic Volumes are objects you can place in your environment or on your items to serve as a source of different haptic sensations.

Haptic Samplers are then placed on your avatar based on what hardware you have available (currently bHaptic Vest, Face cover and Forearm sleeves are supported) and map the haptics to those devices. This way we ensure long term support for variety of devices as they come, I'd like to soon adapt the controller haptics to this system as well (maybe in next build or two).

The haptic volumes can also have a bunch of different filters which modulate the intensity based on distance, impact time or some functions like noise or sine. You can also fully script those and drive them from LogiX.

All full body avatars are automatically setup with haptic parametrization and locally injected with haptic volume sources, so you can feel them if you have the right hardware. This is just initial release, so tweaks and additions are to come.

A few other tweaks, additions and bugfixes as well.

[h2]New Features:[/h2]
- Implemented a general framework for haptic feedback devices, built on top of physics system and colliders:

- Added HapticPointSampler, which samples all haptic sources within its radius and relays them to a particular corresponding point on a haptic device

- Added HapticPointMappers (currently Head, Torso and Arm), which automatically creates and binds set of HapticPointSampler on an avatar based on detected haptic feedback hardware
-- All full body avatars (both old and new) are automatically initialized with those components. You can adjust the parametrization afterwards if it's mis-aligned and save with the avatar
-- Parametrization is defined in terms of general shape/size/hierarchy, positioning of individual points on body depends on the haptic hardware
-- HeadHapticPointMapper is parametrized using head size and offset. Each point is parametrized by its pitch and yaw angle relative to the center of the head, with nose being the origin
-- TorsoHapticPointMapper is parametrized using normalized vertical position along the spine (0...1 bottom to top), horizontal position (-1...1 left to right) and side (front/back). Each point is mapped to nearest bone, so the samplers will move with the body (e.g. if you bend, the sampler points will move to match your body shape). You can adjust the front/back offsets and body width, as well as normalized range on the spine
-- ArmHapticPointMapper is parametrized by normalized position along the arm (0 start at shoulder, 0.5 elbow and 1 ending at wrist) and angular offset along the arm (with top of the hand being origin). You can adjust normalized range of the bone chain, directional vectors for proper orientation and radius
- Added HapticVolume which provides source of haptics in the environment
-- This needs to be attached on same slot as a Collider set to HapticTrigger type to work
-- You can define the type of sensation (currently only Force is interpreted, but will be expanded later on)
-- Haptic will activate for any HapticPointSampler that interests with this collider
-- Intensity can be driven with LogiX
-- You can also use a set of filters to modulate the intensity based on internal properties of the intersection (this is updated off the main thread at fixed rate and thus independent of the framerate). Simply attach one or more filters on the same slot as HapticVolume. Filters are multiplied together
-- Independent HapticVolumes are additive

- Added AxisDistanceHapticFilter, which modulates haptic intensity based on distance along an axis within the local space of the volume
- Added ImpactTimeHapticFilter, which modulates haptic intensity based on the elapsed time since the initial impact of the haptic point and haptic volume
-- This can be either impact time of the individual haptic point or global (any haptic point impacting)
- Added RadialDistanceHapticFilter, which modulates haptic intensity based on spatial distance from center of the haptic volume
- Added SimplexNoiseHapticFilter which modulates haptic intensnity using a 3D simplex noise based on the local position of the haptic point within the volume
- Added SineHapticFilter which modulates the haptic intensity based on a Sine wave frequency based on the individual/global impact time
-- Sine wave can also be offset based on either radial distance or distance along axis, to create travelling "wave" effects
- Added ValueNoiseHapticFilter which randomizes the haptic intensity for each sampling instant
-- Note that the rate will depend on the internal update rate of the driver
- Added HapticManager which ensures that all haptic point mappers are properly mapped based on their priority and other user full-body avatars are automatically injected with haptic volumes if AvatarHapticSourceManager is not already present
-- This is automatically attached to the root of the user. You can adjust the intensity of the haptic volumes for hands, head and other body parts as well as visualize the volumes
-- Injected haptic volumes are local-only and won't be seen by other users

- Added AvatarHapticSourceManager, which allows creating custom haptic volumes on avatar
-- It's strongly recommended to add the active state to the list of this component, as it will automatically cull them when the user is too far away
-- The specifics of this component will likely change in the future to give more fine-grained control

- Added native support for bHaptics Tactsuit (Tactot Vest, Tactal face over (forehead haptics) and Tactosy for Arms) thanks to hardware provided by @bhaptics_jen, support requested by @Alex the pet peeve avali 🐦, @AlienInArea51 (MR-Alex), @Enverex, @casoliv, @Danyy59 and others in the past)

- Added UserVoiceMode node, which provides the voice mode of given user (requested by @Raith and @Alex from Alaska)

[h2]Tweaks:[/h2]
- AvatarNameplateVisibilityDriver will now show nametag when the avatar is not equipped (unless all nametags are hidden), allowing it to be adjusted and tweaked (based on feedback by @Turk)

[h2]Bugfixes:[/h2]
- Fixed incorrect title of ReflectionProbeWizard window and changed the title to "Reflection Probe Wizard" for better clarity (based on feedback by @ProbablePrime)
- Fixed user activity being incorrectly detected in some cases (e.g. when controller tracking is lost or there's small amount of jitter), causing the auto-away status to not activate
- Fixed hijacking of physical touch interactions to spoof interactions with developer interfaces (reported by @Cyro)