Support for up to 8 Vive Trackers for full body! You can now calibrate hips, feet, chest, elbows and knees. Also finally fixed up all issues with user getting dropped out of their avatar when calibrating (hopefully! Let me know if it still happens, but I think it should be good now).
New Features:
- Added full body support for elbows, chest and knees -- You can calibrate all of them using the full body calibrator. Automatic T-pose calibration is supported for all as well -- Knees can only be used if feet are calibrated as well, others are independent -- You can use up to 8 trackers simultanously (11 when you include head and hands)
Tweaks:
- Changed ActiveUserRootOnly on grabbables to ActiveUserFilter with folowing options (based on feedback by @H3BO3#7957) -- Disabled -- OnlyActiveUser (can only by grabbed by the user under which this is parented or nobody if not parented) -- ActiveUserWhenPresent (can only be grabed by the active user or anybody when not parented) -- ExcludeActiveUser (can be grabbed by anyone but the user it is parented under)
Bugfixes:
- Fixed another case of user being dropped out of their avatar when triggering avatar full body calibration, in cases where the trackers weren't initially mapped (based on report by @Nexulan#6449) - Neos VR will automatically use the legacy SteamVR input when running through Virtual Desktop on Oculus Quest (this fixes issue with hands stuck in the ground) - Fixed grabbing of the full body calibrator by another user causing their seated mode to disable momentarily (reported by @RaccoonRezillo#3830 ) - Fixed full body calibrator breaking in some cases when user switches their avatar that they're actively calibrating - Fixed sessions that didn't end cleanly (crash, timeout) lingering in Neos and #active-sessions on Discord - Fixed AvatarRawToolData not working correctly when the avatar is not equipped by the wearer (e.g. when spawning into a session, as reported by @RaccoonRezillo#3830 )
Major refactoring of the cloud infrastructure! Sorry for the lack of updates to Neos itself, since we started experiencing severe server congestion, I had to prioritize some major work on the cloud server. It should be much speedier now and better prepared for scaling! There’s still a few things left to do, but should be better now. Also managed to slip in some full body improvements and fixes! ;)
New features
- Added buttons for rotating the platform and new grabbable toggle directly on the full body calibrator platform - Added ability to set position/rotation smoothing on feet and hips with full body tracking. This will allow for filtering out tracker jitter (especially on feet when stomping) and provide nicer motion - Added BooleanValueDriver<T> (under Transform/Drivers)
Tweaks
- AvatarPoseSmoothLerp now has separate smooth speed for position and rotation. Using negative values will disable the smoothing completely - Upgraded to Unity 2019.2.8 (from 2019.2.7)
Optimizations
- Reworked cloud infrastructure into separate API frontend service and background processing app to significantly improve performance and server congestion - Ported cloud API frontend and background worker to ASP .NET Core 3.0 (from .NET Framework) to improve performance - Optimized thumbnail upload to reduce server congestion - Optimized session management on the cloud server to reduce background processing - Improved caching of user information on the cloud server to improve performance - Upgraded to v3 CosmosDB SDK for the cloud server, which should help with some performance issues - Various other optimizations to the cloud server infrastructure
Bugfixes
- Added a mechanism for extending cloud session duration. This fixes issues when Neos runs for too long (e.g. longer than a day for headless, as reported by @tehturk ) - Fixed fetching of attributes for nested lists in the inspector, which would break generating UI for certain components (like MaterialSet discovered by @H3BO3 and @ProbablePrime ) - Fixed potential duplication of tracker objects and world tracker manager lingering after it has been removed - Fixed position and rotation stream duplication for Vive trackers when the user is respawned - Fixed issue with avatar objects slots sending node availability messages for all users (this could cause some unpredictable avatar behavior)
Known Issues
- Large assets may fail to upload right now, will be fixed soon
Lot's of improvements and bugfixes for full body and calibration process! Hopefully all the hip twisting issues should be squashed now. Also I messed up and lost my update notes, so these might be incomplete as I had to reconstruct them, sorry!
New features:
- Full-body T-pose calibration now computes height compensation as well, which fixes issues with bent knees (based on feedback by @ProbablePrime, should help with neck issue reported by @Flame Soulis) - Added "Show Reference Overlay" for full body avatar calibration, that lets you hide the reference for better view of your avatar - Added PositionDeltaDriver (in Transform/Drivers) which drives a vector from a position difference between two objects (optionally normalized) - Added "DontDrive" setting for draggables (Slider, Joint..) which directly assigns values, without driving them
Tweaks:
- Knee offsets for full body calibration cannot be placed too close anymore, which fixes the knees bending in strange directions, especially with walking animation (based on feedback by @ProbablePrime) - Changed knee offset visual to vectors, to help signify that they're directional references (based on feedback by @ProbablePrime) - Added avatar full body calibration finish screen, that offers choice between finishing process or returning, to decrease user confusion (based on feedback by @Dante ) - Added search term "by group:" for groups for the world browser. This fixes not being able to filter by group if there's an user of the same name (reported by @Medra ) - Changed full body calibration platform material and mesh to help increase contrast (based on feedback by @ProbablePrime) - Tweaked tracker calibration page of full body calibrator, to make it clear that avatar calibration is optional step (based on feedback by @Dante ) - Updated full body T-pose calibration text to make user aware of the red overlay reference (based on feedback by @Dante ) - Full body calibrator body overlay now renders even when trackers aren't calibrated yet, to make user more aware of it (based on feedback by @Dante ) - Avatar full body calibration preview now preserves dynamic bones - Added a offset distance limit to full body calibrator, preventing user from pulling the parts too far away (encountered by @Groxxy)
Bugfixes:
- Improved full body IK forward calculation. This fixes hips and legs twisting when leaning forward or lying prone (encountered by @Nexulan, also likely same issue as reported by @Groxxy) - Fixed full body calibrator not showing T-pose for others (encountered by @Nexulan) - Fixed full body T-pose reference being misaligned in some cases, requiring user to walk too far in their playspace and resulting in nonsensical calibration (encountered by @Nexulan and @ProbablePrime) - Fixed interactive camera not getting cleaned up when the owner exits in an unclean way (timeout or crash) - Fixed Logix node visual doubling, resulting in multiple copies of the node UI, which also prevented packing (reported by several users in the past) - Fixed flipped tangents on conical frustum meshes (cone, cylinder...) and missing tangents on the caps - Added guard against AvatarPoseNode remaining in equipped state when duplicating avatar for preview in the full body calibrator - this fixes certain cases when calibrating avatar breaks the user - Fixed exception in CommonTool when grabber is missing (discovered in log from @JustlyDeclarable )
- Added quick full body T-Pose calibration, which allows quickly mapping trackers by posing in a reference and pressing both triggers -- This is now the first calibration step for the full body calibrator, with the adjustments serving to fine tune the calibration - Added AvatarPoseRotationConstraint, which allows constraining the orientation of a body node (limiting swing and twist around an axis)
Tweaks:
- "Reset Mapping" on Full Body Calibrator now just recalculates the default avatar calibration, rather than disabling it (this would break avatar body anchors) - Full body calibrator now has basic instructions displayed on the top - Light Orb Tip will now spawn light in the current local space of the user, rather than global - Updated default SteamVR bindings of Oculus Touch controllers. This should fix some symmetrical bindings not working correctly (like touching X/A buttons, reported by @Hayden ) - Changed default render distance to 4096 - Upgraded to Unity 2019.2.7f2 (from 2019.2.6f1)
Bugfixes:
- Prevented avatar from being grabbed when entering or leaving fullbody avatar calibration, preventing it from being re-equipped - Fixed filling of empty slots on avatar (spawning default hands/head) from dequipping just equipped avatar in some cases - this should fix the full body calibrator sometimes dropping user out of their avatar and leaving them without voice (encountered by @Nexulan , @pikapetey and others, please let me know if this bug still happens!) - Fixed being able to anchor user to avatar anchor that's part of their hierarchy (e.g. being held or being on another user anchored to them) (reported by @Shifty ) - Fixed avatar anchors incorrectly unparent objects when the target space is not part of the anchor - Fixed friends dialog trying to update message UI that has been removed in the meanwhile - Added guard for invalid number of read samples from and audio source - Fixed rare exception when updating online status, due to accessing uninitialized user instance - Fixed labels for avatar calibration references in the full body calibrator being too small or too large for certain avatars - Fixed exceptions when playing looped OGG audio clips causing audio issues and heavy performance (discovered thanks to log from @LeonClement ) - Fixed not being able to set unregistered user as a target for the interactive camera
- Added "Use Symmetry" for avatar calibration in the full body calibrator, which will move the feet and knee offsets symmetrically - Added skeleton visualization to the full body calibrator, for both reference and calibrated avatar - Added "UnparentEverythingOnDestroy" option to AvatarAnchor. This will unparent any objects in the user root when the anchor is destroyed. This prevents any items spawned or created while under avatar anchor from being destroyed along with it - Added "Generate Debug Visuals" to Rig and BipedRig in the inspector, which allows generating temporary skeleton visuals for debugging purposes
Tweaks:
- MultiUserAvatarAnchor will now filter out second pointer if one is already pointing at it, preventing the highlight point from jumping around - Automatic avatar hips/feet calibration will now replace old calibration in cases where the rotation is close enough, but the offset is too large - Improved automatic calibration of hips for avatars where the hip bone is too far up the spine - Added cross bar to avatar calibration references to better visualize their orientation - Added labels to avatar calibration references (tracker labels will be hidden when calibrating avatar)
Bugfixes:
- Fixed random bone drift for IK avatars, causing some parts of the body to randomly become elongated or shortened (reported by @RaccoonRezillo and @Reks ) - Fixed sent invite messages showing incorrect timestamp in the history (reported by @AlienInArea51 (MR-Alex) ) - Fixed spelling error on RandomObjectSpawner (reported by @NotMeCoffee ) - Fixed exception in UserDistanceValueDriver when user root is missing (e.g. on headless or when respawning) (discovered in log from @tehturk ) - Fixed MultiUserAvatarAnchor breaking when the anchors root has children that are not anchors - Fixed OverlayFresnel writing into ZBuffer when opaque, preventing it from functioning properly - Fixed GetChildrenWithTag() not searching children correctly - Fixed incorrect positioning by hips for full body avatars, which should fix pose problems with certain avatars when entering avatar anchor - Fixed full body calibrator not resetting reference visual correctly after avatar calibration is finished
- "Torso" in bone name is now considered as valid spine segment (based on feedback by @KierDran )
Bugfixes:
- Fixed initial setup of IK not working correctly, causing Avatar Creator to break with full body avatars (reported by @0utsider and @KierDran ) - Fixed being able to jump positions with MultiUserAvatarAnchor, causing the avatar to become mangled or accidentally jumping around when clicking
- Added "MultiUserAvatarAnchor" which supports dynamically generating anchors for multiple users (e.g. multiple users being able to sit on a long bench or in a circle without having to put a bunch of explicit anchors there) -- It requires a template avatar anchor that will be spawned for each user -- It also requires a point snapper reference, which will snap the spawned anchor in certain pattern based on where the user is pointing at (e.g. on line or in circle). Use components from Transform/Snapping. -- You can configure maximum number of users and minimum distance they have to be from each other in order to snap - Added LogiX nodes for working with avatar anchors -- AnchoredUser (gets currently anchored user) -- AnchorUser (anchors user to a particular anchor) -- ReleaseUser (releases currently anchored user) -- AnchorEvents (fires events when user is anchored or released) -- AnchorLocomotionData (provides anchored user's locomotion inputs) - Added automatic feet & hips calibration for full body avatars (you might still want to tweak it, but it should at least provide a base) -- Existing avatars will be automatically calibrated if they haven't been before or if their calibration significantly differs from automatic one (e.g. pelvis twisted backwards) -- This fixes full body avatars not always working correctly with avatar anchors (e.g. seats) - Added "Highlight" property for avatar anchors, which allows showing a visual when user hovers over it - Neos will now ignore bones with "<NoIK>" anywhere in their name when detecting humanoid rig configuring the IK system (based on feedback by @KierDran ) - Added "DestroyOnUserLeave" component (under Transform) - Added "AvatarAnchorDestroyOnRelease" component - Added "Normal" property to SnapCircle, allowing to change its orientation
Bugfixes:
- Fixed avatar anchor crumpling the avatar on exit when the user has trackers that are not tracking (their state would get locked - Fixed being able to use "Jump" in the session dialog when the locomotion is suppressed (e.g. when using the avatar anchor) (reported by Iforgotwhosorry ;_; ) - Fixed avatar anchor keeping the body visually anchored for other users after exiting the anchor, when the anchored user doesn't have any trackers (thanks to @H3BO3 for help with diagnosis) - Any leftover debug visuals are now automatically cleaned up for an user who just left - Fixed exception in DroneCamera when no points are gathered for framing - Tweaked SteamVR controller/hand tracking status fetching to hopefully fix issues with loss of tracking (reported by @Groxxy and @Hayden ) - Only one warning will be logged for meshes with invalid bounds, to prevent spamming the log due to repeated updates and dropping performance. This logging information now also includes snapshot of the component state - Added input sanitization to BevelSoliStripeMesh - Fixed occasional exception when saving worlds into the inventory (discovered in log from @RaccoonRezillo ) - Fixed exception when using the "Jump" function and one of the users is currently missing a root in the world (discovered in log from @RaccoonRezillo ) - Tweaked grab-destroy mechanics and lookups, to avoid components on the avatar interfering with grabbed objects (e.g. destroying certain objects destroying the whole avatar or dynamic bone chain on certain parts of avatar preventing grabbed objects from being destroyed (reported by @Hayden and @{MAXKZR} ) )
- Added detail albedo and normal map support to PBS Slice (both metallic/specular and transparent variants) - Added log command to headless client, which switches the interactive shell to logging output until Enter is pressed again (based on feedback by @tehturk ) - Added usage info for headless commands (will be printed when using the help command or when using a command incorrectly) (based on feedback by @tehturk )
Tweaks & Optimizations:
- Optimized session thumbnail management on the cloud - this should reduce server load and increase responsiveness - Physical Locomotion (walk/run, zero-G etc.) now uses deadzone from settings (based on feedback by @ChiggenWingz ) - Optimized FindCharacterControllerFromUser and FindCharacterControllerFromSlot lookups - Increased limit of Patreon names in the sky from 50 to 400 - Neos will now recognize m3u as multimedia and pass to libVLC (however there are still issues with streams not playing correctly)
Bugfixes:
- (hopefully) Fixed character parenter issue, causing player to become unparented when moving in their playspace (reported by @Bob , @Anomalous @DeliriousJax , @ohzee and others) - let me know if you still encounter it - Fixed world crash when joining/loading a world with linked sync objects (this would often happen with avatar anchors present) (discovered in @Zane 's session) - Fixed exception in FindCharacterControllerFromUser when the user root is missing
- Added ability to restore user position/rotation when exiting AvatarAnchor -- Can either restore original transform (relative to the anchor (default) or global) or use another object as reference. - Added AllowedUrlHosts to the config for headless client, which allows specifying which hosts can be contacted by LogiX HTTP requests (requested by @Anomalous )
Bugfixes:
- Added robust file delete/move routines to local asset import - this fixes some background exceptions (e.g. when generating thumbnails, importing assets and such) - Fixed exception when destroying AvatarAnchor (this fixes not being able to remove any objects with them on, reported by @Jazneo ) - Added a exception guard to prevent any errors in OnDestroying events from destroying/deleting the object/component - Fixed exceptions in head fixing when some of the objects are missing, causing the IK to stop functioning (reported by @Shifty , @RaccoonRezillo and others) - Fixed exceptions in QuantityTextEditorParser when the default unit is null (discovered in log from @Shifty ) - Fixed AvatarAnchor breaking when there are uncleaned or removed dummy object slots - Fixed having slight vertical rotation when equipping full body avatars - Fixed the legs twisting when lying horizontally with full body setup (due to pelvis forward pointing upwards, reported by @KylieSour and @Dani☆ ) - Fixed legs randomly twisting even when standing upright (reported by @Groxxy and @KylieSour ) - Fixed user being incorrectly rotated when entering avatar anchor using hips as rotation node and using hips Vive tracker - Fixed HeadFacingRotation not rotating the user correctly when assigned - Tweaked humanoid rig detection - it should now work for certain rigs without shoulders (based on report from @Willowmoon8 ) - Fixed being able to jump into another avatar in the world when anchored, breaking the anchor (found by @Aegis_Wolf )
The first working version of avatar anchors! Allowing for seats, beds, vehicles, roller coasters and lots more! There's still a lot of work to do with them, but this is first usable version with the framework set in place.
Following builds will be building on this - adding more components, simplifying setup, fixing issues. Let me know what you think!
New features:
- Added "AvatarAnchor" component, which serves as the core building block for building seats and other anchoring behaviors -- It will parent user under specific space and set their scale to fit -- It will position and rotate them using chosen body nodes (root, head, hips, feet) -- It will install avatar pose filters, which can be used to constrain/pose body nodes (if they're not present, dummy ones will be inserted) - Added "Avatar Anchor Touch Trigger" which allows anchoring/releasing the user by clicking on an object - Added "Avatar Anchor Locomotion Release" which allows releasing the player when they try to jump or move
- Added Head Max Fix Distance to VRIKavatar (default 0.025) -- This will fix head position and rotation within a small distance for the user currently using the full body avatar, preventing the face geometry from being pulled into their face in some scenarios (e.g. reported by @Casuallynoted ) - Added "Hips Position" node -- This will give you calibrated hips position (if tracker present), full body avatar hips position or fixed hips position if none are available - Added "Hips Rotation" node -- Similar logic, but will either just return tracker hips rotation or head facing direction - Added "Feet Rotation" node -- Either returns averaged feet rotation (when trackers available) or head facing rotation
Tweaks & Optimizations:
- Tweaked FeetPosition property on UserRoot - it will use trackers if present and if not the projected position is pushed backwards slightly - Moved the pose/rotation/tracking filter support from TrackedDevicePositioner to AvatarPoseNode and updated existing filters - Tweaked the thumbnail update logic - if the host is away or otherwise unable to render new thumbnail (e.g. headless), the thumbnail will be taken from one of the present users if possible (previously this would happen only for headless host) - RawOutputs won't generate changes if the assigned value remains the same. This can reduce computations in some scenarios
Bugfixes:
- Fixed nonsensical storage information on the dash when the data hasn't been loaded from the cloud yet (reported by @Groxxy , @🧡Zyro1331🧡 and others) - Fixed session thumbnails being captured or downloaded redundantly when the background process takes longer - Added a guard against lingering drives for AvatarPoseNode, causing some issues feet or hip tracking binding and full body calibration - Models with duplicate blendshape names will now import correctly (duplicate names will have "_" appended at the end) (based on report and sample model by @RaccoonRezillo ) - Fixed not being able select the next enum value for enum types with multiple labels for the same numeric value - Fixed exceptions in the full body calibrator when one of the tracked device components is missing tracked device (discovered in log from @Honzackcz ) - Fixed VRIKAvatar using non-tracking trackers without the user first getting into horizontal pose with tracking ones
Known issues:
- Avatar Anchor won't constrain pelvis/feet on an avatar if they're not calibrated