РуководстваИнструкция6 мин чтения

Риг и анимация 3D-персонажа в Godot 4: Аддон AFK AI, AnimationPlayer и AnimationTree

Щёлкните модель в панели FileSystem, нажмите Rig, и примерно через минуту рядом появится GLB с ригом и анимациями, где ходьба и idle уже зациклены.

AFK AI (dock)

Signed in as you@example.comSign out

3 of 3 rigs left this month.

Model: hero.glb

Body typeHuman

AnimationsAll animations

FacingAuto

Rig

Rigging...Cancel

Scene › hero_rigged
  • hero_riggedNode3D
  • └Skeleton3DSkeleton3D
  • └HeroMeshInstance3D
  • └AnimationPlayerAnimationPlayer
  • └Idle_Aloop ⟳
  • └Walkloop ⟳
  • └Jogloop ⟳
  • └Sprintloop ⟳
  • └…
Схема по мотивам плагина, не скриншот: панель AFK AI во время риггинга hero.glb и копия с ригом, которую она сохраняет рядом, с анимациями в AnimationPlayer.

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. Отправляется только выбранный вами файл модели.

Установка аддона

  1. Скачайте аддон со страницы плагина для Godot.
  2. Скопируйте его папку addons/afk_ai в папку addons вашего проекта. Если папки addons в проекте нет, создайте её.
  3. Откройте Project > Project Settings > Plugins и отметьте Enable рядом с AFK AI.

Справа, рядом с Inspector, появится панель AFK AI.

Риг модели

  1. Войдите. Нажмите Sign in в панели AFK AI. В браузере откроется afk.ai; войдите там через Google. Панель покажет ваш email и сколько ригов осталось в этом месяце. Если браузер не может вернуться в Godot, он покажет вместо этого код входа: вставьте его в I have a sign-in code и нажмите Use.
  2. Выберите модель. В панели FileSystem щёлкните файл модели.
  3. Задайте параметры. Body type: Human для людей и всего, что ходит на двух ногах, или тип нужного животного либо существа. Animations: All animations или Rig only, если нужен только скелет. Facing: оставьте Auto.
  4. Нажмите 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 смешивает анимации в зависимости от скорости и обрабатывает разовые движения вроде атаки. Настройте его один раз в редакторе:

  1. Добавьте персонажу узел AnimationTree. В Inspector установите Anim Player в Hero/AnimationPlayer, а Tree Root — в новый AnimationNodeStateMachine.
  2. В панели AnimationTree внизу щёлкните правой кнопкой и добавьте BlendSpace1D. Назовите его Locomotion, откройте и добавьте три точки: Idle_A в 0, Walk в 1.5 и Jog в 4 (установите его Max Space в 4).
  3. Снова щёлкните правой кнопкой и добавьте анимацию Sword_Attack. Соедините Start с Locomotion, Locomotion с Sword_Attack и Sword_Attack обратно с Locomotion, установив для последнего перехода Switch Mode в At End, а Advance Mode — в Auto.
  4. В 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.

StartLocomotionBlendSpace1D · Idle_A, Walk, Jog↓ travel("Sword_Attack")↑ At EndSword_Attack
Схема state machine в AnimationTree. Locomotion смешивает Idle_A, Walk и Jog по скорости; travel() переходит к Sword_Attack, а после её окончания — обратно.

Меч в руке и настройка циклов

Чтобы вложить что-нибудь персонажу в руку, выделите его 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/rig, каждый со своими анимациями.

Что считается ригом

Каждый риг, дошедший до 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 для любого движка.

Сделать риг модели

Другие руководства