Control Rig против потолка: делаем автоматический наклон персонажа

Рассмотрим как можно сделать вот такие процедурные наклоны

Мой телеграмм канал об анимации и unreal

Начнем с Control Rig

Control Rig против потолка: делаем автоматический наклон персонажа

Создадим Sphere Trace By Trace Channel

Control Rig против потолка: делаем автоматический наклон персонажа

Sphere Trace by Trace Channel проверка столкновения сферой, протянутой от точки Start до точки End.

В нашем случае:

Start = X 0, Y 0, Z 80

End = X 0, Y 70, Z 200

Radius = 60

Trace Channel = Visibility

То есть Unreal делает примерно так:

Берёт сферу радиусом 60 → двигает её из точки Start в точку End → смотрит, задела ли она что-то по каналу Visibility.

Если задела:

Hit = true

Hit Location = место удара

Hit Normal = нормаль поверхности

Если не задела:

Hit = false

Чтобы посмотреть как это выглядит визуально сделаем так

Control Rig против потолка: делаем автоматический наклон персонажа

Я добавил debug-визуализацию в Control Rig через Draw Line. Линия показывает, откуда и куда идёт проверка перед персонажем: от точки 0,0,80 до 0,70,200. Это нужно, чтобы видеть зону трейса и понимать, правильно ли она расположена относительно персонажа.

Идем дальше

После попадания Sphere trace в препятствие , беру Hit Location ( место попадание трейса в препятствие)

1. Distance Between

считаю расстояние от точки удара до базовой точки персонажа с помощью Distance Between.

2. Remap

Затем через Remap перевожу это расстояние в удобные значения

Remap берёт значение из одного диапазона и переводит его в другой диапазон.

Clamp ограничивает результат, чтобы он не вышел за эти пределы.

Control Rig против потолка: делаем автоматический наклон персонажа

У меня:

Source Minimum = 30

Source Maximum = 120

Target Minimum = -30

Target Maximum = 0

Это значит:

если Distance = 30 ( между стартом Trace и точкой попадания) → Result = -30

если Distance = 120 → Result = 0

То есть чем ближе препятствие, тем сильнее отрицательное смещение.

Control Rig против потолка: делаем автоматический наклон персонажа

один Remap дает величину смещения Pelvis вниз , второй нужен для наклона персонажа .

Пока будем рассматривать работу Pelvis

Дальше используем ноду IF

IF — это условие:

если Hit = true, берем значение из Remap; если Hit = false, ставим 0 ( то есть нечего не меняем) .

Spring Interpolate — плавно доводит текущее значение до цели с эффектом пружины.

Нужен, чтобы таз не дергался резко, а мягко отклонялся и возвращался назад.

Control Rig против потолка: делаем автоматический наклон персонажа
Control Rig против потолка: делаем автоматический наклон персонажа

Теперь соединим всё это с Full Body IK.

Control Rig против потолка: делаем автоматический наклон персонажа

Рассмотрим как это работает

Full Body IK — это нода, которая двигает всё тело через IK, а не одну кость отдельно.

Она берёт цель, например смещенный pelvis, и пересчитывает остальные кости так, чтобы тело перестроилось естественно

Берем текущую позицию кости pelvis и добавляем к ней процедурное смещение от препятствия.

Логика такая:

Get Transform - Bone pelvis

берём текущую Translation таза

Add

прибавляем к ней значение из Spring Interpolate

Spring Interpolate даёт плавное значение смещения, поэтому pelvis не дёргается резко, а мягко уходит от препятствия и возвращается обратно.

Control Rig против потолка: делаем автоматический наклон персонажа
Control Rig против потолка: делаем автоматический наклон персонажа

Рейты мы берем из Get transform Bone от pelvis и присоединяем в ноду FullBody IK

А вот транслеты мы добавляем от Spring Interpolate - по тем осям которые хотим сместить

Control Rig против потолка: делаем автоматический наклон персонажа

Видео пример :

Идем дальше

Берём текущий Transform костей через Get Transform - Bone :

foot_l

foot_r

и передаем их в эффекты Full Body IK.

Зачем

стопы получают свои текущие позиции

Full Body IK старается удерживать их на месте

pelvis можно двигать процедурно

ноги и тело подстраиваются, но стопы не улетают

Control Rig против потолка: делаем автоматический наклон персонажа

Настройки ноды FullBody

Root = root — вся IK-система считается от корневой кости.

Bone = foot_l / foot_r — эффекторами выбраны левая и правая стопа.

Chain Depth = 2

Chain Depth определяет, сколько костей вверх от эффектора будет участвовать в IK-цепочке.

Пример для foot_l:

Chain Depth = 2

Значит Full Body IK берёт стопу и поднимается выше по ноге примерно на 2 кости:

foot → calf → thigh

Если стоит Chain Depth = 0 значит влияние не ограниченно

Теперь настроим значения для наклона спины

Вернемся к Remap ;

Тут настройки чутка другие - однако принцип тот же

в Target Minimum ставим 1 - чуть позже поймете зачем

Control Rig против потолка: делаем автоматический наклон персонажа

Теперь так же сделаем IF и Spring Interpolate и поместим их за нодой Full Body IK

Логика подключения такая же как и с pelvis

Control Rig против потолка: делаем автоматический наклон персонажа

Теперь создадим кривую

И из Spring Interpolate для спины передадим значения во вход Value ноды SetCurve Value

И подключим все это дело к Forward Solver

Control Rig против потолка: делаем автоматический наклон персонажа

И так настройка Control Rig окончена , теперь настроим Additional анимацию для сгиба спины .

Есть вот такая анимация

Additive Anim Type Local Space

Анимация считается как добавка в локальном пространстве костей. То есть кости смещаются/вращаются относительно своих родителей.

Base Pose Type Frame from this animationБазовая поза берётся из этой же анимации, из конкретного кадра. Unreal сравнивает остальные кадры с этой позой и оставляет только разницу.

Ref Frame Index 0 В качестве базы используется кадр 0, то есть первый кадр анимации.

Control Rig против потолка: делаем автоматический наклон персонажа

Также я анимировал только верх тела, чтобы анимация не ломала анимацию ног.

Теперь подключим это дело в Animation Blueprint

Control Rig против потолка: делаем автоматический наклон персонажа

Короткое видео что нужно сделать

Разберем по шагам

Get Curve Value CrouchAmount

Берет значение кривой CrouchAmount. ( именно эту кривую я сделал в Control Rig )

Эта кривая управляет, насколько сильно включается crouch/additive-поза.

Напомню: в Crouch Amount я подаю значение от 0 до 1,

где 0 соответствует 0 -мн кадру анимации, а 1 = 30-му кадру. По сути,

единица равна одной секунде. Если бы анимация была 60 кадров при

30 fps, то из Control Rig нужно было бы подавать значение от 0 до 2.

BlendCrouch_Anim Sequence Evaluator

Не проигрывает анимацию по времени сам, а берет конкретный кадр по значению Explicit Time.

То есть кривая Crouch Amount выбирает, какой момент additive-анимации использовать.

Apply Additive

Добавляет Blend Crouch Anim поверх основной позы.

Control Rig

После additive-анимации запускается наш Control Rig

Control Rig против потолка: делаем автоматический наклон персонажа

Окей, логика готова, но это ещё не всё.

Нужно настроить изменение размера Капсулы - когда мы подходим к препятствию

Идем в Blueprint персонажа

В моем случае это BP Third Person Character

Там в Character Movement

Control Rig против потолка: делаем автоматический наклон персонажа

Character Movement — компонент, который отвечает за движение персонажа: ходьба, бег, прыжок, crouch и т.д.

Crouched Half Height = 60 cm Высота капсулы в crouch-состоянии. То есть когда персонаж приседает, коллизия становится ниже. ( это нужный нам параметр )

Max Walk Speed Crouched = 450 cm/s Максимальная скорость движения в crouch. Чем меньше значение — тем медленнее персонаж двигается в приседе.

Can Crouch Разрешает персонажу использовать crouch. Без этого Crouch / UnCrouch нормально работать не будут.

Теперь идем в Animation Blueprint

И строим такую логику

Control Rig против потолка: делаем автоматический наклон персонажа

Get Curve Value Берет значение кривой CrouchAmount из Control Rig.

если CrouchAmount > 0.1

→ считаем, что crouch включён

иначе

→ crouch выключен

Branch Обычный if.

  • True → вызывает Crouch
  • False → вызывает UnCrouch

Crouch ( это команда из Character Movement) Переводит персонажа в состояние приседа:

  • уменьшает капсулу,
  • применяет настройки crouch из Character Movement
  • может менять скорость и другую связанную логику.

UnCrouch Возвращает персонажа из приседа обратно в обычное состояние.

Third Person Это ссылка на BP Third Person Character из которого мы и берем Crouch and Un Crouch

Control Rig против потолка: делаем автоматический наклон персонажа

По смотрим как уменьшается капсула

как видно из видео у камеры есть скачек , исправим это

Идем в BP Third Person Character и там в camera Boom

Control Rig против потолка: делаем автоматический наклон персонажа

Enable Camera Lag

Включает плавное запаздывание камеры за персонажем.

Без этого камера жестко приклеена.

Camera Lag Speed = 10

Скорость догоняния камеры.

Больше значение → камера быстрее догоняет, меньше лаг.

Меньше значение → камера мягче и сильнее отстаёт.

Camera Lag Max Distance = 50

Максимальное расстояние, на которое камера может отстать от цели.

Собственно Все

Так же то что мы вызываем команду Crouch - предотвращаем возможность прыжка - когда мы пригнулись

Мой тг канал

Про unreal и анимацию

43
21
4
2