Unreal Engine Lerp (линейная интерполяция)

Друзья, приветствую, с Вами Будуев Антон. В данной статье мы поговорим о том, что такое Lerp (линейная интерполяция) в Unreal Engine (UE4, UE5), и в частности Lerp (Vector). Разберём как работает интерполяция, какие Lerp-функции существуют в Blueprint и почему они используются при создании простейшего движения (анимации) объектов.

Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.

Lerp

Lerp (от англ. Linear Interpolateлинейная интерполяция) — это функция, которая вычисляет промежуточное значение между двумя известными значениями  и  в зависимости от параметра Alpha, который обычно находится в диапазоне от 0 до 1.

Сама формула выглядит так: Lerp (A, B, Alpha) = A + (BA) * Alpha, при этом:

  • если Alpha = 0, результат выполнения функции равен значению
  • если Alpha = 1, результат выполнения функции равен значению
  • если Alpha = от 0 до 1, результат выполнения функции равен соответствующему значению между A и B, например, при Alpha = 0.5, результат будет равен значению ровно посередине между A и B.

Таким образом, параметр Alpha управляет степенью «приближения» (интерполяции) к точке B.

Lerp в Unreal Engine Blueprint

В Unreal Engine в Blueprints существуют несколько разновидностей функций Lerp, каждая из которых предназначена для интерполяции различных типов данных:

Некоторые Blueprint-функции Lerp в Unreal Engine
Некоторые Blueprint-функции Lerp в Unreal Engine
  • Lerp — линейная интерполяция между двумя числовыми значениями типа float.
  • Slerp (Quat) — сферическая интерполяция между двумя кватернионами, используемая для плавного и равномерного вращения в трёхмерном пространстве.
  • Lerp (Rotator) — линейная интерполяция между двумя угловыми значениями (Rotator), позволяет плавно переходить между углами поворота.
  • Lerp (Vector) — линейная интерполяция между двумя векторами, используется для плавного изменения позиции или направления в 3D пространстве.
  • SlerpNormals — сферическая интерполяция между двумя нормализованными векторами, обеспечивающая корректное сглаживание направлений (например, для направления взгляда).
  • Lerp (Transform) — интерполяция между двумя трансформациями (позицией, поворотом и масштабом), используемая для комплексного плавного перехода.

Все эти функции предназначены для плавного перехода значений между двумя известными точками по параметру Alpha, обычно от 0 (начало) до 1 (конец). Работа с ними, в целом, строится одинаково, поэтому, в качестве примера, разберем подробнее одну из них, наиболее часто используемую — Lerp (Vector).

Lerp (Vector)

Blueprint-функция Lerp (Vector)
Blueprint-функция Lerp (Vector)

Lerp (Vector) — Blueprint-функция в Unreal Engine, которая линейно интерполирует между двумя векторами A и B с использованием параметра Alpha, обычно принимающего значения от 0 до 1. Результатом является вектор, находящийся на прямой линии между векторами A и B, в точке, определяемой Alpha. Используется, чтобы плавно смещать объект из одной точки пространства (A) в другую (B), контролируя степень перехода через Alpha.

Lerp (Vector) — это один из самых популярных узлов в Blueprint для создания простого движения или простой анимации.

Параметры:

  • A (vector) — стартовая точка;
  • B (vector) — конечная точка;
  • Alpha (float) — значение степени «приближения» результирующего вектора к точке B;
  • Return Value (vector) — возвращаемый итоговый вектор, находящийся между векторами A и B, в точке, определяемой Alpha.

Разберём на простых примерах, как работает Lerp (Vector).

При стартовой точке A, равной (1.0, 0.0, 0.0), конечной точке B, равной (6.0, 0.0, 0.0), и Alpha = 0, результирующий вектор будет (1.0, 0.0, 0.0), равный A.

При Alpha = 0, результирующий вектор Lerp будет (1.0, 0.0, 0.0), равный A.
При Alpha = 0, результирующий вектор Lerp будет (1.0, 0.0, 0.0), равный A.

При стартовой точке A, равной (1.0, 0.0, 0.0), конечной точке B, равной (6.0, 0.0, 0.0), и Alpha = 1, результирующий вектор будет (6.0, 0.0, 0.0), равный B.

При Alpha = 1, результирующий вектор Lerp будет (6.0, 0.0, 0.0), равный B.
При Alpha = 1, результирующий вектор Lerp будет (6.0, 0.0, 0.0), равный B.

При стартовой точке A, равной (1.0, 0.0, 0.0), конечной точке B, равной (6.0, 0.0, 0.0), и Alpha = 0.3, результирующий вектор будет (2.5, 0.0, 0.0), находящийся ближе к A, чем к B.

При Alpha = 0.3, результирующий вектор Lerp будет (2.5, 0.0, 0.0), находящийся ближе к A, чем к B.
При Alpha = 0.3, результирующий вектор Lerp будет (2.5, 0.0, 0.0), находящийся ближе к A, чем к B.

Движение (анимация) объекта через Lerp

Если изменять параметр Alpha циклично (например, с помощью таймеров или события Event Tick), результирующий вектор будет плавно смещаться из точки A в точку B. Передавая этот результат в функцию изменения позиции объекта (например, Set Relative Location), можно реализовать плавное движение объекта, к примеру, платформы.

Пример Blueprint-логики движения платформы с помощью Lerp:

  1. Конечная точка задаётся в пользовательской переменной End Location типа Vector. При чём в её свойствах (Details) включены опции: Instance Editable — чтобы переменная была доступна для редактирования на уровне; Show 3D Widget — чтобы переменную можно было визуально редактировать, перемещая специальный виджет мышкой прямо на уровне. Это позволяет удобно задавать конечное положение платформы прямо в редакторе.
3D Widget переменной End Location можно переместить мышкой в любое место на уровне
3D Widget переменной End Location можно переместить мышкой в любое место на уровне
  1. На старте игры по событию Event Begin Play в пользовательскую переменную Start Location сохраняется стартовая позиция платформы, которую возвращает функция Get Relative Location для компонента Cube, символизирующего платформу.
  2. Изменение координат платформы производится функцией Set Relative Location.
  3. Для расчета новых координат применяется функция Lerp (Vector), где в качестве точки A используется Start Location, в качестве точки BEnd Location и в качестве параметра Alpha — пользовательская переменная Alpha типа float со значением по умолчанию = 0.
  4. Для того чтобы создать движение, переменная Alpha изменяется на каждом тике путем добавления расчетного значения (Speed * Delta Seconds), с ограничением верхней границы Alpha в 1. Где Delta Seconds — время, прошедшее с предыдущего тика (используется для обеспечения независимого от FPS движения).
Движение (анимация) платформы через Lerp
Движение (анимация) платформы через Lerp

В результате данной логики с помощью Lerp платформа плавно начнёт своё движение к точке End Location и на ней же остановится.

Плавное движение платформы с применением Lerp (линейной интерполяции вектора)
Плавное движение платформы с применением Lerp (линейной интерполяции вектора)

По такому же принципу строится работа и со всеми остальными Lerp-функциями.

Краткий итог: Lerp в Unreal Engine — группа функций, позволяющих плавно интерполировать значение между двумя исходными значениями (например, векторами) по параметру Alpha от 0 до 1. Lerp широко используется для создания простого и контролируемого движения объектов (анимации), где Alpha управляет прогрессом перехода от начальной позиции к конечной.

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.


наш Телеграм канал

Оцените статью
( 1 оценка, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.