РуководстваИнструкция6 мин чтения
Риг и анимация 3D-персонажа в Godot 4: Аддон AFK AI, AnimationPlayer и AnimationTree
Щёлкните модель в панели FileSystem, нажмите Rig, и примерно через минуту рядом появится GLB с ригом и анимациями, где ходьба и idle уже зациклены.
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 отлично проигрывает анимации, но создать риг не умеет. Поэтому с персонажем обычно приходится ходить по кругу: экспортировать его, создать риг в Blender (или в Mixamo, но только для гуманоидов), найти анимации, экспортировать GLB и после импорта снова зациклить каждую повторяющуюся анимацию.
Аддон AFK AI проходит этот круг за вас прямо из панели в редакторе Godot. Щёлкните модель в панели FileSystem, затем Rig. Примерно через минуту рядом с hero.glb сохранится hero_rigged.glb со скелетом, созданным под тип модели, весами скиннинга и анимациями в AnimationPlayer. Idle, ходьба и бег уже зациклены.
Что понадобится
- Godot
- 4.2 или новее, стандартная сборка или .NET.
- Ваша модель
.glb,.gltfили.fbxв проекте, до 50 МБ..gltfдолжен содержать всё в одном файле; если рядом с ним лежит.bin, экспортируйте вместо него.glb.- Аккаунт afk.ai
- Бесплатный, вход через Google. Каждый риг расходует один риг из месячного лимита аккаунта — так же, как на afk.ai/rig.
- Интернет
- Риггинг выполняется на серверах afk.ai. Отправляется только выбранный вами файл модели.
Установка аддона
- Скачайте аддон со страницы плагина для Godot.
- Скопируйте его папку
addons/afk_aiв папкуaddonsвашего проекта. Если папкиaddonsв проекте нет, создайте её. - Откройте Project > Project Settings > Plugins и отметьте Enable рядом с AFK AI.
Справа, рядом с Inspector, появится панель AFK AI.
Риг модели
- Войдите. Нажмите Sign in в панели AFK AI. В браузере откроется afk.ai; войдите там через Google. Панель покажет ваш email и сколько ригов осталось в этом месяце. Если браузер не может вернуться в Godot, он покажет вместо этого код входа: вставьте его в I have a sign-in code и нажмите Use.
- Выберите модель. В панели FileSystem щёлкните файл модели.
- Задайте параметры. Body type: Human для людей и всего, что ходит на двух ногах, или тип нужного животного либо существа. Animations: All animations или Rig only, если нужен только скелет. Facing: оставьте Auto.
- Нажмите Rig. Панель показывает, что происходит: загрузка, ожидание, риггинг, скачивание. Тем временем можно работать дальше.
Когда всё готово, hero_rigged.glb сохраняется рядом с hero.glb, импортированный и выделенный. Оригинал не затрагивается. Создайте риг той же модели снова — и получите hero_rigged_2.glb, так что ничего не перезаписывается.
Что внутри GLB с ригом
Чтобы использовать модель, перетащите hero_rigged.glb в сцену: она появится как один узел, внутри которого всё остальное.
- Skeleton3D
- Скелет, созданный под тип модели, с привязанным к нему мешем. Человек получает 66 костей, включая все пальцы, с названиями pelvis, spine_01, hand_r, foot_l и так далее.
- AnimationPlayer
- Все анимации, каждая под своим названием. Для гуманоида — до 593: Idle_A, Walk, Jog, Sprint, Jump_Start, Sword_Attack, Dance_Groove и сотни других. Бесплатный аккаунт получает бесплатные, а тариф открывает остальные.
- Циклы
- Idle, ходьба, бег, полёт и плавание уже зациклены. Аддон прописывает это в настройках импорта файла до того, как Godot его импортирует.
- Направление
- Персонаж смотрит в сторону +Z, как и все модели glTF.
Анимации через AnimationPlayer
Простейший персонаж игрока: CharacterBody3D с CollisionShape3D (капсулой) и модель с ригом, перетащенная внутрь него и переименованная в Hero. Прикрепите к 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)Запустите — и персонаж будет бегать трусцой по стрелкам, плавно возвращаясь к idle, когда вы их отпустите. Вызов play с уже играющей анимацией просто продолжает её, так что вызывать его каждый кадр можно.
Смешивание через AnimationTree
AnimationTree смешивает анимации в зависимости от скорости и обрабатывает разовые движения вроде атаки. Настройте его один раз в редакторе:
- Добавьте персонажу узел AnimationTree. В Inspector установите Anim Player в
Hero/AnimationPlayer, а Tree Root — в новый AnimationNodeStateMachine. - В панели AnimationTree внизу щёлкните правой кнопкой и добавьте BlendSpace1D. Назовите его
Locomotion, откройте и добавьте три точки: Idle_A в 0, Walk в 1.5 и Jog в 4 (установите его Max Space в 4). - Снова щёлкните правой кнопкой и добавьте анимацию Sword_Attack. Соедините Start с Locomotion, Locomotion с Sword_Attack и Sword_Attack обратно с Locomotion, установив для последнего перехода Switch Mode в At End, а Advance Mode — в Auto.
- В Project > Project Settings > Input Map добавьте действие
attackи назначьте ему клавишу.
Затем в том же скрипте уберите две строки с anim.play и управляйте деревом:
@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")
Пока AnimationTree активен, анимации проигрывает именно он, поэтому не вызывайте заодно play у AnimationPlayer.
Меч в руке и настройка циклов
Чтобы вложить что-нибудь персонажу в руку, выделите его Skeleton3D, добавьте внутрь BoneAttachment3D, установите Bone Name в hand_r и поместите меч внутрь этого узла. Он будет следовать за рукой во всех анимациях.
Чтобы изменить, какие анимации зациклены, дважды щёлкните hero_rigged.glb в панели FileSystem — откроется Advanced Import Settings. Выберите анимацию под AnimationPlayer слева, измените Loop Mode и нажмите Reimport.
Животные, существа и предметы
Перед нажатием Rig выберите в панели тип модели: Fox для собак, кошек и волков, Horse для всех копытных, Bird, Dragon, Kaiju для динозавров, Spider, Insect, Snake, Fish, Kangaroo, Frog, Turtle, Ghost или Object для предметов. Каждый получает скелет, созданный под его тело, и анимации под него: галоп, взмахи крыльями, рёв, плавание, ползание. Проигрываются они так же, через те же AnimationPlayer и AnimationTree. У всех моделей одного типа одинаковые названия костей и анимаций, поэтому AnimationTree одного волка подходит любому другому волку. В руководстве по животным перечислены анимации каждого типа.
- Дракон
- Четвероногое
- Копытное
- Динозавр
- Паук
- Рыба
Что считается ригом
Каждый риг, дошедший до AFK AI, расходует один риг из лимита этого месяца — так же, как на afk.ai/rig и в других плагинах AFK AI. Cancel прекращает ожидание, но не риг — он всё равно засчитывается. Неудачный риг не засчитывается. Когда риги закончатся, панель сообщит об этом и покажет See plans — кнопка открывает тарифы afk.ai.
Вопросы
Есть ли в Godot встроенный авториггер?
Нет. Godot импортирует уже существующие скелеты и анимации, а его ретаргетинг переносит один гуманоидный скелет на другой, но риг меша он не создаёт. Эту часть берёт на себя аддон AFK AI и отдаёт Godot обычный GLB.
Работает ли он в Godot 3?
Нет. Нужен Godot 4.2 или новее. В Godot 3 создайте риг модели на afk.ai/rig и импортируйте скачанный GLB.
Можно ли использовать его в проекте на C#?
Да. Аддон написан на GDScript, который работает и в .NET-сборке Godot, а GLB с ригом в любом случае одинаковый. На C# анимация проигрывается так: GetNode<AnimationPlayer>("Hero/AnimationPlayer").Play("Jog", 0.2);.
Почему GLB, а не FBX?
GLB — формат, который Godot импортирует лучше всего: скелет, веса скиннинга и все анимации проходят как есть, в любой версии Godot 4. Исходник может быть в FBX, а возвращается GLB.
Попадает ли аддон в экспортированную игру?
Игра использует GLB с ригом. Сам аддон работает только в редакторе; чтобы его файлы не попали в экспорт, исключите addons/afk_ai/* на вкладке Resources пресета экспорта.
Можно ли создать риг нескольких моделей сразу?
По одной, примерно по минуте на каждую. Чтобы создать риги для целой папки из скрипта, используйте API риггинга: он записывает такой же GLB.
Можно ли использовать персонажей с ригом в коммерческой игре?
Да. Скелеты и анимации распространяются по лицензии CC0, а ваша модель остаётся вашей.
Есть ли плагин AFK AI для Blender, Unity или Unreal?
Да. См. руководства по Blender, Unity и Unreal Engine, а также обзор всех плагинов AFK AI для всех девяти программ.
Сделайте риг и анимируйте свою модель
ИИ сделает риг прямо в браузере, и на модели заиграют сотни анимаций. Скачайте один GLB для любого движка.
Другие руководства
Инструкция
Авториггинг персонажа в Blender: бесплатный аддон AFK AI
Выделите модель, нажмите Rig, и примерно через минуту рядом с ней появится копия с ригом и анимациями — в Blender 4.2 и новее.
Инструкция
Авториггинг персонажа в Unreal Engine 5: от статического меша к анимированному скелетному
Щёлкните меш правой кнопкой, выберите Rig with AFK AI, и через минуту в той же папке появится скелетный меш со скелетом, physics asset и анимациями.
Инструкция
Авториггинг любой 3D-модели в Unity: сразу Humanoid и с анимационными клипами
Выберите модель в окне Project и нажмите Rig. Через минуту рядом появится FBX с ригом, настроенный как Humanoid, где каждая анимация — отдельный клип.