본문 바로가기

Engine/UNREAL

지식공유 - 오른손 좌표계와 왼손 좌표계(언리얼과 맥스축이 달라서 생기는 문제 공유)

얼마전에 맥스의 프랍이 언리얼로 넘어가면서 y축으로 90도 돌아가는 문제가 있었습니다.

그 이유를 명확히 이야기 하자면 맥스와 언리얼의 좌표계가 다르기 때문입니다.

맥스 - 오른손 좌표게 , 언리얼 - 왼손 좌표계

 

 

여기서 오른손 좌표계와 왼손 좌표계에 대한 간단한 설명.

3차원 좌표계를 표현할 땐 보통 아래의 그림과 같은

왼손 좌표계(left-handed coordinate system)와 오른손 좌표계(right-handed coordinate system) 두 가지 방법을 이용합니다.

 

오른손 좌표계는 근 100여년 동안 표준적으로 사용되어온 방법입니다. 물리학계를 비롯해 OpenGL 등 대부분은 이 좌표계를 사용합니다.

왼손 좌표계를 사용하는 대표적인 사례로는 Direct3D가 있습니다.

 

이 두 좌표계를 외우는 방법은 다양하겠지만다음과 같은 방법으로 숙지하면 알기 편합니다.

 

  1. 박수 칠 때 처럼 양 손을 마주 보도록 펼친다. 이 때 엄지손가락은 나머지 손가락과 직각이 되도록 한다.

 

  2. 가운뎃손가락을 손바닥에 수직이 되도록 반 쯤 접고, 약손가락과 새끼손가락은 완전히 접는다.

 

  3. 마치 '쌍권총 자세'를 연상케하는 모양이 되었을 것이다.

 

     왼손은 엄지손가락부터 순서대로

 

     [엄지손가락-x, 집게손가락-y, 가운뎃손가락-z]

 

     오른손은 반대 순서로

 

     [엄지손가락-z, 집게손가락-y, 가운뎃손가락-x]

 

     이런 식으로 대응시킬 수 있다.

 

이 상태로 양 손의 집게손가락을 하늘을 향하게 해서 위의 그림에 나온 좌표계와 비교해보시면 똑같은 배치가 되어있음을 알 수 있습니다.

 


추가질문 - 다른 뼈들은 알아서 축정렬이 되서 잘 들어오는데 왜 소켓에 붙은 Prop만 그렇지?

그 이유도 간단합니다. 다른 모든 더미와 뼈들은 맥스에서 제작해서 넘어오기 때문에 알아서 부모축을 따라가면서

문제가 없지만, 무기에 붙은 소켓 더미는 언리얼에서 제작한 것으로 언리얼 원본 좌표를 따라갑니다.

거기서 프랍이 혼란을 갖게 됩니다.

프랍은 맥스에서 만든거라 오른손좌표계로 기억되어 넘어오지만, 언리얼에서 만든 소켓은 왼손 좌표계다 보니

축이 다르게 설정 되는 겁니다.

이 문제를 해결하기 위해서 무기 축 더미를 언리얼 소켓이 아닌 맥스에서 더미를 만들어 사용하게 되면

문제가 해결되는데, 현재 언리얼에서 쓰는 소켓 더미는 엔진상에서 많이 사용되고 있기 때문에 그 상태를 유지하도록 한겁니다.