Hướng dẫnCách làm6 phút đọc
Rig và tạo chuyển động cho nhân vật 3D trong Godot 4: Add-on AFK AI, AnimationPlayer và AnimationTree
Chọn model trong dock FileSystem, bấm Rig, khoảng một phút sau file GLB đã rig kèm animation nằm ngay cạnh, các animation đi bộ và idle đã lặp sẵn.
Signed in as you@example.comSign out
3 of 3 rigs left this month.
Model: hero.glb
Body typeHuman
AnimationsAll animations
FacingAuto
RigRigging...Cancel
- hero_riggedNode3D
- └Skeleton3DSkeleton3D
- └HeroMeshInstance3D
- └AnimationPlayerAnimationPlayer
- └Idle_Aloop ⟳
- └Walkloop ⟳
- └Jogloop ⟳
- └Sprintloop ⟳
- └…
Godot phát animation rất tốt nhưng không có cách nào tạo bộ rig. Vì thế một nhân vật thường phải đi một vòng: xuất ra, rig trong Blender (hoặc Mixamo, chỉ cho nhân vật dạng người), đi tìm animation, xuất GLB, rồi sau khi nhập vào Godot lại phải bật lặp cho từng animation lặp.
Add-on AFK AI đi trọn vòng đó từ một dock trong editor của Godot. Bấm vào model trong dock FileSystem, rồi bấm Rig. Khoảng một phút sau, hero_rigged.glb được lưu cạnh hero.glb, với bộ xương làm riêng cho cơ thể của nó, skin weight và các animation nằm trong một AnimationPlayer. Các animation idle, đi bộ và chạy đã được đặt lặp sẵn.
Bạn cần gì
- Godot
- 4.2 trở lên, bản tiêu chuẩn hoặc bản .NET.
- Model của bạn
- File
.glb,.gltfhoặc.fbxtrong dự án, tối đa 50 MB. File.gltfphải chứa mọi thứ trong một file; nếu có file.binđi kèm, hãy xuất sang.glb. - Tài khoản afk.ai
- Miễn phí, đăng nhập bằng Google. Mỗi lần rig dùng một lượt rig trong tháng của tài khoản, giống như trên afk.ai/rig.
- Internet
- Việc rig chạy trên máy chủ của afk.ai. Chỉ file model bạn chọn được gửi đi.
Cài add-on
- Tải add-on về từ trang plugin cho Godot.
- Chép thư mục
addons/afk_aicủa nó vào thư mụcaddonscủa dự án. Nếu dự án chưa có thư mụcaddonsthì tạo mới. - Mở Project > Project Settings > Plugins và tích Enable cạnh AFK AI.
Dock AFK AI sẽ xuất hiện ở bên phải, cạnh Inspector.
Rig một model
- Đăng nhập. Bấm Sign in trong dock AFK AI. Trình duyệt mở afk.ai; đăng nhập bằng Google ở đó. Dock hiện email của bạn và số lượt rig còn lại trong tháng. Nếu trình duyệt không quay lại được Godot, trang sẽ hiện mã đăng nhập: dán mã vào mục I have a sign-in code rồi bấm Use.
- Chọn model. Trong dock FileSystem, bấm vào file của model.
- Chọn tùy chọn. Body type: Human cho người và mọi thứ đi hai chân, hoặc đúng loài động vật hay sinh vật của model. Animations: All animations, hoặc Rig only nếu chỉ cần bộ xương. Facing: để Auto.
- Bấm Rig. Dock cho biết đang làm gì: tải lên, chờ, rig, tải về. Trong lúc đó bạn cứ làm việc tiếp.
Khi xong, hero_rigged.glb được lưu cạnh hero.glb, đã được nhập và chọn sẵn. Bản gốc không bị đụng tới. Rig lại cùng model thì bạn được hero_rigged_2.glb, nên không có gì bị ghi đè.
Trong file GLB đã rig có gì
Kéo hero_rigged.glb vào scene để dùng: nó vào dưới dạng một node duy nhất, mọi thứ nằm bên dưới.
- Skeleton3D
- Bộ xương làm cho kiểu cơ thể, mesh của bạn đã được skin vào đó. Nhân vật người có 66 xương, đủ cả từng ngón tay, đặt tên pelvis, spine_01, hand_r, foot_l, v.v.
- AnimationPlayer
- Mọi animation, mỗi cái một tên riêng. Với nhân vật dạng người là tới 593 animation: Idle_A, Walk, Jog, Sprint, Jump_Start, Sword_Attack, Dance_Groove và hàng trăm cái khác. Tài khoản miễn phí nhận các animation miễn phí, còn gói trả phí mở thêm phần còn lại.
- Lặp
- Idle, đi bộ, chạy, bay và bơi đã lặp sẵn. Add-on ghi thiết lập này vào import settings của file trước khi Godot nhập nó.
- Hướng quay mặt
- Nhân vật quay mặt về +Z, như mọi model glTF.
Phát animation bằng AnimationPlayer
Nhân vật người chơi đơn giản nhất: một CharacterBody3D có CollisionShape3D (hình capsule), kéo model đã rig vào bên dưới và đổi tên thành Hero. Gắn script này vào CharacterBody3D:
extends CharacterBody3D
const SPEED := 4.0
var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
@onready var hero: Node3D = $Hero
@onready var anim: AnimationPlayer = $Hero/AnimationPlayer
func _physics_process(delta: float) -> void:
var input := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var direction := Vector3(input.x, 0.0, input.y)
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
if not is_on_floor():
velocity.y -= gravity * delta
move_and_slide()
if direction.length() > 0.1:
# the model faces +Z: turn that toward where it's going
hero.rotation.y = lerp_angle(hero.rotation.y, atan2(direction.x, direction.z), 10.0 * delta)
anim.play("Jog", 0.2) # 0.2 s blend from whatever was playing
else:
anim.play("Idle_A", 0.2)Chạy thử, các phím mũi tên sẽ cho nhân vật chạy bộ quanh màn hình, buông phím thì nhân vật từ từ về idle. Gọi play với animation đang phát thì nó chỉ phát tiếp, nên gọi mỗi khung hình cũng không sao.
Pha trộn bằng AnimationTree
AnimationTree pha trộn các animation theo tốc độ và xử lý các động tác một lần như đòn tấn công. Bạn chỉ cần thiết lập một lần trong editor:
- Thêm node AnimationTree vào nhân vật. Trong Inspector, đặt Anim Player là
Hero/AnimationPlayervà Tree Root là một AnimationNodeStateMachine mới. - Trong panel AnimationTree ở dưới cùng, nhấp chuột phải và thêm một BlendSpace1D. Đặt tên là
Locomotion, mở nó ra và thêm ba điểm: Idle_A ở 0, Walk ở 1.5 và Jog ở 4 (đặt Max Space của nó là 4). - Nhấp chuột phải lần nữa và thêm animation Sword_Attack. Nối Start tới Locomotion, Locomotion tới Sword_Attack, và Sword_Attack quay về Locomotion với Switch Mode đặt là At End và Advance Mode là Auto.
- Trong Project > Project Settings > Input Map, thêm action tên
attackvà gán cho nó một phím.
Sau đó, trong cùng script, bỏ hai dòng anim.play và điều khiển tree thay vào đó:
@onready var tree: AnimationTree = $AnimationTree
@onready var playback: AnimationNodeStateMachinePlayback = tree.get("parameters/playback")
func _process(_delta: float) -> void:
tree.set("parameters/Locomotion/blend_position", Vector2(velocity.x, velocity.z).length())
if Input.is_action_just_pressed("attack"):
playback.travel("Sword_Attack")
Khi AnimationTree đang hoạt động, chính nó phát animation, nên đừng gọi thêm play của AnimationPlayer.
Cầm kiếm, đổi chế độ lặp
Để đặt một vật vào tay nhân vật, chọn Skeleton3D của nó, thêm BoneAttachment3D bên dưới, đặt Bone Name là hand_r, rồi đặt thanh kiếm dưới attachment đó. Kiếm sẽ theo tay qua mọi animation.
Để đổi animation nào lặp, nhấp đúp vào hero_rigged.glb trong dock FileSystem để mở Advanced Import Settings. Chọn animation dưới AnimationPlayer ở bên trái, đổi Loop Mode, rồi bấm Reimport.
Động vật, sinh vật và đạo cụ
Chọn kiểu cơ thể trong dock trước khi bấm Rig: Fox cho chó, mèo và sói, Horse cho mọi loài có móng guốc, Bird, Dragon, Kaiju cho khủng long, Spider, Insect, Snake, Fish, Kangaroo, Frog, Turtle, Ghost, hoặc Object cho đạo cụ. Mỗi kiểu có bộ xương làm cho cơ thể đó và animation làm riêng cho nó: phi nước đại, vỗ cánh, gầm, bơi, trườn. Chúng phát theo cùng một cách, với cùng AnimationPlayer và AnimationTree. Mọi model rig theo cùng kiểu cơ thể đều có cùng tên xương và tên animation, nên AnimationTree của một con sói dùng được cho mọi con sói. Hướng dẫn về động vật liệt kê animation của từng kiểu.
- Rồng
- Bốn chân
- Có móng guốc
- Khủng long
- Nhện
- Cá
Thế nào thì tính là một lượt rig
Mỗi lần rig đến được AFK AI dùng một lượt rig của tháng này, giống như trên afk.ai/rig và trong các plugin AFK AI khác. Cancel chỉ dừng việc chờ chứ không dừng việc rig, và lượt đó vẫn bị tính. Lần rig thất bại không bị tính. Khi hết lượt rig, dock sẽ báo và hiện See plans, mở các gói của afk.ai.
Câu hỏi thường gặp
Godot có sẵn công cụ rig tự động không?
Không. Godot nhập bộ xương và animation có sẵn, và tính năng retarget của nó chuyển một bộ xương dạng người sang bộ xương khác, nhưng nó không rig mesh. Add-on AFK AI lo phần đó, rồi giao cho Godot một file GLB bình thường.
Có chạy trên Godot 3 không?
Không. Add-on cần Godot 4.2 trở lên. Với Godot 3, hãy rig model trên afk.ai/rig và nhập file GLB tải về.
Có dùng được trong dự án C# không?
Được. Add-on viết bằng GDScript, bản .NET của Godot cũng chạy được, và file GLB đã rig thì như nhau. Trong C#, phát animation bằng GetNode<AnimationPlayer>("Hero/AnimationPlayer").Play("Jog", 0.2);.
Sao lại là GLB mà không phải FBX?
GLB là định dạng Godot nhập tốt nhất: bộ xương, skin weight và mọi animation đều giữ nguyên, trên mọi phiên bản Godot 4. File gốc của bạn có thể là FBX; thứ trả về là GLB.
Add-on có lọt vào game xuất ra không?
Thứ game của bạn dùng là file GLB đã rig. Bản thân add-on chỉ hoạt động trong editor; để bỏ file của nó khỏi bản xuất, thêm addons/afk_ai/* vào phần loại trừ trong tab Resources của export preset.
Có rig nhiều model cùng lúc được không?
Mỗi lần một model, khoảng một phút mỗi model. Để rig cả thư mục bằng script, hãy dùng API rig: nó ghi ra đúng file GLB như vậy.
Có dùng nhân vật đã rig trong game thương mại được không?
Được. Bộ xương và animation là CC0, còn model vẫn là của bạn.
AFK AI có plugin cho Blender, Unity hay Unreal không?
Có. Xem hướng dẫn cho Blender, Unity và Unreal Engine, cùng tổng quan mọi plugin AFK AI cho cả chín ứng dụng.
Rig và tạo hoạt ảnh cho mô hình của bạn
AI rig mô hình ngay trên trình duyệt của bạn, rồi hàng trăm hoạt ảnh phát trên đó. Tải xuống một file GLB cho mọi engine.
Hướng dẫn khác
Cách làm
Rig tự động nhân vật trong Blender: add-on AFK AI miễn phí
Chọn model, bấm Rig, khoảng một phút sau bản sao đã rig kèm animation đứng ngay cạnh nó, trong Blender 4.2 trở lên.
Cách làm
Rig tự động nhân vật trong Unreal Engine 5: từ static mesh đến skeletal mesh có animation
Bấm chuột phải vào mesh, chọn Rig with AFK AI, một phút sau skeletal mesh có skeleton, physics asset và animation đã nằm trong cùng thư mục.
Cách làm
Rig tự động mọi model 3D ngay trong Unity: sẵn sàng cho Humanoid, kèm các clip animation
Chọn model trong cửa sổ Project và bấm Rig. Một phút sau, file FBX đã rig nằm ngay cạnh, thiết lập sẵn kiểu Humanoid, mỗi animation là một clip.