[개념 콕] 유니티 쿼터니언(Quaternion)

내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다.
Jun 05, 2024
[개념 콕] 유니티 쿼터니언(Quaternion)
✍🏼
유니티(Unity) 입문자 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 게임 개발 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 

쿼터니언(Quaternion)이란?

쿼터니언(Quaternion)은 유니티에서 3D 공간의 회전을 나타내는 데이터 형식입니다. 쿼터니언은 오일러 각도(Euler angles)의 대안으로 사용되며, 회전을 더욱 효율적으로 다룰 수 있습니다. 쿼터니언은 x, y, z, w의 네 개의 실수로 구성되어 있습니다. 이 중 x, y, z는 회전을 나타내는 벡터이며, w는 회전의 크기를 나타내는 스칼라(scalar) 값*입니다.
*스칼라(scalar) 값이란?
스칼라 값은 회전의 크기를 나타내는 값이지만, 회전과 직접적인 관련은 없습니다. 우리가 일반적으로 접하는 회전값은 대부분 오일러 각도로 표현되기 때문에, 쿼터니언의 스칼라 값은 단순히 존재한다는 사실 정도만 알고 있어도 충분합니다.
 

유니티에서 쿼터니언을 사용하는 이유

1) 짐벌 락(gimbal lock)* 문제를 피할 수 있습니다.
짐벌락은 3차원 회전을 오일러 각도로 표현할 때 발생하는 문제로, 쿼터니언을 사용하면 이를 효과적으로 해결할 수 있습니다. 짐벌 락에 대해 더 알고 싶다면 여기에서 확인하세요.
2) 회전을 효율적으로 결합하고 연산할 수 있어 게임 프로그래밍에 유용합니다.
3) 쿼터니언은 회전축과 회전 각도를 모두 포함하고 있어 회전의 방향과 크기를 동시에 표현할 수 있습니다.
 

쿼터니언 외의 회전 표현 방식

1) 오일러 각도(Euler angles)

오일러 각도(Euler angles)란 회전을 X, Y, Z 축의 각도로 나타내는 방식으로, 직관적이지만 짐벌락 문제와 각도의 제한 등의 단점이 있습니다. 유니티 인스펙터 창에서 보이는 rotation 값이 오일러 각도입니다. (유니티 자체에서 쿼터니언으로 변경)

2) 라디안(radian) 값

라디안(radian) 값은 각도의 측정 단위 중 하나로, 원의 호의 길이가 반지름과 같은 값을 가지는 각도입니다. 수학적으로 정확하며, 삼각함수 계산에 사용됩니다.
 
정리하면, 쿼터니언은 표준 / 오일러 각도는 직관적이고 쉬움 / 라디안 값은 수학적 계산에 사용되고 정확하다는 차이가 있습니다.
 
 

오일러 각도와 라디안 값을 사용하는 경우

유니티에서 사용하는 것은 쿼터니언인데 왜 오일러 각도와 라디안 값이 나오는 걸까요?

1) 오일러 각도(Euler angles)

  • 사용자 입력
    • 마우스나 터치 입력을 통해 오브젝트를 회전할 때, 사용자 입력에 따라 오일러 각도로 회전 정보가 제공됩니다. 우리가 인스펙터 창에서 확인할 수 있는 X, Y, Z 축에 대한 각도가 바로 오일러 각도입니다.
  • 3D 모델링 소프트웨어
    • 3D 모델을 조작하거나 애니메이션을 제작할 때 오일러 각도오일러 각도로 회전 정보를 제공하는 경우가 있습니다. 예를 들어, 3D 모델을 회전하여 원하는 방향으로 정렬하거나 애니메이션을 제작할 때 사용됩니다.
  • 외부 시스템에서 데이터
    • 외부 시스템이나 장치에서 제공되는 회전 정보가 오일러 각도로 표현되는 경우가 있습니다. 이러한 경우에는 외부 시스템의 동작을 따라가기 위해 오일러 각도로 회전 정보를 받아와야 합니다.
 

2) 라디안 값이 나오는 경우

  • 수학적 계산
    • 수학적 모델링이나 물리 시뮬레이션에서 오일러 각도 대신 라디안 값이 사용되는 경우가 있습니다. 특히 삼각함수와 관련된 계산에서 라디안 값이 자주 사용됩니다. 이 경우에는 각도를 라디안 값으로 변환하여 계산에 사용합니다.
  • 수학적 또는 물리적 모델의 출력
    • 수학적 또는 물리적 모델이 생성한 결과물이나 출력이 라디안 값으로 표현되는 경우가 있습니다. 이 경우에는 이 값을 이해하고 처리하기 위해 라디안 값으로 변환하여 사용해야 한다.
  • 외부 시스템에서의 데이터
    • 일부 외부 시스템이나 센서 데이터가 라디안 값으로 회전 정보를 제공하는 경우가 있습니다. 이 경우에는 라디안 값으로 제공된 회전 정보를 받아와서 사용해야 합니다.
 

3) 쿼터니언으로 변환

유니티에서는 기본적으로 쿼터니언을 사용하므로, 오일러 각도와 라디안 값은 쿼터니언으로 변환하여 사용해야 합니다. 인스펙터 창에서 보이는 오일러 각도는 유니티에서 자동으로 쿼터니언으로 변환되지만, 코드에서 사용할 때는 직접 쿼터니언으로 변환해주어야 합니다.
사실 쿼터니언은 변환되어 사용하는 경우가 더 많으며, 우리가 보는 회전값은 오일러 각도이므로 오일러 각도가 쿼터니언으로 변환되는 경우가 많습니다.
다음 예시는 변환하는 경우의 예시입니다.
 
  • 쿼터니언을 그대로 사용
Quaternion rotation = new Quaternion(x, y, z, w); Instantiate(original, position, rotation);
 
  • 오일러 각도를 쿼터니언으로 변환
Vector3 eulerAngle = new Vector3(1, 1, 1); Quaternion rotation = Quaternion.Euler(eulerAngle); Instantiate(original, position, rotation);
 
  • 라디안 값을 쿼터니언으로 변환
//아래 axis와 angleInDegrees 의 경우 예시로 든 값이다. //보통은 각도를 직접 입력하기 보다 Mathf.Deg2Rad 상수를 사용하여 받아온 라디안 값을 라디안 각도로 변환한다. Vector3 axis = new Vector3(1, 1, 1); float angleInDegrees = 57.3f; Quaternion rotation = Quaternion.Euler(axis * angleInRadians * Mathf.Rad2Deg); //주로 사용함 Instantiate(original, position, rotation); //혹은 Quaternion rotation = Quaternion.AngleAxis(angleInDegrees, axis); //특정한 축 주위로만 회전하는 경우 Instantiate(original, position, rotation);
 
 
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 유니티 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 게임 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
 
CREDIT
글 | 우민규 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
Share article
Subscribe to our newsletter

내일배움캠프 블로그