노말맵과 스무싱 그룹
스무싱 그룹은 기본적으로 최종 익스포트시에 안들어 간 곳이 없도록 처리 해야 한다. 왜냐하면 맥스에서 스무싱 그룹을 지정하지 않고 익스포트 후 게임 엔진에 올릴면 스무싱 그룹을 엔진이 임의대로 설정을 하기 때문에 작업자가 의도하지 않는 효과를 가져올 수 있다.
그래서 꼭 폴리곤 하나라도 스무싱 그룹을 지정해주면서 작업을 진행해야 하는데, 많은 작업자들이 작업 하다 보면 제대로 정리 안된 채로 추출 하게 되고 또한 디퓨즈 맵에 가리고 광원에 가려서 엔진에서 조차 제대로 확인을 못하게 되는 경우가 부지기수다.
특히나 배경 파트에선 캐릭터 파트와 다르게 폴리곤이 90도로 꺾이고 넓은 면적의 폴리곤을 사용하는 경우가 많기 때문에 더더욱 도드라지게 되므로 최종 익스포트 하여 추출하는 메쉬 데이터는 스무싱 그룹이 안 들어간 곳이 없도록 하자.
그리고 노말맵이 현재로선 거의 대중화가 되다시피 하면서 스무싱 그룹과 노말맵이 상관 관계 또한 중요하게 적용이 되었다. 기본적인 내용이지만 노말맵의 원리는 하이 폴리곤의 노말 방향 자체를 텍스쳐의 컬러값으로 기록을 하여 로우 폴리곤 메쉬 데이터에 입혀 졌을 때, 노말맵이 라이트에 반응하여 실제 노말 데이터보다 더 많은 노말 데이터를 보이도록 만드는 눈속임이다.
스무싱 그룹과 노말맵의 상관 관계가 중요하게 되는 이유는, 실제 적용이 될 로우폴리곤 메쉬의 노말 방향을 베이스로 해서 하이폴리곤의 노말 데이터가 베이크(Bake)되기에 스무싱 그룹은 최종적으로 노말맵을 베이크 하기 전에 선행되어 처리 되어야 할 중요한 요소다.
사실 그냥 RTT든 xNormal이든 베이크할 때 스무싱 그룹을 모두 [1]로 설정해 주면 속 편하긴 하다. 그렇게 하면 로우폴리곤의 노말에 따라 알아서 노말맵이 베이크 되기 때문이다. 위의 예시를 보면 알겠지만 위 세 개의 박스는 같은 6폴리 박스이고 A 박스와 B 박스는 각각 아래의 노말맵이 적용된 것인데, 차이점은 스무싱 그룹의 차이다.
A 박스는 각 폴리곤마다 다른 스무싱 그룹이 적용된 것이고 B 박스는 모든 폴리곤이 하나의 스무싱 그룹으로 적용된 것. 따라서 베이킹 된 아래의 노말맵에서도 차이점을 보이는데, 하나의 스무싱 그룹으로 넣음으로써 노말맵 자체가 저렇게 그라데이션 먹은 것처럼 베이크 되었다.
이것은 즉 A 박스는 폴리곤이 각각 다른 스무싱 그룹이라 하드 엣지이기 때문에 노말맵에선 경계선 부분만 노말 방향을 그려주어서 저런 말끔한 노말맵이 나온 것이고, B 박스는 스무싱 그룹을 [1]로만 잡음으로써 소프트 엣지이기 때문에 노말맵의 전체가 저렇게 박스가 하드 엣지 처럼 보이도록 속이기 위해 노말맵이 저렇게 그려진 것이라고 보면 된다. 그리고 한눈에 봐도 B 박스의 노말맵은 다른 곳에 잘라 쓰는 방식의 재활용 못하는 단점이 있다.
하지만 그럼에도 불구하고 A 박스처럼 말끔하게 속이지 못하고 약간 거뭇거뭇하게 타 보인다. 이것은 노말맵이 잡아줄 수 있는 한계치 이상은 완벽하게 잡아주지 못한다 라는 결론. 이것은 본인의 개인적인 생각이므로 확실한 것은 아니다. 혹시나 탄젠트 스페이스가 아닌 오브젝트 스페이스의 절대 값을 갖는 노말맵이라면 달라지지 않을까 하지만 어짜피 그것은 잘 쓰이지 않으므로, 패스.
그러므로, 배경에 쓰이는 프랍이나 FPS의 총기류 같은 하드 엣지를 가진 메쉬를 편하자고 [1]로 스무싱 그룹을 잡고 하이폴을 노말맵으로 베이크 하는 방법은 올바르지 않을 것 같다. 위의 이미지 처럼 각진 하드 엣지의 속성을 가져야 할 메쉬를 스무싱 그룹 하나로 넣어서 까맣게 타는 부드러운 엣지를 노말맵이 바로잡기 위해 그라데이션 같은 노말맵이 추출 됐기 때문.
그렇다면 어찌 해야 할까? 가장 좋은 방법은 바로 어느 각도 이상 꺾이는 부분은 스무싱 그룹을 각각 잡아 하드 엣지로 주는 것. 당연하겠지만 저런 6폴리의 박스를 억지로 스무싱 그룹을 [1]로 주는 것은 말도 안되고 실제로 그렇게 쓰는 작업자도 없겠지만 말이다. 하지만 이렇게 할 경우 필히 봉착하게 되는 문제점이 발생하게 된다.
바로 UV Seam 문제.
노말맵에서 가장 신경 쓰이는 부분이 바로 이 부분인데, UV Seam 부분에 검거나 하얗게 줄이 생기기 마련이다. 이것은 직각의 로우폴리곤 노말 방향은 90도를 향하고 있지만 노말맵의 노말 방향은 여러 방향으로 노말이 뻗어나가 있기 때문에 경계선 부분의 노말 방향이 서로 어긋나 잘못된 방향을 보이게 되어 저런 현상이 생기는 것 이다.
간단히 말해 메쉬의 경계선 부분의 노말과 노말맵의 경계선의 노말이 서로 일치하지 않아 발생하는 현상.
해결법은 UV Seam을 끊어주고, UV의 Face 사이를 벌려주어 어느 정도 약간의 공간을 만들어 준다.
UV를 끊는게 처음엔 갸우뚱 하며 UV 배치할 공간이 가뜩이나 적은데 손실이 오는 것 같고 디퓨즈를 그릴 때 끊어진 부분을 어떻게 이어지게 그릴지, 또한 재질 텍스쳐를 올릴 때 끊어질텐데 등등의 여러가지 또 다른 문제점이 생기지만 노말맵 작업에 있어서 UV Seam을 끊어 주는 것 이상의 효과적인 방법은 없다.
모델링이 복잡해지면 UV를 끊어주고 스무싱 그룹 정리해주는 작업이 사실 만만치 않아지지만 가장 확실하고 좋은 퀄리티의 하드 엣지의 노말맵 결과물을 얻을 수 있다. 이러한 하드 엣지의 깔끔한 노말맵을 얻기 위해 앞서 강조한 스무싱 그룹과의 중요한 연관성은 무심고 지나칠 수도 있는 부분이기도 하겠지만 작업하며 한번 더 신경 쓰고 꼼꼼히 짚고 넘어간다면 더 좋은 퀄리티를 얻을 수 있기에 강조한 것이다.
이런 기술적인 문제는 이미 해외 포럼에서도 여러번 언급되었던 사항이고 UDK 레퍼런스 문서에도 찾아 볼 수 있는 부분이지만 개인적으로 작업하며 느껴왔던 부분과 함께 정리하면서 조금이라도 도움이 되길 바라며 작성해 본다.









많은 도움이 되었습니다 이 내용을 보기 전에 노멀맵과 스무싱 그룹 2(MikkT space)의 내용을 같이 봤는데 작업도 편리하고 오류도 줄이는 방법으로 스무싱 그룹을 1을 주고 uv를 오브젝트의 형태에 따라 잘라 펴주면 MikkT space방식으로 베이크를 했을 때 가장 오류를 줄일 수 있는 방법이라고 생각이 들더군요 때에 따라 다르겠지만 제가 이해한 내용이 많을까요?
답글삭제오타가 있네요.. 끝에 제가 이해한 내용이 맞을까요?
삭제도움이 되었다니 다행입니다. 이 내용과 MikkT Space는 다른 솔루션 입니다.
삭제플랫한 노멀맵을 얻기 위해서는 이 포스트 처럼 UV Seam 끊어주고, 끊어준 대로 스무딩 그룹을 설정 해 주면 되구요. MikkT Space 방식을 사용한다면 스무딩 그룹 1로 설정, UV는 자유롭게 하셔도 깨끗하고 오류 없는 결과를 얻을 수 있습니다. 다만 에셋의 성격(절벽이냐 건물이냐, 하드섭 기반이냐, 아니냐 등) MikkT Space방식과 이 포스트의 방식을 선택적으로 사용 하심이 옳습니다.
MikkT Space로 인해 끊어주는 방식을 무시해도 되지만 프로젝트나 에셋의 성격에 따라 다르고 플랫한 노멀맵이 에디팅 하기 쉬운 장점이 있기 때문에 아직 까지는 두 가지 모두 사용한다고 보시면 됩니다.
MikkT Space 방식 기반으로 하고 형태에 따라 UV Seam 끊기, 스무딩 그룹 각각 다르게 주는 혼합적인 방법을 말씀하신 거라면 잘 이해 하셨고 그렇게 사용 하셔도 좋습니다!