[W.I.P] [Tutorials]Understanding allegorithmic substance designer. PART-3
서브스턴스 디자이너 한국 개발자 그룹을 구독 하시려면.
http://subinkorea.blogspot.kr/
christian.kim@allegorithmic.com 로 메일신청.
이제는 모바일 게임에서도 노멀맵을 자주 사용 하는 시대가 되었습니다.
앞으로 오픈지엘 3.0 모바일 시대가 되면 더욱 더 필요 한 시점이 될거구요.
서브스턴스 디자이너에서는 몇가지 노말맵 생성기능을 제공 하고 있습니다.
PART-2 에서는 보편적인 Normal Mapper 필터를 잠깐 살펴 봤는데요. PART-3 에서는 Height Normal Blender 필터를 경유 하여 노말맵을 생성 하였습니다.
PART-3 의 목표는 서브스턴스에서 기본적으로 제공 하는 렌더링 엔진의 노말맵 연산에 사용 되는 Binormal 과 UV Space 간의 계산을 위한 노말맵의 녹색 체널에 대한 이야기를 살짝 다루면서 서브스턴스의 맥락과 이해에 좀 더 접근 해 보는 것에 두었습니다.
쉽게 말하면 원래 서브스턴스에서 내부적으로 제공 하는 DirectX 모드 와 OpenGL 모드에 따른 Y 체널 Invert Function 을 사용자 노드로 다시 구현 해 보는 것이죠.
이번 구현에서는 쉬운 이해를 위한 방법을 선택 하고 있고 좀 더 어려운 매개변수 개방을 위한 내부 함수(Internal built-in Function)로 변수 개방을 하지 않습니다.
이해를 위해서 간단한 노드를 구성 했어요.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjGMmIt_KRfD6z5PKmsARWS-MSlrQ15aqqHYdX0VSZDmyszXESeqXLhv6wUSuRocdKIyPfp8KcnRuf63qxLUfFix8jMevh4TzV-BLNEPyUn2Y6fn_Lyt8AGkNLhc-0I9lQOrVdVgkBhac/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.07.41.png)
그냥 딱 봐도 정상적으로 출력 되고 있어 보입니다.
테스트를 위해서 일단 렌더링 엔진을 확인 해 봐야겠습니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgKwCkJBTJRWrH3pSnx9pR746TKln8iV0iJiGuN1OXdRv6x8qIYGruDQW1nUnZdeC3CPGQKStA6SX-CMsHdh3pCj8BBGWTsHPG3td-vx0zP6cG3BBH27fpTHjR30c0nexrEQLPDzOev40/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.22.38.png)
예문 작성을 맥에서 하고 있기 때문에 OpenGL GLSL 로 설정을 하였습니다.
SSE2 는 인텔 CPU 에서 제공 하는 소프트웨어 가속 렌더링 아티텍처 입니다.
서브스턴스는 내부적으로 Bool 타입을 green channel inverting function 을 제공 하고 있습니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc2bn2qHdA5r97pSW_EJ4-8CKsj7TTlJVqyrGAkACnfyTB_2crUDzmx6oCPYgxrHWzQtC3nlqtkSfuge7fMk1Yp_qzySL0UO3-i3UdF4CznTUGYwyS_vu1a4krzH5bqjDx6eOpRU6wi-8/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.26.59.png)
Normal Format 을 보면 다이렉트 엑스와 오픈지엘을 선택 해 줄 수 있어요.
하지만 어차피 개념적인 이해를 위한 예제 이기 때문에 이것은 생각 하지 않겠습니다.
우리는 노멀맵이 세개의 체널로 부터 작성 되고 있다는 것을 알고 있습니다.
즉 녹색 체널을 반전 시켜야 하죠.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEj3o4Q4_qs9472LjP_7jJWfz1Ca7fXOVXbdXO5NJ-vcJw_8yOHvLDZ-PAFeLSLEXrP0P2ySrnF1Usvw8FvNMrzYoP_rZNOZwUV47oOAr1myOAjfIVxi-pKEmk3OWy7_-Mc4b_8rt4Bg/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.30.57.png)
노드를 좀 더 활용 해 보기 위해서 channel split 으로 RGBA 체널을 분리 시키고 다른 필터를 경유 시킨 후에 Channel merge 하여 병합 후 Output 노드로 연결 하겠습니다.
무엇을 해야 할까요?
녹색 체널을 반전 하기 위해서 분리 노드와 병합 노드 사이의 G체널에 Invert 와 관련 된 필터를 연결 해 보는 것이죠.
역시 좌측하든의 라이브러리 창에서 invert 로 검색 해 보는 겁니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtwiYYttO8YJmthuU-C4SiWm_rbRbwGBdhv0jI5YMz3Djk0tWcaONXkz7nTXebrQQOtWTCG1IO3MuxUeAadqnrwEvlVxgRsqhbFz9TEJKBot2gk2dzKJMpaJOakcLc1SIk8wPkTz7DsWE/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.35.42.png)
우리는 회색 체널을 반전 해야 하기 때문에 Invert Grayscale 필터를 사용 할 것입니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUx9bCNyoKAFxD2GXgLyrtNk4M84R0NRR6n6IrYP1jXFrD_o7qKu4LQM1sJXhthQqZtCTUkZ56e1PNKOcu9M20IAxzjKLWsm-5UFk7GHxspHjAlhlEuMJ5JekNzJ62m7E9J8OMKGqUZjc/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.37.34.png)
Invert Grayscale 필터를 연결 해 보니 노말맵의 위아래가 바뀐 결과를 볼 수 있어요.
왜 이런 체널 인버트를 해야 하는지는 Binormal 연산이 탄젠트 공간과 UV 공간 좌표계의 계산에 의해 이루어 진다는 겁니다.
다이렉트 엑스는 좌하단이 0.0 이고 오픈지엘은 좌상단이 0.0 의 UV 공간 좌표계를 사용 합니다.
쉽게 생각 하면 위아래가 뒤집혀 있다는 거죠.
렌더링 아키텍처에 따른 올바른 법선맵핑 연산을 위해서 가볍게 ... 뭐 아.. 그렇군. 정도로 이해 하시면 될거 같습니다.
보통 쉐이더 작성시에는 Y 값에 대해서 마이너스 값으로 치환 대입 하여 처리 하고는 하죠.
하지만 쉐이더에서는 지속적인 계산을 수행 해야 하기 때문에 중간 작업용 UberShader 등에서는 이런 Bool 타입 파라메터가 있고 if 문 등으로 처리 할 수 있지만 연산은 그다지 달갑지 않은 탓에 다이나믹 텍스처를 통해 초기 한번만 처리 하고 결과를 리턴 할 수 있도록 하는 것이 좋을 듯 합니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbKe0y-d2KYT83VYHknxBdPAqtkcMjCD_I53HJDCJJ3IxGOmATdczROo7V9CBihvOsqKo9S5DobGZQ-1c-lN2gDBd0yNBqHKOXbajUFQewvunBMpa_UtYPX51p-q5g71JxbKRohiHYY7I/s1600/Virtuos-liscences-Substance-tool-suite.png)
예제파일.
Game Developer Leegoon copyright all right reserved since 2010.
http://subinkorea.blogspot.kr/
christian.kim@allegorithmic.com 로 메일신청.
안녕하세요.
JP 입니다.
앞으로 오픈지엘 3.0 모바일 시대가 되면 더욱 더 필요 한 시점이 될거구요.
서브스턴스 디자이너에서는 몇가지 노말맵 생성기능을 제공 하고 있습니다.
PART-2 에서는 보편적인 Normal Mapper 필터를 잠깐 살펴 봤는데요. PART-3 에서는 Height Normal Blender 필터를 경유 하여 노말맵을 생성 하였습니다.
PART-3 의 목표는 서브스턴스에서 기본적으로 제공 하는 렌더링 엔진의 노말맵 연산에 사용 되는 Binormal 과 UV Space 간의 계산을 위한 노말맵의 녹색 체널에 대한 이야기를 살짝 다루면서 서브스턴스의 맥락과 이해에 좀 더 접근 해 보는 것에 두었습니다.
쉽게 말하면 원래 서브스턴스에서 내부적으로 제공 하는 DirectX 모드 와 OpenGL 모드에 따른 Y 체널 Invert Function 을 사용자 노드로 다시 구현 해 보는 것이죠.
이번 구현에서는 쉬운 이해를 위한 방법을 선택 하고 있고 좀 더 어려운 매개변수 개방을 위한 내부 함수(Internal built-in Function)로 변수 개방을 하지 않습니다.
이해를 위해서 간단한 노드를 구성 했어요.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjGMmIt_KRfD6z5PKmsARWS-MSlrQ15aqqHYdX0VSZDmyszXESeqXLhv6wUSuRocdKIyPfp8KcnRuf63qxLUfFix8jMevh4TzV-BLNEPyUn2Y6fn_Lyt8AGkNLhc-0I9lQOrVdVgkBhac/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.07.41.png)
그냥 딱 봐도 정상적으로 출력 되고 있어 보입니다.
테스트를 위해서 일단 렌더링 엔진을 확인 해 봐야겠습니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgKwCkJBTJRWrH3pSnx9pR746TKln8iV0iJiGuN1OXdRv6x8qIYGruDQW1nUnZdeC3CPGQKStA6SX-CMsHdh3pCj8BBGWTsHPG3td-vx0zP6cG3BBH27fpTHjR30c0nexrEQLPDzOev40/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.22.38.png)
예문 작성을 맥에서 하고 있기 때문에 OpenGL GLSL 로 설정을 하였습니다.
SSE2 는 인텔 CPU 에서 제공 하는 소프트웨어 가속 렌더링 아티텍처 입니다.
서브스턴스는 내부적으로 Bool 타입을 green channel inverting function 을 제공 하고 있습니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc2bn2qHdA5r97pSW_EJ4-8CKsj7TTlJVqyrGAkACnfyTB_2crUDzmx6oCPYgxrHWzQtC3nlqtkSfuge7fMk1Yp_qzySL0UO3-i3UdF4CznTUGYwyS_vu1a4krzH5bqjDx6eOpRU6wi-8/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.26.59.png)
Normal Format 을 보면 다이렉트 엑스와 오픈지엘을 선택 해 줄 수 있어요.
하지만 어차피 개념적인 이해를 위한 예제 이기 때문에 이것은 생각 하지 않겠습니다.
우리는 노멀맵이 세개의 체널로 부터 작성 되고 있다는 것을 알고 있습니다.
즉 녹색 체널을 반전 시켜야 하죠.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpEj3o4Q4_qs9472LjP_7jJWfz1Ca7fXOVXbdXO5NJ-vcJw_8yOHvLDZ-PAFeLSLEXrP0P2ySrnF1Usvw8FvNMrzYoP_rZNOZwUV47oOAr1myOAjfIVxi-pKEmk3OWy7_-Mc4b_8rt4Bg/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.30.57.png)
노드를 좀 더 활용 해 보기 위해서 channel split 으로 RGBA 체널을 분리 시키고 다른 필터를 경유 시킨 후에 Channel merge 하여 병합 후 Output 노드로 연결 하겠습니다.
무엇을 해야 할까요?
녹색 체널을 반전 하기 위해서 분리 노드와 병합 노드 사이의 G체널에 Invert 와 관련 된 필터를 연결 해 보는 것이죠.
역시 좌측하든의 라이브러리 창에서 invert 로 검색 해 보는 겁니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtwiYYttO8YJmthuU-C4SiWm_rbRbwGBdhv0jI5YMz3Djk0tWcaONXkz7nTXebrQQOtWTCG1IO3MuxUeAadqnrwEvlVxgRsqhbFz9TEJKBot2gk2dzKJMpaJOakcLc1SIk8wPkTz7DsWE/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.35.42.png)
우리는 회색 체널을 반전 해야 하기 때문에 Invert Grayscale 필터를 사용 할 것입니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUx9bCNyoKAFxD2GXgLyrtNk4M84R0NRR6n6IrYP1jXFrD_o7qKu4LQM1sJXhthQqZtCTUkZ56e1PNKOcu9M20IAxzjKLWsm-5UFk7GHxspHjAlhlEuMJ5JekNzJ62m7E9J8OMKGqUZjc/s1600/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA+2014-03-02+04.37.34.png)
Invert Grayscale 필터를 연결 해 보니 노말맵의 위아래가 바뀐 결과를 볼 수 있어요.
왜 이런 체널 인버트를 해야 하는지는 Binormal 연산이 탄젠트 공간과 UV 공간 좌표계의 계산에 의해 이루어 진다는 겁니다.
다이렉트 엑스는 좌하단이 0.0 이고 오픈지엘은 좌상단이 0.0 의 UV 공간 좌표계를 사용 합니다.
쉽게 생각 하면 위아래가 뒤집혀 있다는 거죠.
렌더링 아키텍처에 따른 올바른 법선맵핑 연산을 위해서 가볍게 ... 뭐 아.. 그렇군. 정도로 이해 하시면 될거 같습니다.
보통 쉐이더 작성시에는 Y 값에 대해서 마이너스 값으로 치환 대입 하여 처리 하고는 하죠.
하지만 쉐이더에서는 지속적인 계산을 수행 해야 하기 때문에 중간 작업용 UberShader 등에서는 이런 Bool 타입 파라메터가 있고 if 문 등으로 처리 할 수 있지만 연산은 그다지 달갑지 않은 탓에 다이나믹 텍스처를 통해 초기 한번만 처리 하고 결과를 리턴 할 수 있도록 하는 것이 좋을 듯 합니다.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbKe0y-d2KYT83VYHknxBdPAqtkcMjCD_I53HJDCJJ3IxGOmATdczROo7V9CBihvOsqKo9S5DobGZQ-1c-lN2gDBd0yNBqHKOXbajUFQewvunBMpa_UtYPX51p-q5g71JxbKRohiHYY7I/s1600/Virtuos-liscences-Substance-tool-suite.png)
예제파일.
Game Developer Leegoon copyright all right reserved since 2010.
Comments
Post a Comment
덧글쓰기 기능 있는거 아시죠? ㅋㅋ