Hướng dẫnCách làm8 phút đọc

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.

Content Browser › Hero

Hero · Static Mesh

AFK AI

Rig with AFK AI

Edit… · Duplicate · Rename …

Content Browser › /Game/Characters
  • HeroStatic Mesh
  • Hero_riggedSkeletal Mesh
  • Hero_rigged_SkeletonSkeleton
  • Hero_rigged_PhysicsAssetPhysics Asset
  • …_Idle_AAnimation Sequence
  • …_WalkAnimation Sequence
  • …_JogAnimation Sequence
  • …
Hình vẽ mô phỏng plugin, không phải ảnh chụp màn hình: lệnh Rig with AFK AI trong menu chuột phải của một mesh, cùng skeletal mesh, skeleton, physics asset và các animation mà nó thêm vào cạnh bản gốc.

Unreal Engine tạo chuyển động cho nhân vật rất đẹp, nhưng không tự rig nhân vật cho bạn. Một static mesh từ phần mềm điêu khắc hay từ gói trên marketplace không có bộ xương lẫn skin weight, nên cách thường làm là đi đường vòng: xuất ra, rig trong Blender hoặc Mixamo, nhập lại thành skeletal mesh, rồi đi tìm animation vừa với nó.

Plugin AFK AI bỏ qua đường vòng đó. Bấm chuột phải vào mesh trong Content Browser và chọn Rig with AFK AI. Khoảng một phút sau, một skeletal mesh tên Hero_rigged nằm trong cùng thư mục, kèm skeleton, physics asset và các animation, sẵn sàng cho Animation Blueprint. Không có C++ nào phải biên dịch, nên plugin chạy được cả trong dự án chỉ dùng Blueprint.

Bạn cần gì

Unreal Engine
5.1 trở lên, trên Windows, Mac hoặc Linux. Dự án chỉ dùng Blueprint cũng được.
Mesh của bạn
Static mesh hoặc skeletal mesh được nhập từ file .fbx, .glb hoặc .gltf, tối đa 50 MB. AFK AI nhận đúng file gốc đó.
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.

Cài plugin

  1. Tải plugin từ trang plugin Unreal Engine và giải nén. Bạn sẽ có một thư mục tên AFKAI.
  2. Đặt nó vào thư mục Plugins của dự án, cạnh file .uproject: MyGame/Plugins/AFKAI/AFKAI.uplugin. Nếu chưa có thư mục Plugins thì tạo mới.
  3. Mở dự án, hoặc khởi động lại. Plugin sẽ bật hai plugin có sẵn trong Unreal là Python Editor Script Plugin và Editor Scripting Utilities. Nếu Unreal hỏi có khởi động lại không, chọn có.

Menu AFK AI sẽ xuất hiện trên thanh menu của editor. Muốn có nó trong mọi dự án, hãy đặt thư mục vào Engine/Plugins/Marketplace/AFKAI trong thư mục cài Unreal, rồi bật cho từng dự án trong Edit > Plugins.

Đăng nhập và rig

  1. Chọn AFK AI > Sign in.... Trình duyệt mở afk.ai; đăng nhập bằng Google rồi quay lại Unreal. Menu AFK AI giờ hiện email của bạn và số lượt rig còn lại trong tháng.
  2. Trong Content Browser, bấm chuột phải vào mesh và chọn Rig with AFK AI. (Hoặc chọn mesh rồi vào AFK AI > Rig the selected mesh....)
  3. Một cửa sổ nhỏ hỏi Body type (Human, hoặc loài động vật hay sinh vật tương ứng), Animations (All animations, hoặc Rig only nếu chỉ cần bộ xương) và Facing (để nguyên Auto). Tiêu đề cửa sổ ghi rõ thao tác này dùng một lượt rig. Bấm OK.
  4. Cứ làm việc tiếp. Menu AFK AI hiện tiến độ, Output Log cũng vậy, ở các dòng bắt đầu bằng "AFK AI".

Nếu trình duyệt không quay lại được Unreal (do tường lửa, hoặc Unreal chạy trên máy khác), trang afk.ai sẽ hiện mã đăng nhập. Chọn AFK AI > I have a sign-in code..., dán mã rồi bấm OK.

Bạn nhận được gì

  • Skeletal Mesh: Hero_rigged, trong cùng thư mục với bản gốc, đã được chọn sẵn. Mesh gốc không bị đụng tới.
  • Skeleton: làm riêng cho kiểu cơ thể. Model người có 66 xương, mỗi ngón tay ba khớp, đặt tên theo xương của mannequin Unreal: pelvis, spine_01, clavicle_l, upperarm_l, thigh_l, v.v.
  • Physics Asset: được tạo khi nhập, dùng cho ragdoll và va chạm.
  • Animation: mỗi animation là một Animation Sequence. Với nhân vật dạng người, có tới 593: đứng chờ, đi, chạy bộ, chạy nước rút, nhảy, né, chiêu kiếm, khiên, cung và súng ngắn, nhảy múa, trúng đòn và ngã gục. Tài khoản miễn phí nhận các animation miễn phí, còn một gói mở khóa phần còn lại.
  • File FBX: Hero_rigged.fbx, lưu cạnh file nguồn gốc, hoặc trong thư mục Saved/AFK AI của dự án nếu không ghi được vào chỗ kia. Rig lại thì bạn được Hero_rigged_2: không có gì bị ghi đè.

Như mọi lần nhập khác, các asset mới chỉ được ghi xuống ổ đĩa khi bạn lưu: File > Save All.

Nhân vật anime ở T-pose, các khớp afk.ai đã đặt hiện thành chấm, đến tận các ngón tay
anime-girl.glb · skeleton
root  └ pelvis    └ spine_01      └ spine_02        └ spine_03          └ neck_01            └ head          └ clavicle_l            └ upperarm_l              └ lowerarm_l                └ hand_l                  └ thumb_01_l  thumb_02_l  thumb_03_l                  └ index_01_l  index_02_l  index_03_l                  └ middle_01_l  middle_02_l  middle_03_l                  └ ring_01_l  ring_02_l  ring_03_l                  └ pinky_01_l  pinky_02_l  pinky_03_l          └ clavicle_r ... (bên phải cũng vậy)    └ thigh_l      └ calf_l        └ foot_l          └ ball_l    └ thigh_r ... (bên phải cũng vậy)
Bộ xương hình người mà mọi bản rig của afk.ai đều có: 66 xương, với ba khớp ở mỗi ngón tay và ngón cái, được đặt tên theo cách mannequin của Unreal Engine đặt.

Xem nhân vật chuyển động, không cần code

Kéo Hero_rigged vào level. Trong panel Details, mục Animation, đặt Animation Mode thành Use Animation Asset, chọn một animation ở Anim to Play (ví dụ Walk) và giữ Looping bật. Bấm Play, hoặc xem luôn trong viewport.

Để xem nhanh từng animation, bấm đúp vào bất kỳ Animation Sequence nào: animation editor mở ra và phát nó trên nhân vật.

Animation Blueprint cho nhân vật người chơi

Cách dựng kinh điển: đứng yên thì idle, rồi đi, rồi chạy bộ khi nhân vật tăng tốc.

  1. Bấm chuột phải vào Hero_rigged và chọn Create > Anim Blueprint. Đặt tên là ABP_Hero.
  2. Trong Event Graph, thêm một biến float tên Speed. Từ Event Blueprint Update Animation, gọi Try Get Pawn Owner, kiểm tra bằng Is Valid, rồi Get Velocity, rồi Vector Length XY, và gán kết quả cho Speed.
  3. Trong AnimGraph, bấm chuột phải, chọn Add New State Machine, đặt tên Locomotion và nối nó vào Output Pose.
  4. Bên trong, tạo ba state Idle, Walk và Jog, rồi kéo các animation Idle_A, Walk và Jog từ Asset Browser vào từng state, nối với Output Animation Pose của state đó.
  5. Vẽ transition hai chiều giữa các state, với điều kiện theo Speed tính bằng centimet mỗi giây: Idle sang Walk khi Speed > 10, Walk sang Jog khi Speed > 300, và chiều ngược lại khi tốc độ giảm xuống dưới mức đó.
  6. Trong Character Blueprint, chọn component Mesh, đặt Skeletal Mesh Asset thành Hero_rigged và Anim Class thành ABP_Hero. Dời mesh xuống đáy capsule và xoay cho nó nhìn theo mũi tên xanh, giống mannequin của template.

Muốn bắt đầu từ C++? Vẫn ý đó, ở dạng gọn nhất: phát một animation lặp khi game bắt đầu.

// HeroCharacter.h
UPROPERTY(EditAnywhere, Category = "Animation")
TObjectPtr<UAnimSequence> IdleAnimation;

// HeroCharacter.cpp
#include "Animation/AnimSequence.h"

void AHeroCharacter::BeginPlay()
{
    Super::BeginPlay();
    if (IdleAnimation)
    {
        GetMesh()->PlayAnimation(IdleAnimation, /*bLooping=*/ true);
    }
}
EntryIdle_A↓ Speed > 10↑ Speed < 10Walk↓ Speed > 300↑ Speed < 300Jog
Hình vẽ: state machine Locomotion. Mỗi state phát một animation, và Speed, tính bằng centimet mỗi giây, quyết định chuyển qua lại giữa chúng.

Root motion, với một chút Python

Một số animation tự đẩy nhân vật đi tới: tên của chúng kết thúc bằng _RM, như Roll_RM, Dodge_left_RM hay Sword_Dash_RM. Số còn lại phát tại chỗ. Unreal yêu cầu bật root motion cho từng animation, và plugin đã bật sẵn Python của Unreal, nên vài dòng code là xử lý được tất cả một lượt. Dán đoạn này vào dòng lệnh của Output Log, sau khi chuyển từ Cmd sang Python:

import unreal

folder = "/Game/Characters"  # the folder Hero_rigged is in
for path in unreal.EditorAssetLibrary.list_assets(folder, recursive=False):
    anim = unreal.EditorAssetLibrary.load_asset(path)
    if isinstance(anim, unreal.AnimSequence) and anim.get_name().endswith("_RM"):
        anim.set_editor_property("enable_root_motion", True)
        unreal.EditorAssetLibrary.save_loaded_asset(anim)
        unreal.log("Root motion on: " + anim.get_name())

Sau đó, trong Class Defaults của ABP_Hero, đặt Root Motion Mode thành Root Motion from Everything nếu bạn phát chúng trong state machine, hoặc phát chúng dưới dạng montage.

Retarget qua lại với mannequin UE5

Xương của bộ xương được đặt tên theo mannequin, nên công cụ retarget của Unreal ghép chúng với nhau mà gần như không cần chỉnh gì. Việc này đi được cả hai chiều: animation của template Third Person lên nhân vật của bạn, hoặc animation của afk.ai lên Manny và Quinn.

Trong Unreal 5.4 trở lên:

  1. Bấm chuột phải vào một animation, chẳng hạn một animation của template, và chọn Retarget Animations (Retarget Animation Assets ở các bản mới nhất).
  2. Đặt Target Preview Mesh thành Hero_rigged. Nguồn là mesh đi kèm animation đó.
  3. Giữ Auto Generate Retargeter bật: Unreal tự tạo IK Rig và IK Retargeter.
  4. Đánh dấu các animation bạn muốn, bấm Export Animations, chọn thư mục và bấm Export.

Đổi chỗ nguồn và đích để đưa animation của Hero_rigged lên mannequin. Ở bản 5.1 đến 5.3, tạo một IK Rig cho mỗi bộ xương và một IK Retargeter giữa chúng, rồi dùng Export Selected Animations của retargeter. Dù làm cách nào, hãy phát thử vài kết quả trước khi dùng thật, nhất là phần bàn tay.

Sinh vật và đạo cụ

Cũng cú bấm chuột phải đó rig được rồng, ngựa, khủng long, nhện hay cá mập: chỉ cần chọn kiểu cơ thể trong cửa sổ tùy chọn. Mỗi kiểu có bộ xương làm riêng cho cơ thể đó và animation làm riêng cho bộ xương đó, như vỗ cánh, phi nước đại, gầm hay bơi, nên thế giới động vật trong game open-world không cần đến người rig. Đạo cụ dùng kiểu Object: nảy, xoay, rung lắc và co giãn cho vật phẩm nhặt được hay cánh cửa. Hướng dẫn về động vật liệt kê mọi kiểu cơ thể và animation của từng kiểu.

  • Rồng
  • Bốn chân
  • Có móng guốc
  • Khủng long
  • Nhện
  • Cá
Sáu trong số các kiểu cơ thể khác, được rig trên afk.ai/rig và phát các hoạt ảnh riêng của chúng.

Thế nào thì tính là một lượt rig

Mỗi lần rig tới được AFK AI là 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. Stop waiting chỉ khiến Unreal thôi chờ: việc rig vẫn tiếp tục và vẫn bị tính. Lần rig thất bại thì không bị tính, và thông báo sẽ nói lý do. Menu AFK AI hiện số lượt rig còn lại; khi hết lượt, See plans mở ra các gói của afk.ai.

Khi có trục trặc

Không thấy menu AFK AI
Trong Edit > Plugins, kiểm tra AFK AI và Python Editor Script Plugin đã bật chưa, rồi khởi động lại. Nếu còn lỗi khác, Output Log sẽ ghi "AFK AI couldn't start" kèm lý do.
"has no source file recorded"
Hoặc "was imported from a .obj file": AFK AI cần file gốc .fbx, .glb hoặc .gltf. Xuất model sang một trong các định dạng đó, nhập vào, rồi rig file đó.
"Couldn't find Hero's source file"
File đã bị di chuyển sau khi nhập. Bấm chuột phải vào mesh, chọn Reimport With New File, chọn file ở vị trí hiện tại rồi rig lại.
"Unreal didn't import it as a skeletal mesh"
Việc rig đã thành công, và file FBX được lưu ở chỗ thông báo ghi. Kéo nó vào Content Browser và nhập thành Skeletal Mesh kèm animation. Chuyện này có thể xảy ra với importer mới trong Unreal 5.5 trở lên.
"Couldn't make a secure connection to AFK AI"
Proxy, phần mềm diệt virus hoặc tường lửa công ty đang chặn. Thử mạng khác.
Rig thất bại
Đọc thông báo. Thường thì chọn kiểu cơ thể khác, hoặc để model đứng thẳng và quay mặt về phía trước là được.

Câu hỏi thường gặp

Unreal Engine 5 có tự rig nhân vật được không?

Với static mesh thì không. Unreal retarget được animation giữa các bộ xương đã có sẵn, và có công cụ để tự tay dựng, chỉnh bộ xương, nhưng không có gì rig mesh giúp bạn. Plugin AFK AI làm phần đó: biến static mesh thành skeletal mesh có skin weight và animation, phần còn lại để Unreal lo.

Tôi có cần C++ hay Visual Studio không?

Không. Plugin là Python do chính Unreal chạy, không có gì phải biên dịch, nên nó chạy được trong dự án chỉ dùng Blueprint. Đoạn C++ ở trên chỉ dành cho dự án vốn đã dùng C++.

Plugin chạy được trên những phiên bản Unreal Engine nào?

Unreal Engine 5.1 trở lên, trên Windows, Mac và Linux.

Tôi có rig được model nhập từ file .obj không?

Không trực tiếp được: plugin gửi file nguồn gốc của mesh, và chỉ nhận .fbx, .glb hoặc .gltf. Từ ứng dụng 3D, xuất model sang một trong các định dạng đó, nhập vào, rồi rig.

Có dùng được với animation của mannequin UE5 không?

Được. Xương được đặt tên theo mannequin, nên retargeter ghép chúng mà gần như không cần thiết lập, theo cả hai chiều. Xem mục "Retarget qua lại với mannequin UE5" ở trên.

Tôi có dùng nhân vật đã rig trong game bán 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.

File đã rig nằm ở đâu, nếu tôi muốn dùng trong ứng dụng khác?

Hero_rigged.fbx được lưu cạnh file nguồn gốc, hoặc trong thư mục Saved/AFK AI của dự án. Nó mở được trong Blender, Maya và mọi ứng dụng đọc FBX, kèm cả animation.

Có plugin cho Unity hay Blender không?

Có. Xem hướng dẫn cho Unity và Blender, cùng tổng quan về 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.

Rig mô hình

Hướng dẫn khác