1. Neos VR
  2. News
  3. 2021.9.1.665 - Dynamic Bone Chain optimization, bugfixes, security improvements

2021.9.1.665 - Dynamic Bone Chain optimization, bugfixes, security improvements

Hello everyone! I got another build for you, with one of the first optimiztaions built with some of BEPUv2's structures - I've reworked the dynamic bone chain collision system to efficiently query and propagate any collision overlaps, rather than having each chain finding its own collisions. This should make it scale better with increasing number of users in the session and help improve the performance a bit. That said, I'm testing the waters a bit with this approach, so there's a bunch more to come in the future with this. Let me know how it goes!

There's a whole bunch of other stuff too, more bugfixes for BEPUv2 upgrade (notably a fix for point clouds generating nonsense colliders that cause severe lag), security improvements and various quality of life improvements!

[h2]New Features:[/h2]
- Added DynamicSubtitleProvider
-- This will dynamically import a subtitle as Neos animation from given URL (requested by @Enverex, GH #1260)
-- Supported files are the same as the statically imported ones. HTTP(s) sources are supported
- Added GetActiveUserSelf LogiX node (requested by @Shadow Panther [RU/EN, UTC+3], GH #2790, implemented by @ProbablePrime | Docs)
- It is now possible to listen for Equipped and Dequipped events on any Tooltip, instead of just RawDataTooltip (requested by @Turk and @3x1t_5tyl3, GH #2026, implemented by @ProbablePrime | Docs)
- Added support for Parsec for Distance unit parsing and formatting
Optimizations:
- Implemented initial version central dynamic bone chain update and collision management system
-- The manager collects all colliders and dynamic bones and asynchronously updates bounding box tree structures for efficient search of overlaps, instead of each dynamic bone chain searching for its own collisions
-- The implicit player colliders are generated only once globally, rather than being generated for each dynamic bone present
-- This should help improve how part of the dynamic bone chain scales with increasing number of users in the session, improving part of their performance
-- Please let us know if you notice any difference in scenarios with many users! We'll need to do more profiling and figure out how this affects the rest of the system, there's more changes and optimizations to be done
-- Amount of memory allocations should be reduced
-- Note that the actual simulation performance is unaffected by this change, it mainly addresses poor scaling of collecting potential colliders
- Added more efficient pruning of dynamic bone collisions before performing more expensive checks

[h2]Tweaks:[/h2]
- Merged latest BEPUv2 updates from upstream
- Added reference proxies to the imported subtitle object to allow it to be dropped in the inspector directly
- UTCNow node is now also in Math/DateTime folder (requested by @Epsilion, implemented by @ProbablePrime | Docs)

[h2]Security:[/h2]
- Laser offset and direction from the world is now temporarily supressed when context menu is opened in the userspace (based on report by @seif1, Ticket #622989)
-- This prevents a potential attack by hijacking user's laser in-world to make them point at an item in the Userspace
-- Normally this should pose no functional difference, as the laser offset doesn't typically change unless the avatar is switched
- Added "Remove Single Instance" button to SimpleAvatarProtection (based on feedback by @xYreous, @Khosumi, @Alex from Alaska, @kazu0617 Neos:kazu, @Electronus and @Zyzyl, GH #2897)
- Added warning to SimpleAvatarProtection, indicating that removal by any means other than dedicated buttons will result in self destruction (based on the same issue above)
- Added protection against infinite recursion when generating LogiX visuals if they're removed within the generation, resulting in a crash (reported by @marsmaantje, Ticket #790410)
- Removed old DebugFingerPoseCompensation component which causes world to crash when added (reported by dmx, Ticket #599312 and #910271)

[h2]Bugfixes:[/h2]
- Fixed mesh collider generation for point clouds producing garbage data, resulting in those colliders not being grabbable and causing extreme freezes when queried
- Fixed regression causing IsCharacterOnGround, CharacterLinearVelocity, CharacterGravity and CharacterGroundCollider requiring updating relay, rather than updating themselves (reported by @Earthmark and @Ho'polis, GH #2896
- Fixed some invalid meshes causing exceptions during loading, generating metadata and asset variants
- Fixed potential slight memory corruption when computing colliders for meshes with no geometry
- Fixed HandCollisionVibration on DynamicBoneChain not working
- Fixed procedural textures and meshes failing to bake if they're not referenced by anything (based on report by @Dante | Moderation Team and @Snooper, GH #2899)
- CharacterController legacy content upgrade will now disable UseUserHeadHeightWhenAvailable option when there's no locomotion module present on the same slot
-- This can fix some old vehicles breaking when being grabbed (reported by @H3BO3, GH #2898)
- Fixed dynamic bone chains colliding with own head when "CollideWithOwnBody" is not checked (reported by @epicEaston197)