Unity Study

2025-01-02_Unity Blender Coordinate Difference

NyumMa 2026. 1. 3. 02:21

Unity Blender Coordinate Difference

 

 

언리얼, 유니티,블랜더, maya 등에서 그래픽스 API의 LHS, RHS의 차이 등을 논하며

Model space, World space의 좌표계를 논하는 것은 사실상 틀린 말임.

 

LHS, RHS은 기본적으로 Camera Space, Clip Space에서 통용되는 말

 

Directx – LHS

OpenGL – RHS

 

엔진에서 사용하는 좌표계와

그래픽스 API에서 사용하는 좌표계는

서로 별개다.

 

Model space -> World space 단계에서는 어떤 좌표계를 쓰는지 와는 무관한 동작으로

단지 게임 엔진 내부에서 모델, 월드 공간의 좌표계 기준을 어떻게 정의했는지에 따라서 다르게 결과가 나타나는 것 뿐임

 

 유니티는 front +z 방향이고 right +x 방향, +y up 방향인데

언뜻 보기에는 LHS를 사용한 것처럼 보이지만 이는 단순히

world space view space의 직관을 일관되게 하기 위해 설계된 것에 불과함.

 

만약 Linux 플랫폼에서 Unity 개발을 하게 된다면

world space coord는 엔진 레벨이기에 좌표계 변환 없이 그대로 LHS를 따르는 것,

Camera space, view space에서는 Linux에서는 DirectX로 동작하지 못하기 때문에 엔진 내부적으로 projection matrixOpenGL, VulkanRHS 기반으로 변경하여 사용하게 됨


Blender에서 Front, Right(numpad1, numpad3) DCC에서 -y에서 +y, +x 에서 -x를 가리키는 방향으로 보이게끔 UI UX 설계가 되어 있음

이는 모델링할 때 편의성을 위해서 내가 지금 어디에서 바라보고 있느냐 등을 위해서 front right를 해당 방향으로 정의 한 것이지 이게 지금 model space에서의 FrontRight에 대한 개념이랑 다른 차원의 내용임

1번 누르면 -y방향, 3번 누르면 +X 방향으로 가니까 아 블랜더는 -yforward+xright구나 라고 착각할 수 있는데 이렇게 생각하면 안됨.

실제로 기본 모델인 Suzaane을 생성할때도 모델의 front-z을 보게끔 설계해 놓았는데 이는 DCC에서 애초에 모델 생성 소프트웨어 이므로 모델링 친화적인 입장에서 설계를 해 놓은 것일 뿐 이게 Front는 아니다.

Front Up Right를 정의 할 때는 기본적으로 front 방향, up 방향이 정의 되었을 때 Right 방향에 대한 정의는 Cross(Front, Up) 로 함 -> 이건 어느 DCC든 똑같음

Right 방향에 대한 부분은 +y cross +z를 한 +x 방향이 되며 이는 +y를 마주보는 방방향으 했을 때 Left 부분인 +x right 성분이 되는 것임

è 이런 부분에서 직관적이지 않기 때문에 blender에서 front-y 방향으로 하여 처리를 해 놓았다라고 생각해 볼수 있을 것 같음

 

 

근본적으로 좌표계에서 이러한 인지 차이가 발생하는 이유는

BlenderRight Handed 표기법을 따르는 DCC 소프트웨어이기 때문이다.

반면, 유니티의 gizmo를 보게 되면 유니티는 +zfront, +yup 방향이며

Right 방향은 +x

Cross(+z,+y)를 했을 때도 직관적으로 오른쪽 방향이 right 방향임을 알 수 있다.

 

BlenderUnity의 두 축을 통일해서 봐보면 확실히 차이점이 보임

 

블랜더에서 여러 엔진으로 export할 때 이처럼 좌표축 차이에 따른 문제가 있으므로 어느 방향을 forwrad로 하고 up으로 할지 정할 수 있으며 right은 두 벡터의 외적으로 방향을 결정함  

블랜더에서 유니티로 내보낼 때에는 여러 글에서 그냥 단순히 forward-z,

Up+y로 설정하라고만 설명이 나와 있었는데 이는 직관적이지 못하다.

직관적으로 이해할 수 있는 형태로 확인하기 위해서는 블랜더에서 만든 모델이 기본적으로 -yfront로 하여 만들어 졌을 가능성이 높으므로 이럴 경우 모델을 -y방향에서 +yforward를 가리키게 변경해 주는 것이 직관적임.

이렇게 하면 블랜더에서 모델을 RHS 좌표계로써 보는게 아닌 LHS 좌표계로 임시로 해석하는 형태가 될 수 있음

중요한건 Right 방향의 벡터는

forward up 방향의 외적(수학적 notation으로 오른손 법칙 고정임)

라는 것이다.

 

그러고 나서 forward+y 바라본 기준으로 했을때는 export 설정시

로 하면 유니티 친화적으로(월드 엔진에서 LHS를 사용하는 언리얼이든 관계없이)

Forward +z, up +y니까 직관적으로 +x 가 유니티와 동일하게 right 방향을 가리키도록 되는 것을 볼 수 있다.

 

, -y를 앞으로 만든 모델을 export할 때는 그럼 왜 -zforward로 하는지에 대해

 이중과정으로 생각해서 그 이유를 이해해 볼 수 있다.

(-yfront로 기본적으로 UI UX 친화적으로 정의된 블랜더의 RHS 시스템에서

LHS 엔진 정의 좌표계인 유니티로 넘어갈 때

반전 처리 해 줘야 하므로 -z로 설정하는 것)

 

 

정리

 

블랜더에서는 월드에서 오브젝트가 어디를 향하느냐랑 직접적인 관계가 없음

 

Blender에서 말하는 Front,Right는

DCC에서 뷰포트에서 모델을 작업하기 위한 관점의 개념이지,

실제로 모델에 정의된 Forward 방향은 아님

 

Unity에서의 Forward/Right는

오브젝트 트랜스폼과 월드 좌표계에 고정된 방향 개념으로

이동·회전·물리·애니메이션의 기준이 된다.


그래서 Blender의 Front(-Y)와 Unity의 Forward(+Z)는

같은 방향을 의미하는 게 아니라, 애초에 서로 다른 기준에서 정의된 용어

 

모델 space에서 Forward Up Right는 기본적으로

Right = Cross(Forward, UP) 이며 이는 어떤 엔진이든 관계 없이 통용됨