FRotator와 FQuat

2025. 1. 21. 15:15·내배캠/Unreal Engine
목차
  1. FRotator와 FQuat의 차이점
  2. FRotator와 FQuat 변환
  3. 변환 시 주의점
언리얼 엔진에서 FRotator와 FQuat은 모두 회전을 표현하는 구조체이다.
하지만 차이점이 존재하고 각자 장단점과 사용목적이 다르다.

 

 

FRotator와 FQuat의 차이점

 

FRotator

구성요소:

  • Pitch(y축), Yaw(z축), Roll(x축)

형태:

  • 오일러 각(Euler Angles)로 회전을 표현

장점: 

  • 직관적: 사람이 이해하기 쉽고, 에디터 UI와 직결되어있다.
  • 특정 축을 기준으로 회전을 조정하거나 디버깅할 때 유용하다.

단점:

  • Gimbal Lock 문제: 특히 90도 회전 근처에서 두 축이 겹쳐져 특정 회전 값에서 하나의 자유도를 잃는 문제 발생

오일러 각을 짐벌이라는 장치를 사용해 시각화 / y축으로 90도 회전을 하였을 경우, 우측과 같이 x축과 z축이 겹치게 된다.

  • y축으로 90도 회전하였을 경우, 우측과 같이 x축과 z축이 겹치게 된다.
  • 이로 인해 3축 회전이 아니라 2축 회전만 가능하게 되고, 결과적으로 회전을 정확하게 표현하거나 구현할 수 없는 문제가 발생할 수 있다.

 


 

 

FQuat

구성요소:

  • x, y, z, w (4D 벡터로 회전 표현)

형태:

  • 쿼터니언(Quaternion)으로 회전을 표현

장점:

  • 오일러각 방식의 Gimbal Lock을 방지한다.
  • 회전 간의 보간에 강하다.(부드러운 회전 애니메이션 구현에 유리)
  • 더 빠르고 효율적인 계산이 가능하다.

단점:

  • 사람이 직관적으로 이해하기 어렵다.
  • 에디터나 디버깅 단계에서 확인하기 어렵다.

사용하는 경우:

  • 연속적인 회전 연산이 필요한 경우
  • 보간을 사용하는 경우(카메라 회전, 캐릭터 회전)
  • 빠르고 정확한 계산이 필요한 경우
  • 복잡한 3D 회전 변환을 다루는 경우(회전 축이 끊임없이 변하는 객체)

 

 


 

FRotator와 FQuat 변환

  • FRotator → FQuat 
FRotator Rotator(0.f, 90.f, 0.f);
FQuat Quat = FQuat(Rotator);

 

  • FQuat → FRotator
FQuat Quat(FRotator(0.f, 90.f, 0.f));
FRotator Rotator = Quat.Rotator();

 

 


변환 시 주의점

// RotationSpeed = 90.0f

if (!FMath::IsNearlyZero(RotationSpeed))
{
	FRotator Rotator(0.0f, 90.0f, 0.0f);
	FQuat ZRotation(Rotator * DeltaTime);

	AddActorLocalRotation(ZRotation);
}

if (!FMath::IsNearlyZero(RotationSpeed))
{
	// Z를 회전축으로 설정
	FVector RotationAxix(0.0f, 0.0f, 1.0f);
	// 각도(라디안)
	float RotationAngle = FMath::DegreesToRadians(DeltaTime * RotationSpeed);

	//Z축 90도 회전
	FQuat ZRotation(RotationAxix, RotationAngle);

	AddActorLocalRotation(ZRotation);
}
  • 첫 번째의 경우 Rotator 내부의 오일러 각이 이미 Gimbal Lock을 겪었을 가능성이 있기 때문에, 결과적으로 쿼터니언도 Gimbal Lock의 영향을 받은 회전 데이터를 포함하게 될 가능성이 있다. 그러므로 Gimbal Lock을 방지하기 위해선 이와 같은 방식으로 접근하면 안된다.
  • 쿼터니언은 회전을 단일 축(RotationAxix)과 각도(RotationAngle)를 기반으로 정의한다.
  • 두 번째의 경우, FQuat 생성자에 FVector 축과 각도(라디안)을 명확히 설정하여 Gimbal Lock을 방지할 수 있다.
  • 쿼터니안 계산에서 회전 각도는 라디안 단위로 사용되므로, FMath::DegreesToRadians 메서드를 통해 각도를 라디안으로 변경하였다.

'내배캠 > Unreal Engine' 카테고리의 다른 글

StaticClass( ) 메서드  (0) 2025.01.22
부동 소수점 연산 오차  (0) 2025.01.21
액터의 라이프 사이클  (0) 2025.01.21
로그 카테고리 사용자 정의  (0) 2025.01.21
정적 초기화와 런타임 로드  (0) 2025.01.20
  1. FRotator와 FQuat의 차이점
  2. FRotator와 FQuat 변환
  3. 변환 시 주의점
'내배캠/Unreal Engine' 카테고리의 다른 글
  • StaticClass( ) 메서드
  • 부동 소수점 연산 오차
  • 액터의 라이프 사이클
  • 로그 카테고리 사용자 정의
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210) N
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151) N
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16) N
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    FRotator와 FQuat
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.