Kinematics ngược (IK) là một kỹ thuật phổ biến trong hoạt hình máy tính để hiệu quả làm cho các nhân vật di chuyển và tương tác một cách thực tế với môi trường của chúng. Quá trình tạo ra chuyển động thực tế cho một nhân vật thường yêu cầu nhiều lần thử nghiệm và điều chỉnh nhỏ các khớp khác nhau. Với IK, bạn có thể tạo dáng và hoạt hình cho nhiều phần của nhân vật bằng cách điều chỉnh hoặc thay đổi một đối tượng duy nhất.
Kỹ thuật hoạt hình này có thể cung cấp giải pháp cho những ví dụ sau:
IKControl
Bạn có thể sử dụng IKControl để thêm IK một cách thủ tục vào các rig nhân vật của bạn bên ngoài Animation Editor. Studio cho phép bạn lập trình áp dụng IK cho tất cả các nhân vật, chẳng hạn như R15, Rthro và các nhân vật nhập khẩu tùy chỉnh để tạo ra chuyển động và tương tác thực tế trong trò chơi của bạn.
Khi thêm một IKControl, hãy đặt các thuộc tính cần thiết đúng cách để tránh các kết quả hoạt hình không như mong đợi và không tự nhiên. Giống như tất cả các hoạt hình, hãy kiểm tra IKControls của bạn để đảm bảo rằng bạn đạt được hành vi mong muốn.
Các thuộc tính cần thiết
Khi thêm một IKControl vào Humanoid hoặc AnimationController của nhân vật, bạn phải đặt các thuộc tính cần thiết sau đây để kích hoạt IK:
| Thuộc tính | Mô tả |
|---|---|
| Type | Xác định loại hành vi của điều khiển IK. Xem Enum.IKControlType để biết danh sách các tùy chọn hành vi. Các loại hành vi phổ biến là Position hoặc Transform. |
| EndEffector | Một BasePart hoặc Bone trong rig nhân vật của bạn theo dõi về phía Target. Ví dụ, bạn có thể đặt một xương LeftHand là EndEffector để với tới một đối tượng tay nắm cửa được đặt là Target. |
| Target | Đối tượng mà EndEffector đạt đến hoặc chỉ về phía. Một Target có thể là bất kỳ đối tượng nào có vị trí thế giới. |
| ChainRoot | Định nghĩa chuỗi của BaseParts hoặc Bones mà IKControl ảnh hưởng đến. Tất cả các phần kết nối giữa ChainRoot và EndEffector đều bị ảnh hưởng bởi IKControl sử dụng loại hành vi đã định nghĩa. Ví dụ, nếu LeftHand của nhân vật của bạn được đặt là Target, bạn có thể áp dụng IK cho toàn bộ cánh tay trái bằng cách đặt ChainRoot thành LeftUpperArm. Để chỉ áp dụng IK cho các phần dưới khuỷu tay, hãy đặt ChainRoot thành LeftLowerArm. |
Kiểm tra IKControls
Bạn có thể thêm và chỉnh sửa IKControl một cách lập trình hoặc trực tiếp thông qua Explorer. Bạn thậm chí có thể thêm và thực hiện các thay đổi đối với IKControl trong một bài kiểm tra Play để nhanh chóng kiểm tra cách các thuộc tính khác nhau ảnh hưởng đến chuyển động của nhân vật.
Để nhanh chóng kiểm tra IKControl của bạn bằng cách sử dụng một Attachment làm mục tiêu:
Từ mezzanine của Studio, bắt đầu một bài kiểm tra.
Nhấp vào biểu tượng ⊕ bên cạnh HumanoidRootPart của mô hình nhân vật của bạn và thêm một Attachment.

Chọn Attachment và sử dụng công cụ Di chuyển để đặt đối tượng trước nhân vật của bạn trong viewport.

Trong cửa sổ Explorer, chọn biểu tượng ⊕ bên cạnh Humanoid của nhân vật và thêm một IKControl.

Chọn IKControl và đặt các giá trị thuộc tính sau trong cửa sổ Properties:
- Type: Chọn Transform từ danh sách thả xuống.
- Target: Chọn đối tượng Attachment mới tạo trong Explorer.

Các thuộc tính IKControl 
Explorer - Mô hình Nhân vật Cánh tay trái của nhân vật bạn giờ nên vươn tới mục tiêu Attachment. Bạn có thể thử nghiệm với việc di chuyển Attachment hoặc chỉnh sửa các thuộc tính của IKControl để đạt được các kết quả khác nhau.
Thêm các ràng buộc
Bạn có thể sử dụng Constraints để giới hạn cách các khớp có thể di chuyển khi đạt đến mục tiêu của chúng. Các ràng buộc có thể đảm bảo rằng các khớp như khuỷu tay và đầu gối uốn cong một cách tự nhiên, hoặc để làm cho các khớp cơ khí quay theo một hướng cụ thể.


Để thêm các ràng buộc cho nhân vật của bạn bằng cách sử dụng IKControl, IKControl và ràng buộc phải đáp ứng các điều kiện sau:
- Các attachment được tham chiếu trong thuộc tính Attachment0/Attachment1 của ràng buộc phải gắn vào cùng các bộ phận như Motor6D Part0/Part1.
- Vị trí tương đối của Attachment0/Attachment1 phải bằng với các vị trí tương ứng của Motor6D C0/C1 CFrames.
- Ràng buộc và IKControl chia sẻ cùng một cha Model.
Các hướng dẫn sau mô tả quá trình thêm một HingeConstraint để giới hạn việc xoay của khuỷu tay của nhân vật và thêm một BallSocketConstraint cho cổ tay để giới hạn góc quay.
Khuỷu tay
Các nhân vật R15 của Roblox đã bao gồm các attachment trong các khớp mà bạn có thể sử dụng để áp dụng ràng buộc khuỷu tay. Đối với khuỷu tay, cả LeftUpperArm và LeftLowerArm đều bao gồm một LeftElbowRigAttachment. Ngoài việc thêm một ràng buộc, bạn cũng cần thêm các attachment con bổ sung vào LeftElbowRigAttachment của mỗi phần để chỉ định trục nào mà khuỷu tay có thể quay quanh.
Để thêm HingeConstraint và các attachment con:
Trong Explorer, tìm mô hình của bạn và nhấp vào nút ⊕.
Thêm một HingeConstraint với tên LeftElbowConstraint.
Trong Explorer, điều hướng đến LeftUpperArm.LeftElbowRigAttachment và thêm một attachment:
Nhấp vào nút ⊕ để thêm một Attachment với tên LeftElbowConstraintAttachment0.
Trong viewport, chọn attachment và sử dụng công cụ Xoay để xoay attachment sao cho trục PrimaryAxis màu vàng là trục của việc quay được mong muốn của khuỷu tay.

Đặt thuộc tính LeftElbowConstraint.Attachment0 thành attachment mới này.
Trong Explorer, điều hướng đến LeftLowerArm.LeftElbowRigAttachment của mô hình bạn và thêm một attachment:
- Nhấp vào nút ⊕ và thêm một Attachment với tên LeftElbowConstraintAttachment1.
- Đặt thuộc tính LeftUpperArm.LeftElbowConstraint.Attachment1 thành attachment mới này.
- Sao chép thuộc tính LeftElbowConstraintAttachment0.CFrameOrientation và dán nó như giá trị thuộc tính LeftElbowConstraint.Attachment1.CFrameOrientation.

Kiểm tra IKControl của bạn để xác minh rằng khuỷu tay chỉ quay quanh trục bản lề của nó:
Cổ tay
Ngay cả khi có ràng buộc khuỷu tay, IKControl vẫn có thể tạo ra những dáng không thực tế ở cổ tay.

Bạn có thể cải thiện điều này bằng cách thêm một BallSocketConstraint để giới hạn việc quay của cổ tay. Mặc dù điều này tương tự như quá trình thêm một HingeConstraint vào khuỷu tay, bạn có thể sử dụng thuộc tính LimitsEnabled trên ràng buộc này để kiểm soát thêm phạm vi chuyển động của cổ tay.
Để thêm một BallSocketConstraint cho cổ tay:
- Trong Explorer, tìm mô hình của bạn và nhấp vào nút ⊕.
- Thêm một BallSocketConstraint với tên LeftWristConstraint.
- Tìm LeftLowerArm.LeftWristRigAttachment của mô hình bạn và thêm một attachment:
- Nhấp vào nút ⊕ và thêm một Attachment với tên LeftWristConstraintAttachment0.
- Trong viewport, chọn attachment và sử dụng công cụ Xoay để xoay attachment sao cho trục PrimaryAxis màu vàng hướng về phía đầu ngón tay của mô hình.

- Đặt thuộc tính LeftWristConstraint.Attachment0 thành attachment mới LeftWristConstraintAttachment0.
- Tìm LeftHand.LeftWristRigAttachment của mô hình bạn và thêm một attachment:
- Nhấp vào nút ⊕ và thêm một Attachment với tên LeftWristConstraintAttachment1.
- Sao chép thuộc tính LeftWristConstraintAttachment0.CFrameOrientation và dán như thuộc tính LeftWristConstraintAttachment1.CFrameOrientation.
- Đặt thuộc tính LeftWristConstraint.Attachment1 thành attachment mới LeftWristConstraintAttachment1.
- Trong Explorer, chọn LeftWristConstraint.
- Trong cửa sổ Properties, đặt các thuộc tính sau:
- Bật LimitsEnabled.
- Đặt UpperAngle thành 80. Điều này kiểm soát mức độ mà trục của ràng buộc có thể quay, và 80 độ là khoảng mức mà cổ tay nên có thể uốn cong.
- Tùy thuộc vào nhân vật của bạn, bạn có thể muốn điều chỉnh hướng của hình nón. Bạn có thể làm điều này bằng cách sử dụng công cụ Xoay để xoay Attachment0 của ràng buộc.
Khi chọn LeftWristConstraint, một hình nón màu xanh lá cây xuất hiện để minh họa phạm vi chuyển động của cổ tay.

Với ràng buộc đã được thiết lập, hãy kiểm tra IKControl với bàn tay chỉ xuống phía trước nhân vật và cổ tay nên quay và uốn cong thực tế hơn.