Unity Study

2025-11-28 Quaternion(2)

NyumMa 2025. 11. 28. 14:00

쿼터니언(2)

 

게임엔진에서 회전을 다루는 것은 모든 기초가 되므로 오브젝트의 회전에 대한 이해를 제대로 하고 있어야 함

회전의 방식에는 오일러각과 쿼터니언을 통한 방식이 있음

오일러각은 축을 고정하여 회전을 처리하기 때문에짐벌락 문제(특정 축의 회전이 다른축의 회전과 동일해지는 현상)가 발생하고, 선형보간시 축에 대한 회전량의 차이가 있어서 자연스럽게 보간이 안된다는 단점이 있어서 축이 고정되지 않는 한 주로 쿼터니언을 통해 회전을 처리하게 된다.

 

다음은 유니티에서 쿼터니언 처리를 위한 함수 및 메소드를 정리한 것

Quaternion.AngleAxis(angle,axis)

쿼터니언은 회전축과 회전각을 통해 나타낸다.

Axis가 주어지고 이를 angle만큼(라디안 단위가 아닌 도 단위임) 회전시키는 사원수

특정 벡터 v가 주어졌을 때 벡터 vaxis에 대하여 오른손 회전 방향으로 하여 angle만큼 돌림

여기서 angle0인 기준은 벡터 v를 회전축에 proj 했을때 나오는 수직축이 기준이 됨

Quaternion.LookRotation(forward, up)

forward 벡터 방향으로 특정 벡터를 회전시키는 쿼터니언을 생성함

회전축의 기울기는 up을 통해서 회전축 방향을 최종적으로 결정할 수 있음

Updefault값으로 (0,1,0)으로 되어 있음

 

Quaternion.LookRotation(forward)

forward 벡터 방향으로 특정 벡터를 회전시키는 쿼터니언을 생성함

여기서 up은 월드공간의 y축 방향인 (0,1,0)으로 default로 설정되어 있으므로 up 사용할 필요x)

 

Quaternion.SetLookRotation(forward, up)

기존에 생성된 쿼터니언의 회전을 변경하기 원할 때 사용

Lookrotation과 차이점은 q를 새로 생성하는 것이 아닌 q값 자체를 변경(set)

 

transform.rotation

오브젝트의 로컬공간에 대해 월드공간 기준으로의 회전값 반환 -> 반환 타입은 쿼터니언

transform.localRotation

오브젝트가 부모 자식 관계에서 자식 관계에 있을 시 부모의 local transform을 기준으로 해서 반환

transform.eulerAngles

월드공간 기준에서의 회전값 반환-> 반환타입은 vector3

transform.localEulerAngles

부모자식관계에 있을시 부모의 local transform을 기준으로 오일러각 반환

 

Quaternion.Euler(x, y, z)

3차원 벡터의 오일러 각을 쿼터니언으로 변환, 회전순서는 유니티에서 내부적으로

Z(forward 방향)

X(right 방향)

Y(up방향) 으로 처리됨

 

오브젝트의 로컬 트랜스폼 관점에서 이러한 순서의 회전으로 인해

결국은 같은 회전을 의미하는 회전 처리가 여러 개 발생함(짐벌락)

è  당연히 월드 좌표계에서는  다르게 보여지는게 맞으나, 로컬 공간 관점에서는 서로 같은 처리처럼 보이게 되는 것을 의미(dof가 상실)

è  결과론적으로는 원하는 해당 위치에 오게끔 할 수 있으나 연속적인 프레임상에서 보여지는 애니메이션에서 Lerp, slerp 계산시 특정 축이 일치하여(축이 서로 +-90도로 회전할 때) 짐벌락에 의해 도중 원하지 않은 결과(yaw pitch roll 축 겹침)가 발생할 수 있으므로 자유도 상실 문제

è  z, x, y축의 에 대해 축별 회전량에 차이가 있으므로 보간시 비선형적으로 보임

è  따라서 quaternionlerp(단시간) 혹은 slerp을 통해 보간하는 것이 자연스러운 결과를 보일 수 있다.  

'Unity Study' 카테고리의 다른 글

2025-12-02_Quaternion(3)  (0) 2025.12.02
2025-12-01_Parent + Child Hierarchy TRS  (0) 2025.12.01
2025-11-27 Quaternion  (0) 2025.11.27
2025-11-26 3rd person camera(3) - LookAt, Quaternion  (0) 2025.11.26
2025-11-24 version control  (0) 2025.11.24