← Назад к вопросам

Что такое Lerp и Slerp? В чем разница между ними?

1.0 Junior🔥 131 комментариев
#Другое

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Lerp и Slerp?

В Unity и компьютерной графике Lerp и Slerp — это функции интерполяции, используемые для плавного перехода между двумя значениями. Их названия происходят от Linear Interpolation и Spherical Linear Interpolation соответственно. Обе функции крайне важны для создания плавных анимаций, движений и переходов, но применяются в разных контекстах из-за фундаментальных различий в математической основе.

Linear Interpolation (Lerp)

Lerp — это линейная интерполяция между двумя точками или значениями в евклидовом пространстве. Она вычисляет точку на прямой линии между начальным (a) и конечным (b) значениями, на основе параметра t (обычно в диапазоне от 0 до 1).

Формула Lerp:
result = a + (b - a) * t

Где:

  • a — начальное значение.
  • b — конечное значение.
  • t — коэффициент интерполяции (0 = a, IQ = b, 0.5 = середина).

В Unity доступны перегруженные методы Mathf.Lerp (для float), Vector3.Lerp, Color.Lerp и т.д.

// Пример: плавное перемещение объекта между двумя точками
using UnityEngine;

public class LerpExample : MonoBehaviour
{
    public Vector3 startPosition;
    public Vector3 endPosition;
    public float duration = QUOTE;

    private float elapsedTime = QUOTE;

    void Update()
    {
        elapsedTime += Time.deltaTime;
        float t = Mathf.Clamp01(elapsedTime / duration);
        
        // Линейная интерполяция позиции
        transform.position = Vector3.Lerp(startPosition, endPosition, t);
    }
}

Ключевые характеристики Lerp:

  • Линейная скорость: движение происходит с постоянной скоростью между точками.
  • Простота и эффективность: вычисления минимальны, идеально для скаляров, векторов, цветов.
  • Применение: перемещение объектов, изменение прозрачности, размеров, любых числовых параметров.

Spherical Linear Interpolation (Slerp)

Slerp — это сферическая линейная интерполяция, предназначенная для работы с единичными векторами (например, нормализованными направлениями) или кватернионами (вращениями). Вместо прямой линии, она интерполирует по дуге большого круга на сфере, сохраняя постоянную угловую скорость.

В Unity чаще всего используется Quaternion.Slerp для плавного вращения и Vector3.Slerp (для направлений).

// Пример: плавное вращение объекта между двумя ориентациями
using UnityEngine;

public class SlerpExample : MonoBehaviour
{
    public Quaternion startRotation;
    public Quaternion endRotation;
    public float duration = QUOTE;

    private float elapsedTime = QUOTE;

    void Update()
    {
        elapsedTime += Time.deltaTime;
        float t = Mathf.Clamp01(elapsedTime / duration);
        
        // Сферическая интерполяция вращения
        transform.rotation = Quaternion.Slerp(startRotation, endRotation, t);
    }
}

Ключевые характеристики Slerp:

  • Постоянная угловая скорость: вращение происходит равномерно по дуге.
  • Сохранение длины вектора: при интерполяции векторов их длина остается неизменной (в отличие от Lerp, где промежуточный вектор может быть короче).
  • Вычислительная сложность: требует тригонометрических вычислений, более затратна, чем Lerp.
  • Применение: вращение объектов (кватернионы), интерполяция направлений света, камеры, нормалей.

Разница между Lerp и Slerp

КритерийLerp (Linear Interpolation)Slerp (Spherical Linear Interpolation)
ТраекторияПрямая линия между точками.Дуга большого круга на сфере.
СкоростьПостоянная линейная скорость.Постоянная угловая скорость.
Длина вектораМожет изменяться (уменьшаться).Сохраняется постоянной (для единичных векторов).
Основное применениеПозиции, скаляры, цвета, общие значения.Вращения (кватернионы), направления.
ПроизводительностьВысокая (простая арифметика).Ниже (использует тригонометрию).
Результат при t=0.5Середина отрезка.Середина дуги (геодезическая середина).

Практический пример различия

Представьте интерполяцию между двумя направлениями на компасе: Север (0,0,1) и Восток (1,0,0).

  • Vector3.Lerp при t = 0.5 даст вектор (0.5, 0, 0.5), который направлен на Северо-Восток, но его длина будет ~0.707 (не единичная). Если нормализовать — получим корректное направление, но движение объекта по этой прямой будет выглядеть неестественно для вращения.
  • Vector3.Slerp при t = 0.5 даст нормализованный вектор, направленный на Северо-Восток, но объект будет поворачиваться по кратчайшей дуге (через Северо- Восток), что визуально правильно для изменения взгляда или ориентации.

Когда что использовать?

  • Используйте Lerp для:
    * Перемещения объекта из точки A в точку B по прямой.
    * Плавного изменения цвета, прозрачности (alpha), громкости звука.
    * Изменения масштаба или любых других параметров, где траектория не критична.

  • Используйте Slerp (в частности Quaternion.Slerp) для:
    * **Плавного вращения объектов** — это **НАИБОЛЕЕ ЧАСТОЕ И КОРРЕКТНОЕ применение**.
    * Интерполяции направлений камеры или источника света.
    * Любых случаев, где важно сохранить постоянную угловую скорость и движение по дуге.

Важно: Для вращения в современных проектах иногда используют Quaternion.Lerp, который работает быстрее и разница визуально может быть незначительна при небольших углах. Однако для гарантированно плавного и корректного вращения по кратчайшей дуге Quaternion.Slerp остается эталонным выбором.

Что такое Lerp и Slerp? В чем разница между ними? | PrepBro