Cinématique Inverse (CI) est une technique courante en animation numérique pour faire bouger les personnages de manière efficace et interagir de manière réaliste avec leur environnement. Le processus de création d'un mouvement réaliste pour un personnage nécessite souvent de nombreuses itérations et ajustements mineurs des différentes articulations. Avec la CI, vous pouvez poser et animer plusieurs parties d'un personnage en ajustant un seul objet.
Cette technique d'animation peut fournir des solutions pour les exemples suivants :
IKControl
Vous pouvez utiliser un IKControl pour ajouter de manière procédurale la CI à vos modèles de personnage en dehors de l'Éditeur d'Animation. Studio vous permet d'appliquer la CI de manière programmatique à tous les personnages, tels que R15, Rthro et les personnages personnalisés importés, pour créer des mouvements et des interactions réalistes dans votre jeu.
Lors de l'ajout d'un IKControl, assurez-vous de définir correctement les propriétés requises pour éviter des résultats d'animation inattendus et peu naturels. Comme pour toute animation, testez vos IKControls pour vous assurer d'obtenir le comportement souhaité.
Propriétés requises
Lorsque vous ajoutez un IKControl à Humanoid ou AnimationController de votre personnage, vous devez définir les propriétés requises suivantes pour activer la CI :
| Propriété | Description |
|---|---|
| Type | Spécifie le type de comportement du contrôle IK. Voir Enum.IKControlType pour la liste des options de comportement. Les types de comportement courants sont Position ou Transform. |
| EndEffector | Une BasePart ou Bone dans votre modèle de personnage qui suit vers le Target. Par exemple, vous pouvez définir un os LeftHand comme EndEffector pour atteindre un objet de poignée de porte défini comme Target. |
| Target | L'objet vers lequel le EndEffector atteint ou pointe. Un Target peut être n'importe quel objet avec une position dans le monde. |
| ChainRoot | Définit la chaîne de BaseParts ou Bones que le IKControl affecte. Tous les éléments connectés entre le ChainRoot et le EndEffector sont affectés par le IKControl en utilisant le type de comportement défini. Par exemple, si la LeftHand de votre personnage est définie comme le Target, vous pouvez appliquer la CI à tout le bras gauche en définissant ChainRoot sur le LeftUpperArm. Pour appliquer la CI uniquement aux parties sous le coude, définissez ChainRoot sur le LeftLowerArm. |
Test IKControls
Vous pouvez ajouter et modifier IKControl de manière programmatique ou directement via l'Explorateur. Vous pouvez même ajouter et modifier IKControl durant un test de jeu pour vérifier rapidement comment les différentes propriétés affectent les mouvements d'un personnage.
Pour tester rapidement votre IKControl en utilisant un Attachment comme target :
Depuis le mezzanine de Studio, initiez un test de jeu.
Cliquez sur l'icône ⊕ à côté du HumanoidRootPart de votre modèle de personnage et ajoutez un Attachment.

Sélectionnez l'Attachment et utilisez l'outil Déplacer pour positionner l'objet devant votre personnage dans la fenêtre de visualisation.

Dans la fenêtre Explorateur, sélectionnez l'icône ⊕ à côté du Humanoid de votre personnage et ajoutez un IKControl.

Sélectionnez le IKControl et définissez les valeurs des propriétés suivantes dans la fenêtre Propriétés :
- Type : Sélectionnez Transform dans le menu déroulant.
- Target : Sélectionnez le nouvel objet Attachment créé dans l'Explorateur.

Propriétés IKControl 
Explorateur - Modèle de personnage Le bras gauche de votre personnage devrait maintenant atteindre la cible Attachment. Vous pouvez expérimenter en déplaçant le Attachment ou en modifiant les propriétés du IKControl pour obtenir des résultats différents.
Ajouter des contraintes
Vous pouvez utiliser des Constraints pour restreindre comment les articulations peuvent se déplacer lorsqu'elles atteignent leur cible. Les contraintes peuvent garantir que des articulations comme les coudes et les genoux se plient naturellement, ou pour faire tourner les joints mécaniques dans une orientation spécifique.


Pour ajouter des contraintes à votre personnage en utilisant IKControl, votre IKControl et la contrainte doivent respecter les conditions suivantes :
- Les attachements référencés dans les propriétés Attachment0/Attachment1 de la contrainte doivent être attachés aux mêmes pièces que le Motor6D Part0/Part1.
- Les positions relatives de Attachment0/Attachment1 doivent correspondre aux positions correspondantes des CFrames Motor6D C0/C1.
- La contrainte et le IKControl partagent le même parent Model.
Les instructions suivantes décrivent le processus d'ajout d'un HingeConstraint pour restreindre la rotation du coude d'un personnage et d'ajouter un BallSocketConstraint au poignet pour limiter l'angle de rotation.
Coude
Les personnages Roblox R15 incluent déjà des attachements dans leurs articulations que vous pouvez utiliser pour appliquer la contrainte du coude. Pour le coude, à la fois le LeftUpperArm et le LeftLowerArm incluent un LeftElbowRigAttachment. En plus d'ajouter une contrainte, vous devez également ajouter des attachements enfants supplémentaires à chaque LeftElbowRigAttachment de pièce pour spécifier autour de quel axe le coude peut pivoter.
Pour ajouter le HingeConstraint et les attachements enfants :
Dans l'Explorateur, localisez le LeftLowerArm de votre modèle et cliquez sur le ⊕ button.
Ajoutez un HingeConstraint avec le nom LeftElbowConstraint.
Dans l'Explorateur, naviguez vers le LeftUpperArm.LeftElbowRigAttachment et ajoutez une attache :
Cliquez sur le ⊕ button pour ajouter une Attachment avec le nom LeftElbowConstraintAttachment0.
Dans la fenêtre de visualisation, sélectionnez l'attache et utilisez l'outil Tourner pour faire pivoter l'attache de sorte que l'axe PrimaryAxis jaune soit l'axe de la rotation attendue du coude.

Définissez la propriété LeftElbowConstraint.Attachment0 sur ce nouvel attachement.
Dans l'Explorateur, naviguez vers le LeftLowerArm.LeftElbowRigAttachment de votre modèle, et ajoutez une attache :
- Cliquez sur le ⊕ button et ajoutez une Attachment avec le nom LeftElbowConstraintAttachment1.
- Définissez la propriété LeftUpperArm.LeftElbowConstraint.Attachment1 sur ce nouvel attachement.
- Copiez la propriété LeftElbowConstraintAttachment0.CFrameOrientation et collez-la comme valeur LeftElbowConstraint.Attachment1.CFrameOrientation.

Testez votre IKControl pour vérifier que le coude tourne uniquement autour de son axe de charnière :
Poignets
Même avec la contrainte du coude, le IKControl peut encore produire des poses irréalistes avec les poignets.

Vous pouvez améliorer cela en ajoutant un BallSocketConstraint pour limiter la rotation du poignet. Bien que ce soit similaire au processus d'ajout d'un HingeConstraint au coude, vous pouvez utiliser la propriété LimitsEnabled sur cette contrainte pour contrôler davantage l'amplitude de mouvement du poignet.
Pour ajouter un BallSocketConstraint pour le poignet :
- Dans l'Explorateur, localisez votre modèle LeftHand et cliquez sur le ⊕ button.
- Ajoutez un BallSocketConstraint avec le nom LeftWristConstraint.
- Localisez le LeftLowerArm.LeftWristRigAttachment de votre modèle et ajoutez une attache :
- Cliquez sur le ⊕ button et ajoutez une Attachment avec le nom LeftWristConstraintAttachment0.
- Dans la fenêtre de visualisation, sélectionnez l'attache et utilisez l'outil Tourner pour faire pivoter l'attache afin que l'axe PrimaryAxis jaune pointe vers les doigts du modèle.

- Définissez la propriété LeftWristConstraint.Attachment0 sur le nouvel LeftWristConstraintAttachment0.
- Localisez le LeftHand.LeftWristRigAttachment de votre modèle et ajoutez une attache :
- Cliquez sur le ⊕ button et ajoutez une Attachment avec le nom LeftWristConstraintAttachment1.
- Copiez la propriété LeftWristConstraintAttachment0.CFrameOrientation et collez-la comme propriété LeftWristConstraintAttachment1.CFrameOrientation.
- Définissez la propriété LeftWristConstraint.Attachment1 sur ce nouvel LeftWristConstraintAttachment1.
- Dans l'Explorateur, sélectionnez le LeftWristConstraint.
- Dans la fenêtre Propriétés, définissez les éléments suivants :
- Activez LimitsEnabled.
- Définissez UpperAngle sur 80. Cela contrôle combien l'axe de la contrainte peut tourner, et 80 degrés est approximativement combien le poignet devrait pouvoir se plier.
- Selon votre personnage, vous voudrez peut-être ajuster la direction dans laquelle pointe le cône. Vous pouvez le faire en utilisant l'outil Tourner pour faire pivoter l'Attachment0 de la contrainte.
Lorsque vous sélectionnez le LeftWristConstraint, un cône vert apparaît pour visualiser l'amplitude de mouvement du poignet.

Avec la contrainte configurée, testez le IKControl avec la main pointant vers le bas devant le personnage et le poignet devrait tourner et se plier de manière plus réaliste.