Lerp(보간)

김민수·2025년 1월 22일

언리얼 C++

목록 보기
19/32

Lerp 함수는 두 값 AB 사이의 특정 비율로 중간 값을 계산하는 함수다. 비율 값은 0~1 사이로 입력되며, 이 비율이 0이면 A, 1이면 B를 반환한다. 비율 값이 0과 1 사이에 있다면, 두 값의 중간 값을 반환한다.


1. Lerp 함수의 기본 공식

Lerp의 수학적 표현

Result = A + (B - A) * Alpha
  • A: 시작 값
  • B: 끝 값
  • Alpha: 0~1 사이의 비율 (보간 정도)

Alpha의 범위

  • 0이면 A 값을 반환한다.
  • 1이면 B 값을 반환한다.
  • 0과 1 사이 값이면, AB 사이의 중간 값을 반환한다.


2. 사용 예시

1) FMath::Lerp (float 값 보간)
FMath::Lerp는 두 실수(float) 값 사이를 보간할 때 사용한다.

float StartValue = 0.0f;
float EndValue = 100.0f;
float Alpha = 0.5f; // 중간값

float Result = FMath::Lerp(StartValue, EndValue, Alpha);
// Result = 50.0f (StartValue와 EndValue의 정확히 중간값)

활용 예시

  • 캐릭터 체력 UI가 점진적으로 감소할 때.
  • 슬로우 모션 속도를 점진적으로 조정할 때.

2) FVector 보간 (VInterpTo)
FVector 값을 보간할 때는 FMath::Lerp 대신 VInterpTo를 사용하는 것이 일반적이다. VInterpTo는 일정 속도로 보간을 수행하며, 델타 타임(프레임 간 시간)을 고려하여 자연스러운 애니메이션 효과를 제공한다.

FVector CurrentPosition = GetActorLocation();
FVector TargetPosition = FVector(300.f, 200.f, 100.f);

float DeltaTime = GetWorld()->GetDeltaSeconds();
float InterpSpeed = 5.0f;

FVector NewPosition = FMath::VInterpTo(CurrentPosition, TargetPosition, DeltaTime, InterpSpeed);
SetActorLocation(NewPosition);
  • 매 프레임마다 CurrentPositionTargetPosition에 가까워진다.
  • InterpSpeed 값이 클수록 빠르게 목표 위치에 도달한다.

3. 주의사항

  1. Alpha 범위 (0~1)

    • Alpha 값은 일반적으로 0에서 1 사이 값이어야 한다.
    • 만약 0보다 작거나 1보다 큰 값을 입력하면, 결과 값이 범위를 벗어나 예상치 못한 값이 반환될 수 있다.
  2. DeltaTime 기반 보간

    • 자연스러운 애니메이션을 구현하려면 DeltaTime을 기반으로 보간 속도를 조절해야 한다. 이를 위해 InterpTo 계열 함수를 사용하는 것이 적합하다.
  3. 무한 루프 방지

    • Alpha 값이 1에 가까워질수록 보간 변화가 미미해진다. 따라서 목표 값 근처에서 루프를 멈추는 로직을 추가하는 것이 좋다.
    if (FVector::Dist(CurrentPosition, TargetPosition) < 1.0f)
    {
        // 보간 종료
    }
profile
안녕하세요

0개의 댓글