지난 이야기 : 3D그래픽) 요즘은 3D 맵핑을 오또케 하나용?
https://bbs.ruliweb.com/community/board/300143/read/71359697
흑흑.. 신나게 맵핑을 하다보니 텍스쳐가 너무 많아졌다. 용량도 너무 많아졌어잉..
일단 한대 맞고.
으억, 왜요!
그건 바로 네가 최적화를 못했기 때문이야.
그래서 어떻게 하냐고 물어본 거잖아요 ㅜㅜ
? 알반가.
자, 그럼 알려주겠네.
2010년대 중반 이전까지만 해도 텍스쳐 최적화는 아주 중요한 요소였고,
수많은 게임 그래픽 지망생은 좁아 터진 1024x1024에 최대한 많은 요소를 밀도 있고 퀄리티 있게 꼴아 박는 게 실력이었다.
그러나 하드웨어의 발전과 함께 점차 업계 스탠다드 사이즈는 2048x2048이 되었는데,
섭스턴스 페인터의 기본 엑스포트 사이즈가 2048이라는 점이 이를 시사한다.
그래서 어떻게 최적화 하냐구요!!
오케이, 한대 더.
히이익...
자, 텍스쳐 최적화의 기본은 3가지란다.
1.타일 텍스쳐. 혹은 심리스 텍스쳐.
2.트림시트.
3.RGB 마스크맵, 혹은 채널 패킹.
먼저 첫번째부터 이야기해보자. 이건 너무 쉽지?
심리스 텍스쳐의 알파이자 오메가, 벽돌 텍스쳐를 보자. 이 텍스쳐는 양옆, 위 아래로 끝없이 반복된다.
즉, 이 텍스쳐를 옆에 똑같이 붙혀도 짤린 부분 없이 계속해서 반복되는 텍스쳐를 만들어낼 수 있다는 것이다.
오오우! 그럼 작은 사이즈의 텍스쳐로도 무한한 규모의 맵핑이 가능해지겠군요! 오호이!
갈!
패턴이 반복되는 텍스쳐라면 타일링이 뚜렷하게 보이지 않겠느냐!
이러한 맵핑은 큰 규모에서 사용하기 좋겠지만 그만큼 반복이 눈에 띄기 때문에
다양한 요소(돌, 풀, 나무 등 사물과 배경 에셋)로 눈속임을 해야 하는 수고가 발생한다!!
자연히 바닥 등 타일링 된 영역의 어색함은 결코 피할 수 없지!!
히에엥.. 고럼 오또케 해요...
그건 3번에서 이야기하기로 하고, 조금 더 이야기하자면.
이런 타일링 텍스쳐는 반복되는 요소에 사용하기 때문에 자연물, 혹은 사물에 있어
UV의 사이즈나 사물의 크기와 무관하게 타일링이 가능하다는 점에서 아주 유용하지.
똑같은 콘크리트 건물을 만드는데 건물의 모든 UV를 펼치고 거기에 맞게 콘크리트를 UV 사이즈에 맞게 맵핑 해야 한다면
도대체 얼마나 많은 데이터의 낭비가 발생하겠니?
당연히 1024, 혹은 2048 한장짜리 콘크리트 텍스쳐를 UV의 범위를 넘어서서 입혀 버리면
그저 타일링의 크기만 정해주면 되지 않겠니? 물론 타일링이 가능해야 한다는 점은 말할 필요가 없겠구나.
워! 후! 정말 대단해요! 하지만 건물은 하나의 텍스쳐로만 적용되지 않고
다양한 요소의 집합이잖아요? 그런 건 어떻게 하나요?

드디어 대구빡이 좀 돌아가기 시작하나보구나. 올바른 질문이다 페페.
그걸 위해 만드는 게 바로 트림시트Trimsheet다.
트림시트란 반복되는 여러 요소를 한장의 텍스쳐에 맵핑한 뒤 그 위에 UV를 올리는 기법이지.
오직 가로, 혹은 세로로 반복되는 부분만을 영역으로 구분하는 것이고 UV의 오버랩은 오히려 의도하고 사용되는 것이라네.
가령 아래와 같은 자료를 보게나.

(https://www.youtube.com/watch?v=fBQvL5YR3eg)
또한 트림시트의 패턴을 잘만 구성한다면 단 한장의 텍스쳐만으로 건물 몇 채는 어렵지 않게 텍스쳐링이 가능할 수도 있다네.
우웍! 시벌 개쩌러용! 그럼 타일링 텍스쳐와 트림시트의 구성은 존나게 존나 무적이겠네용??
이노오오오옴!!!!
자연물을 어떻게 트림시트로 표현하겠느냐앗!!! 땅과 같은 요소는 트림시트의 구성을 하기 어렵단 말이다앗!!!!
아흐흑.. 아파 뒤지겠어요..ㅜㅜ
그럼 페페소리는 그만하고 마지막 3번을 알아보자꾸나.
RGB 마스크맵, 혹은 채널 패킹으로 더 잘 알려져 있는 이 기법은 아주 똑똑한 사람이 만들었단다.
하지만 전 멍청한 걸요?
알아.
자, 먼저 맵핑을 위해 텍스쳐를 제작할 때 3가지 색의 조합으로 그려지게 된단다.
R, G, B 채널로 만들어지지.
옛날에는 디퓨즈맵을 사용했고 스펙큘러 맵을 사용했기 때문에 이 RGB 채널이 모두 사용되었기에 텍스쳐의 양을 줄이기 어려웠단다.
하지만 스펙큘러-스무스니스 파이프라인을 대체하며 등장한 메탈릭-러프니스 파이프라인의 강점은 바로 이 부분에서 드러났지.
자, 먼저 컴퓨터는 색을 0~1로 구분한단다. 0이면 없는 거고, 1이면 있는 거지.
그리고 R, G, B의 조합이란 각각의 채널이 어떤 숫자를 표시하느냐와 그 조합에 따라 우리가 보는 색이 있는 이미지가 만들어진다.
근데 어떤 사람이 이런 생각을 한 거지.

(https://dev.epicgames.com/documentation/ko-kr/unreal-engine/using-texture-masks-in-unreal-engine)
베이스컬러를 제외한 나머지 데이터 텍스쳐.
이를테면, 메탈릭(금속 유무 결정), 러프니스(거칠기 정도 결정), 앰비언트 오클루젼(폐색 영역과 정도 결정) 등
흰색과 검정색의 단색으로 일정한 영역과 정도를 결정 짓는 텍스쳐를 각각의 R, G, B 채널에 집어넣고
한 장의 텍스쳐로 만들면 어떻겠냐고.

그래서용?

아무래도 더 맞아야겠구나.

(쳐맞고 멍청해짐)

즉, 본래 3개의 텍스쳐를 1개의 텍스쳐로 압축해서 사용하는 거라고 할 수 있지.
그것도 전혀 다른 텍스쳐에 영향을 주지 않고도 말이야.
개수로도 줄어드는데, 낭비되는 채널을 알뜰하게 사용해버리니 용량상으로도 얼마나 이득이겠니.
수십, 수백 개의 에셋을 다루는데 한 에셋에 들어가는 텍스쳐가 최소 3~5개라면
언제 그걸 하나하나 다 뒤지고 자빠지겠느냐는 실질적인 이유도 있다네.

(멍청)

(물리치료)
정신이 들었어용!
좋아. 필요할 때 더 맞도록 하고.
이러한 구성은 PBR 맵핑에 있어서 상당한 효율성을 만들어 냈는데, 그러기 위해서 몇가지 조건이 필요하지.
하나는, 유니티 엔진의 경우 거의 반드시 정해진 채널에 맞춰서 채널 패킹된 텍스쳐를 제작해야 한다는 점이야.
이 부분은 섭스턴스 페인터의 엑스포트 기능이 지원하니 어렵진 않다네.
유니티 엔진의 경우 URP와 HDRP에 따라서 패킹된 채널에 어떤 텍스쳐가 사용되는지가 달라지니 주의해야 하고 말이지.
HDRP의 경우 G 채널에 AO맵을 집어넣고 알파 채널에 스무스니스를 넣지.
참고로 스무스니스 맵은 러프니스맵을 반전하면 만들어지는 것이라네.
물론 이 방법만 따를 건 아니고, 셰이더 그래프를 작성하여 각 채널에 어떤 것을 넣을 지 결정할 수도 있고 말이야.
물론 더 복잡한 셰이더도 구성 가능하지.
언리얼의 경우는 좀 다른데, ORM맵이라는 걸 표준으로 사용하지.
섭스턴스 페인터에서 언리얼4로 텍스쳐를 엑스포트 하게 될 경우 기본적으로 제공되는 프리셋에 따라
베이스컬러 노멀맵과 함께 ORM맵이 추출되는데,
이 ORM은
Occulusion, Roughness, Metallic의 약자라네.
그리고 이걸 각각 R, G, B채널에 넣어주기 때문에 언리얼에서는 머티리얼 창에 들어간 뒤 텍스쳐를 올려놓고
각 텍스쳐를 아웃풋에 입력한 뒤 ORM맵의 경우 채널 순서대로 AO, 러프니스, 메탈릭에 연결해주면 의도한 텍스쳐링이 구현된다 이 말씀.
참고로 RGB 중에 G 채널이 가장 많은 데이터를 표현할 수 있기 때문에 언리얼에선 G 채널에 가장 중요한 러프니스를 넣었다네.
와 쩌러용!
아직 쩔긴 이르다.
이 기법을 본 더 똑똑한 사람들은 채널 패킹의 효율성과 가능성을 더욱 극대화 시켰는데.
바로 하나의 머티리얼에 2개 이상의 머티리얼을 동시에 표현하는 것이란다.
띠용~뇽뇽뇽뇽뇽~~
그게 말이 되나요?
물론 말이 되지.
먼저 섭스턴스 페인터에서 표현하고자 하는 영역을 레드, 그린, 블루의 각 영역으로 지정해준 뒤

맵핑을 잘 해준 뒤 언리얼과 같은 엔진에 적절하게 연결해준다네.
여기까진 평범하고도 기본적인 방법이지? 원래 이렇게 하는 거니까.
하지만 여기서 끝이 아니다!
앞서 각 R, G, B의 단색으로 지정했던 영역에 적용할 3종의 텍스쳐링을 해주는 것이지.
가령 베이스로 쓸 바위 텍스쳐와 모서리의 하이라이트를 표현하기 위한 부분, 그 외 디테일한 부분(먼지, 이끼, 눈 등)을 표현할
3개의 텍스쳐셋을 더 만드는 것이야. 물론 그만큼 노동력과 미술적 감각이 필요하고 말이야.
그리고 그걸 Lerp(리니어 인터폴레이트), 혹은 Comparison 노드를 이용해 각 R, G, B영역에 마스킹되게끔 연결하면
아까 처음 봤떤 바위와는 차원이 다른 퀄리티의 바위가 나타났지?
심지어 노드에 컬러나 멀티플라이, 디바이드, 노멀 스트랭스 등 노드를 연결해서 색상이나 반사도, 노멀의 정도까지 조절이 가능하다네!
와! 쩌러쩌러용!!
껄껄. 나도 기분이 좋구나. 그럼 몇대만 더 맞아보렴.
...
내가 왜?
(IP보기클릭)211.108.***.***
(IP보기클릭)220.70.***.***
그래서 잘 구현하면 랩실로 냉큼 집어가는 거임. | 25.07.09 19:09 | | |