728x90

서브스탄스3디페인터에서 새로운 프로젝트를 불러올때 노말맵포맷에서 두가지 선택을 볼 수 있다.

DirectX 와 OpenGL

비디오게임을 하는 사람이라면 한번쯤 들어 봤을 DirectX.

근데 대체 노말맵하고는 무슨 상관이 있을까? 그리고 OpenGL 하고는 어떻게 다른건지 궁금해서 한번 찾아봤다. 

구글링도 하고, 어도비공홈에서 찾아보니 노말맵의 RGB텍스처의 녹색채널의 차이가 있다고 함. 

어도비 공홈의 대답

OpenGL 및 DirectX는 프로그래머가 GPU(그래픽 처리 장치)와 대화하기 위해 응용 프로그램에서 사용하는 두 가지 그래픽 API(함수 집합)입니다. 노멀 맵의 경우 RGB 텍스처의 녹색 채널이 해석되는 방식의 차이가 있습니다. OpenGL은 첫 번째 픽셀이 맨 아래에 있을 것으로 예상하는 반면 DirectX는 맨 위에 있을 것으로 예상합니다. 이것이 종종 다양한 기술 토론에서 노멀 맵의 녹색 채널을 반전시켜 픽셀 값을 반대로 할 때 더 잘 작동하는지 확인하는 것이 좋습니다(첫 번째가 마지막이 됨). OpenGL은 Y+ (상향식) 라고 하고 DirectX는 Y- (하향식) 라고 합니다.

😑 이런 교과서 같은 이론적 설명으로는 어떻게 실사용 되는지 알 수가 없어서 좀 더 쉬운답변을 찾아봤다.

어도비 포럼에서 유저들의 좀 더 쉬운 답변을 종합해보면,

노말맵의 포맷방식 설정은 결국 마지막에 상용하는 엔진에 따라서 사용하면 된다. 일반적으로 주로 윈도우PC게임을 만들때에는 Dirext X를 사용하고, 모바일이나 다른 플랫폼에서는 OpenGL을 사용한다고 한다. 두가지의 방식의 차이점은 노말맵의 녹색채널이 반전된다는 것인데, 예를 들어 언리얼엔진에서는 Dirext X를 사용하고 있기 때문에, 섭페작업을 할때 노말맵 포맷을 DirectX로 설정해 놓고 작업을 하면 된다. 또한 혹시 OpenGL의 설정으로 만들게 된 노말맵을 언리얼엔진에 사용하고자 할때에는 텍스쳐 편집기에서 녹색채널을 뒤집어 주면 된다. 

노말맵비교

유니티에서는 플랫폼의 종류의 따라 디폴트가 설정되는데, 제작하고자 하는 게임이 윈도우 용이라면 DX가 디폴트로 설정되어 있고, 맥이나 리눅스라면 OpneGL로 설정되어있다. 

마야 아놀드렌더링에서는 (Ai Standard Surface) OpenGL이 디폴트로 사용된다. 작업할때 OpenGL로 하면 따로 고칠 필요는 없지만, 섭페는 DX가 디폴트이므로 혹시 처음 프로젝트 설정에서 놓치거나 했을 때에는 텍스처 내보내기에서 Arnold로 내보내면 노말맵이 자동으로 OpenGL로 컨버터가 되어 저장된다. 노말맵이 DirectX로 저장되길 원한다면 "Document channels + Normal + AO(No Alpha)"로 텍스쳐 익스포트 설정하여 저장하면 된다. 

예전에 마야에서 아놀드 렌더링을 하는데 섭페에서 작업한 노말맵이 반전되어 나온적이 있었지만 답을 알 수 없어서 정말 답답했었는데, 노말맵포멧설정 때문이라는걸 알게되서 이제는 잘못된 맵을 쉽게 수정할 수 있을 것 같다