secondlife / jira-archive

2 stars 0 forks source link

[BUG-11157] [BENTO] Mesh joints not loading reliably #1395

Open sl-service-account opened 8 years ago

sl-service-account commented 8 years ago

Actual Behavior

When a user wears a mesh avatar which has joint positions set, the joint positions in that avatar do not reliably load. This is most visible in avatars which are NOT rigged in the standard human T-pose. When an avatar rigged in an inhuman way fails to load its custom avatar joints, the joints will sometimes remain in a human position when the avatar is worn, thus making things like dogs, horses, and dragons look like crumpled balls, pulling the head, neck, front legs (arms), and torso backwards towards where they would be on the human body. Avatars which are much larger or much smaller than the standard human experience these deformations as well. This bug is less visible for avatars which are rigged in a human T-pose and at a regular human height, since when their joints fail to load they are already in more or less the correct position.

When this happens, it happens on a per-viewer basis. That is to say that one user might view you crumpled while another views you correctly. To fix the problem, you can detach and reattach your mesh, which will cause every viewer to reload your joints once more, but this fix is a roll of the dice. Every time the mesh is worn, there is a chance of someone present failing to load your joint positions correctly.

Steps to Reproduce

This happens most frequently when a user uses "replace outfit" on a whole folder to change avatars at once, but can also happen when a mesh is detached and reworn by itself or when a new user teleports in to a sim where someone is already wearing a mesh body. It seems mostly random whether a mesh's joints will or will not load.

Try wearing a mesh that is not rigged in the standard T-pose and has no additional animations (containing bone locations; rotations are fine) acting on it. Ask others to take screenshots of you or describe what you look like. Some will see you one way, and some will see you another.

Photos

I've attached some pictures taken today at the bento meeting, when I asked everyone to take screenshots of my horse avatar. The horse avatar I was wearing was rigged in a four-legged standing pose and was uploaded with joint positions, but does not have any animations playing on it which affect bone position. As you can see, several people saw me correctly and several people did not. Some snapshots I took of other deformed mesh avatars are included as well.

The horse and wolf, being rigged as quadrupeds, experience the most obvious deformations. The fox, fenra, and gator, being avatars that are rigged in a human T pose with slightly different bone positions, experience different but still very visible deformations. The tiny fox has arms, legs, and torso stretched out to a regular human length. The fenra, with its wide hips and short legs, has severe hip and leg deformations. The gator, with its tall, long body, has a squashed torso.

NOTE - the deformation of the horse's front right leg is not due to this bug. This jira references the full body deformations only.

The Current Workaround

At present, many creators of nonhuman or nonstandard mesh bodies will put background deform animations inside their mesh bodies. These deform animations contain only a low priority keyframe of the mesh's bones in the position and at the rotation they should be if the mesh joints load correctly. That way, if the mesh joints fail to load, the backup animation is waiting to take over.

IF the bento team does decide to block the ability to upload bone translations in animations [and I hope they do not, because animating bone positions has many purposes as discussed in the bento feedback thread], this bug MUST be fixed first.

Suggested Fix

At present - in my opinion - the deform animation explained above is superior to the system in place to handle mesh joints. While mesh joints load or do not load by viewer and vary greatly, a single animation played in world will assure that everyone on the sim sees you exactly the way you should be seen. If the viewer would inherently play such an animation as the avatar's new background "stand" animation instead of the default "leaning side to side" stand animation, this could solve not only the issue of joint positions but also the issue of an avatar striking unnatural poses from the default animations.

(Example - an animal rigged in the quadruped position, when acted upon by the default sl animations, will see its front legs cross through its body. The legs are attempting to rotate 90 degrees downward, like human arms coming out of the T pose, but instead wind up rotating 90 degrees through the chest, since they are already in the position they need to be in.)

Attachments

Links

Related

Original Jira Fields | Field | Value | | ------------- | ------------- | | Issue | BUG-11157 | | Summary | [BENTO] Mesh joints not loading reliably | | Type | Bug | | Priority | Unset | | Status | Accepted | | Resolution | Accepted | | Reporter | Teager (teager) | | Created at | 2016-01-08T00:39:45Z | | Updated at | 2016-02-05T16:26:30Z | ``` { 'Business Unit': ['Platform'], 'Date of First Response': '2016-01-07T20:07:45.940-0600', "Is there anything you'd like to add?": "I've attached some pictures taken today at the bento meeting, when I asked everyone to take screenshots of my horse avatar. The horse avatar I was wearing was rigged in a four-legged standing pose and was uploaded with joint positions, but does not have any animations playing on it which affect bone position. As you can see, several people saw me correctly and several people did not. Some snapshots I took of other deformed mesh avatars are included as well.\r\n\r\nNOTE - the deformation of the horse's front right leg is not due to this bug. This jira references the full body deformations only.", 'ReOpened Count': 0.0, 'Severity': 'Unset', 'System': 'SL Viewer', 'Target Viewer Version': 'viewer-development', 'What just happened?': 'When a user wears a mesh avatar which has joint positions set, the joint positions in that avatar do not reliably load. This is most visible in avatars which are NOT rigged in the standard human T-pose. When an avatar rigged in an inhuman way fails to load its custom avatar joints, the joints will sometimes remain in a human position when the avatar is worn, thus making things like dogs, horses, and dragons look like crumpled balls, pulling the head, neck, front legs (arms), and torso backwards towards where they would be on the human body. Avatars which are much larger or much smaller than the standard human experience these deformations as well. This bug is less visible for avatars which are rigged in a human T-pose and at a regular human height, since when their joints fail to load they are already in more or less the correct position.\r\n\r\nWhen this happens, it happens on a per-viewer basis. That is to say that one user might view you crumpled while another views you correctly. To fix the problem, you can detach and reattach your mesh, which will cause every viewer to reload your joints once more, but this fix is a roll of the dice. Every time the mesh is worn, there is a chance of someone present failing to load your joint positions correctly.', 'What were you doing when it happened?': 'This happens most frequently when a user uses "replace outfit" on a whole folder to change avatars at once, but can also happen when a mesh is detached and reworn by itself. ', 'What were you expecting to happen instead?': '-', } ```
sl-service-account commented 8 years ago

Whirly Fizzle commented at 2016-01-08T02:07:46Z

Earlier report about this bug is at BUG-3416

sl-service-account commented 8 years ago

Teager commented at 2016-01-08T02:17:01Z

Thank you Whirly :)

sl-service-account commented 8 years ago

Teager commented at 2016-01-09T17:48:08Z

I've sent a copy of the horse mesh in the pictures above to Dan Linden on Aditi. If any additional members of the team would like meshes too, feel free to contact me. If you'd like some additional meshes which are rigged in different ways, I'm sure some of my avatar creator buddies would be happy to send copies of their avatar meshes as well.

sl-service-account commented 8 years ago

Dan Linden commented at 2016-01-30T01:36:28Z, updated at 2016-02-04T21:45:20Z

We see 2 ways to reproduce this bug reliably with Teager's horse mesh.

Repro 1: 1) Wear an outfit containing a mesh with custom joint positions and an un-deform animation script that plays when the outfit is detached. 2) "Wear - Replace Current Outfit" with a version of that same outfit that has all scripts removed. Observed: All observers see the mesh as not using the custom joint positions. (see attached "wbdeform1.jpg") Expected: All observers should see the mesh as using custom joint positions.

Repro 2: There may be some load-related precondition to this repro. I've seen this repro on Morris with 18 agents, but not on an empty region. 1) Stand about 40m from an Observer avatar. 2) Wear an outfit that has a mesh with custom joint positions (no scripts in the mesh) Observed: The observer avatar sees a mesh that is not using the custom joint positions. (see attached "wbdeform1.jpg") Expected: All observers should see the mesh as using custom joint positions.

We would love to hear any other methods to trigger this bug. Please post them if you have them!

sl-service-account commented 8 years ago

Teager commented at 2016-02-05T16:26:31Z

Wanders Nowhere of Prehistorica uses a multi-step avatar wearing process as his fix for mesh deform instead of scripted deformers. His avatars come in multiple folders, asking the user to first wear the folder containing the shape, hair, alpha, eyes, and skin, and then wear the folder containing the mesh.

I don't have as much experience with using that method as he does, but that definitely suggests a sorting issue between where the shape puts the avatar's joints and where the mesh puts the avatar's joints. I suggest some sort of method by which the viewer loads a new avatar in a predetermined order instead of all at once: first load the shape, body parts, and sl clothing, then any mesh or objects that are worn.