Cinématique Inverse (IK) est une technique courante en animation par ordinateur pour faire bouger efficacement les personnages 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 l'IK, vous pouvez poser et animer plusieurs parties d'un personnage en posant ou en ajustant un seul objet.
Cette technique d'animation peut fournir des solutions aux exemples suivants :
IKControl
Vous pouvez utiliser un IKControl pour ajouter de manière procédurale de l'IK à vos rigs de personnage en dehors de l'Éditeur d'Animation. Studio vous permet d'appliquer de manière programmatique l'IK à tous les personnages pour créer des mouvements et des interactions réalistes dans votre jeu.
Lors de l'ajout d'un IKControl, définissez correctement les propriétés requises pour éviter des résultats d'animation inattendus et non naturels. Comme pour toute animation, testez vos IKControls pour vous assurer que vous obtenez le comportement souhaité.
Propriétés requises
Lors de l'ajout d'un IKControl au Humanoid ou au AnimationController de votre personnage, vous devez définir les propriétés requises suivantes pour activer l'IK :
| 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 rig de personnage qui suit vers le Target. Par exemple, vous pouvez définir un os LeftHand comme un EndEffector pour atteindre un objet de poignée de porte défini comme le Target. |
| Target | L'objet que le EndEffector atteint ou pointe. Un Target peut être n'importe quel objet avec une position mondiale. |
| ChainRoot | Définit la chaîne de BaseParts ou Bones que le IKControl affecte. Toutes les parties connectées entre le ChainRoot et le EndEffector sont affectées 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 l'IK à tout le bras gauche en définissant ChainRoot sur le LeftUpperArm. Pour appliquer l'IK uniquement aux parties en dessous du coude, définissez ChainRoot sur le LeftLowerArm. |
Tester les IKControls
Vous pouvez ajouter et modifier IKControl de manière programmatique ou directement via l'Explorateur. Vous pouvez même ajouter et apporter des modifications à IKControl pendant un test de jeu pour vérifier rapidement comment diverses propriétés affectent les mouvements d'un personnage.
Pour tester rapidement votre IKControl en utilisant un Attachment comme cible :
Depuis le mezzanine de Studio, initiez un test de jeu.
Cliquez sur l'icône ⊕ à côté de 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 vue.

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

Sélectionnez le IKControl et définissez les valeurs de propriété 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 de IKControl pour obtenir différents résultats.
Ajouter des contraintes
Vous pouvez utiliser 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 en sorte que les articulations mécaniques tournent dans une orientation spécifique.


Pour ajouter des contraintes à votre personnage en utilisant IKControl, votre IKControl et la contrainte doivent répondre aux 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 parties que le Motor6D Part0/Part1.
- Les positions relatives de Attachment0/Attachment1 doivent être égales aux positions correspondantes des Motor6D C0/C1 CFrames.
- La contrainte et l'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 avec des rigs standard 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 chaque partie pour spécifier quel axe le coude peut pivoter.
Pour ajouter le HingeConstraint et les attachements enfants :
Dans la fenêtre Explorateur, localisez le LeftLowerArm de votre modèle et cliquez sur le ⊕ bouton.
Ajoutez un HingeConstraint avec le nom LeftElbowConstraint.
Dans la fenêtre Explorateur, naviguez vers le LeftUpperArm.LeftElbowRigAttachment et ajoutez un attachement :
Cliquez sur le ⊕ bouton pour ajouter un Attachment avec le nom LeftElbowConstraintAttachment0.
Dans la vue, sélectionnez l'attachement et utilisez l'outil Rotation pour faire pivoter l'attachement afin que l'PrimaryAxis jaune soit l'axe de rotation attendu de votre coude.

Définissez la propriété LeftElbowConstraint.Attachment0 sur ce nouvel attachement.
Dans la fenêtre Explorateur, naviguez vers le LeftLowerArm.LeftElbowRigAttachment de votre modèle et ajoutez un attachement :
- Cliquez sur le ⊕ bouton et ajoutez un 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 de LeftElbowConstraint.Attachment1.CFrameOrientation.

Testez votre IKControl pour vérifier que le coude ne tourne que autour de son axe de charnière :
Poignets
Même avec la contrainte du coude, l'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 cela 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 la fenêtre Explorateur, localisez le LeftHand de votre modèle et cliquez sur le ⊕ bouton.
- Ajoutez un BallSocketConstraint avec le nom LeftWristConstraint.
- Localisez le LeftLowerArm.LeftWristRigAttachment de votre modèle et ajoutez un attachement :
- Cliquez sur le ⊕ bouton et ajoutez un Attachment avec le nom LeftWristConstraintAttachment0.
- Dans la vue, sélectionnez l'attachement et utilisez l'outil Rotation pour faire pivoter l'attachement afin que l'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 un attachement :
- Cliquez sur le ⊕ bouton et ajoutez un 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 la fenêtre 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 pivoter, et 80 degrés est approximativement combien le poignet devrait pouvoir se plier.
- En fonction de votre personnage, vous voudrez peut-être ajuster la direction dans laquelle le cône pointe. Vous pouvez le faire en utilisant l'outil Rotation pour faire pivoter l'Attachment0 de la contrainte.
Lors de la sélection du LeftWristConstraint, un cône vert apparaît visualisant l'amplitude de mouvement du poignet.

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