Skip to content
This repository has been archived by the owner on Mar 28, 2024. It is now read-only.

[BUG-100864] [Animesh] llSetLinkSitRigging() - A means of visually rigging a sitter to an animesh skeleton bone. #377

Open
3 tasks
sl-service-account opened this issue Jun 20, 2017 · 2 comments

Comments

@sl-service-account
Copy link

sl-service-account commented Jun 20, 2017

Please do not triage until July 5th or later to give people time to comment.

Information

Agents will be allowed to sit on animesh objects.

We need a means of rigging sitters to animesh bones to achieve fluid, always-synched animations between agent and object for the highest caliber experience possible.

This feature request is for a function that applies rigging parameters to an object link which will visually rig a sitter to an Animesh skeleton bone when they sit on the link or are sat via llSitOnLink().

llSetLinkSitRigging(integer link_num,list options)

|Option|Value|Description|
|
|-|-|-|-|
|SIT_RIGGING_BONE_ID|1|internal bone name or id number sitter is rigged to|
|
|SIT_RIGGING_LOCAL_POS|2|sitter's locally rigged position on bone_id|
|
|SIT_RIGGING_LOCAL_ROT|3|sitter's locally rigged rotation on bone_id|
|
|SIT_RIGGING_WEIGHT|4|sitter's rigged weight value on bone_id|



Benefits:

- No need to make complex couples animations that attempt to synch both party's offset pos/rot which will inevitably get out of synch.
- Efficient alternative to constantly applying SLPPF() changes causing viewer updates.
- Alternative for a lack of child prim keyframe motion.

Some Specific Use Cases:
- Animesh fair rides whose seats are rigged to bones can have their sitters follow the seat movement correctly.
- Animesh characters can place a sitter on their shoulders and have the sitter following the movements of the character correctly.
- Animesh ridable animals can have there sitters follow the movement of spine bones during movement and/or breathing.
- Animesh large creatures can pick up agents in hand, put them in their mouth(on jaw), chew them up, swallow them, keep them in their stomach, digest them(compacted avatar animation) or "expel" them via a "waste" object. Every stage of the process updates the agent's animations & sit link with llSitOnLink() which in-turn updates their sit rigging.

# Other Information

This feature visually overrides an agent's global position. This is similar with agents sitting on objects with an active target omega.

Please discuss any additions or alternatives or use cases below. Thanks.|

Links

Related

Original Jira Fields
Field Value
Issue BUG-100864
Summary [Animesh] llSetLinkSitRigging() - A means of visually rigging a sitter to an animesh skeleton bone.
Type New Feature Request
Priority Unset
Status Needs More Info
Resolution Unresolved
Reporter Lucia Nightfire (lucia.nightfire)
Created at 2017-06-20T05:44:35Z
Updated at 2022-01-26T18:58:07Z
{
  'Business Unit': ['Platform'],
  'Date of First Response': '2017-07-06T16:15:56.195-0500',
  'How would you like the feature to work?': 'Please do not triage until July 5th or later to give people time to comment.\r\n\r\nh1. Information\r\nAgents will be allowed to sit on animesh objects.\r\n\r\nWe need a means of rigging sitters to animesh bones to achieve fluid, always-synched animations between agent and object for the highest caliber experience possible.\r\n\r\nThis feature request is for a function that applies rigging parameters to an object link which will visually rig a sitter to an Animesh skeleton bone when they sit on the link or are sat via llSitOnLink().\r\n\r\nllSetLinkSitRigging(integer link_num,list options)\r\n\r\n||Option||Value||Description||\r\n|SIT_RIGGING_BONE_ID|1|internal bone name or id number sitter is rigged to|\r\n|SIT_RIGGING_LOCAL_POS|2|sitter\'s locally rigged position|\r\n|SIT_RIGGING_LOCAL_ROT|3|sitter\'s locally rigged rotation|\r\n|SIT_RIGGING_WEIGHT|4|sitter\'s rigged weight value|\r\n\r\nBenefits:\r\n- No need to make complex couples animations that attempt to synch both party\'s offset pos/rot which will inevitably get out of synch.\r\n- Efficient alternative to constantly applying SLPPF() changes causing viewer updates.\r\n- Alternative for a lack of child prim keyframe motion.\r\n\r\nSome Specific Use Cases:\r\n- Animesh fair rides whose seats are rigged to bones can have their sitters follow the seat movement correctly.\r\n- Animesh characters can place a sitter on their shoulders and have the sitter following the movements of the character correctly.\r\n- Animesh ridable animals can have there sitters follow the movement of spine bones during movement and/or breathing.\r\n- Animesh large creatures can pick up agents in hand, put them in their mouth(on jaw), chew them up, swallow them, keep them in their stomach, digest them(compacted avatar animation) or "expel" them via a "waste" object. Every stage of the process updates the agent\'s animations & sit link with llSitOnLink() which in-turn updates their sit rigging.\r\n\r\nPlease discuss any additions or alternatives or use cases below. Thanks.',
  'ReOpened Count': 0.0,
  'Severity': 'Unset',
  'Target Viewer Version': 'viewer-development',
  'Why is this feature important to you? How would it benefit the community?': '?',
}
@sl-service-account
Copy link
Author

polysail commented at 2017-07-06T21:15:56Z, updated at 2017-07-06T21:17:57Z

I'm concerned about the impact of essentially parenting one skeleton to the bone of another skeleton.

However making an avatar sit on an animated mesh "vehicle" doesn't seem like it's got any weird hierarchy issues.

@sl-service-account
Copy link
Author

Fenix Eldritch commented at 2018-07-31T15:05:08Z

I'd like to add my support for this suggestion. The first thing I did on the beta grid was attempt to turn the test raptor into a vehicle. It worked, but having the pilot locked in place and visually detached as the animesh moved and swayed beneath really broke the illusion of riding the thing.

We definitely need a reliable/efficient means of syncing riders with the movements of the animesh they are sat on. Making a sit target's location relative to a bone on the animesh seems like a very elegant solution. It avoids the clunkyness and server stress that using llSetLinkPrimitiveParamsFast would incur. And it simplifies the process of creating a sit animation because said animation need only be concerned with its local frame of reference. This would also make it more feasible for people to add their own (or reuse existing) sit animations to animiesh objects. Especially if they did not create the mesh and therefore do not have access to the source mesh/animations. Trying to make a sit animation that moves the pilot in sync with an animesh would be extremely difficult without that animesh's source files. And you'd need to make a new sit animation for every new animation the object plays on itself to keep the pilot in sync. Having this proposed feature would eliminate the need for that entirely!

This would also open up the possibility for expanding animesh objects in a modular way. Say, for example, a user creates an animesh horse. As a single mesh object, it would only allow for one sit target. But with this feature, addon parts that were made specifically for this horse could allow for additional concurrent riders. The horse's creator could make special rigged saddles comprised of two or more mesh objects, rig them to the horse, and then link them all together to form one new object in-world. With llSetLinkSitRigging(), this two-part saddle could have a rigged sit target for each component, thus allowing for two people to ride at the same time.

I'd like to propose one addition to this function: SIT_RIGGING_UPDATE_SEATED_AVATAR or something to that effect. This would be paired with a TRUE/FALSE value which signals the function to apply the new target bone/pos/rot/weight to an already seated avatar on that link. It wouldn't be able to move them to a new link, but it would make Lucia's last multi-step use case more streamlined without needing to un-sit/force-sit between each stage. Not needing to force-sit also means this use case could work outside of experiences too.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant