Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Archives
Today
Total
관리 메뉴

가장 보통의 존재

Marmoset Toolbag으로 완벽한 Mesh Maps 뽑기 (2) 본문

개인 연구

Marmoset Toolbag으로 완벽한 Mesh Maps 뽑기 (2)

Northstar_ 2022. 12. 5. 16:45

본격적으로 베이킹 하기에 앞서, FBX들을 베이킹에 적합한 상태로 만들어 줘야 합니다.

 

당연하지만 먼저, 로우 폴리 모델링과 하이 폴리 모델링이 필요합니다. 로우 폴리 모델링에서 표현할 수 없는 디테일을 하이 폴리 모델링에서 표현하고, 이를 텍스쳐의 형태로 전환시키는 것이 베이킹이기 때문이죠.

 

다만 모델링 두 개만 있다면 모든 준비가 끝나는 것은 아닙니다. 가능하다면 하나의 통짜 모델링이 아닌, 여러 개의 오브젝트로 나누어 주는 것이 좋습니다.

 

출처 : https://marmoset.co/posts/toolbag-baking-tutorial/

마모셋 툴백에서는 Bake Group이라고 칭하는 기능을 활용하기 위함입니다. 하나의 오브젝트로 통일하여 메쉬 맵을 굽게 되면 근접한 면에서 위의 이미지와 같은 오류가 발생할 수 있기 때문에, 각 파츠별로 Projection을 하는 것입니다.

 

그리고 베이킹에 사용될 모든 오브젝트의 이름을 <메쉬 이름_low, 메쉬 이름_high> 와 같은 형식으로 정리해 주어야 합니다. 마모셋에 FBX를 불러올 때 접미사에 따라서 자동적으로 하이 폴리, 로우 폴리 모델링을 분리하고 같은 Bake Group에 넣기 때문입니다.

 

이렇게 접미사로 오브젝트를 분리해 베이킹하는 것은 섭스턴스 페인터에서도 활용됩니다.

 

이후 하이폴리는 하이폴리대로, 로우폴리는 로우폴리대로 FBX로 뽑아줍니다.

마모셋 툴백을 처음 실행시켰을 시 나오는 화면입니다. 왼쪽 상단의 빵 모양 아이콘을 클릭해 새로운 Bake Project를 생성해 줍니다.

위에서 준비했던 _high, _low FBX를 Quick Loader에 넣어주기만 하면 베이킹에 사용될 모델링을 준비하는 과정은 끝났습니다. Outliner에 메쉬 이름별로 Bake Group들이 생성된 것을 확인할 수 있습니다.

더보기

Q: FBX를 불러와도 일부 오브젝트가 Bake Project에 나타나지 않습니다. 왜 이러한 현상이 발생하나요?

 

A: 앞서 말씀드렸듯이, 마모셋 툴백에서는 Suffix(접미사)를 통해 자동적으로 하이 폴리 모델링과 로우 폴리 모델링을 분리합니다. 만약 _low, _high 접미사가 달려있지 않거나, 오타가 포함되어 있어 로우 폴리와 하이 폴리가 매칭되지 않을 경우 Bake Project에선 이를 불러오지 않습니다.

Cloth_low 오브젝트의 이름을 Cloth로 변경하였을 때의 결과. Bake Project에서 Cloth_high와 매치할 Cloth_low 모델링을 찾지 못한 모습을 볼 수 있습니다.

Quick Loader의 Auto-Reload 기능이 활성화 되어 있다면 FBX에 변경점이 생길 경우 자동으로 FBX를 다시 불러오기 때문에, 오류가 생긴 오브젝트의 이름만 변경하고 저장해 주면 됩니다.

본격적으로 베이킹 하기에 앞서, 생성될 텍스쳐들이 저장될 경로를 지정해 줘야 합니다. Output의 파일 경로 옆에 있는 ...을 클릭하여 이름과 파일 확장자를 지정해 주면 됩니다. 기본값은 PSD로 설정되어 있으나 PNG로 변경하는 것을 추천드립니다.

 

캡처된 이미지에는 언더바가 붙어있는데, 이는 실수입니다. 텍스쳐를 뽑아낼 때 기본적으로 <파일명_텍스쳐 별 Suffix>같은 형식으로 저장하기 때문에, 언더바를 빼는 것이 맞습니다.

 

이제 Bake Project의 인스펙터에 있는 여러 기능 중 중요한 것 몇 가지만 짚고 넘어가도록 하겠습니다. 대부분 기본 세팅으로 놓고 사용해도 좋지만, Tangent Orientation은 특히 중요합니다.

Tangent Orientation Right-Handed / Left-Handed

두 개의 노멀 맵에서 어떤 차이가 느껴지시나요? 대충 봐서는 그냥 파랗고, 색감에 약간의 차이가 있는 정도밖에 느껴지지 않습니다.

G 채널, Tangent Orientation Right-Handed / Left-Handed

하지만 RGB 채널중 G 채널만 놓고 비교한다면 어떠한 차이가 있는지 정확히 알 수 있습니다. Tangent Orientation에 따라 G 채널이 반전되어있음을 확인 할 수 있습니다.

Substance Painter에서 노멀 맵을 적용, Tangent Orientation Right-Handed / Left-Handed

노멀 맵을 직접 적용해 보면 더욱 확실히 알 수 있습니다. 좌측의 이미지에서는 노멀이 뒤집힌 모습을 볼 수 있죠.

 

이 부분이 중요한 이유는 그래픽스 라이브러리(OpenGL, DirectX)에 따라 노멀 맵의 호환성이 달라지기 때문입니다. 그래픽스 라이브러리, 노멀 맵의 원리 등을 따지면 밑도 끝도 없기 때문에, 간단히 Right-Handed는 OpenGL, Left-Handed는 DirectX에 호환된다는 점만 알아두면 될 것 같습니다.

 

출처: Marcel van Duijn - Programs Normal map OpenGL or DirectX

3D 프로그램별로 사용하는 그래픽스 라이브러리는 여기에서 확인할 수 있습니다. 섭스턴스 페인터는 DirectX를 사용하고 있으니, Left-Handed로 설정 해 주어야 합니다.

 

단순히 G 채널만 반전된 것이기에 Right-Handed로 베이킹하고 포토샵에서 G 채널을 반전하면 DirectX용 노멀 맵으로 사용 할 수 있기도 합니다.

 

다음으로 중요한 부분은 Bake Project의 Output 패널에 있는 설정들입니다.

 

Samples : 텍스쳐의 퀄리티와 직접적인 연관이 있는 설정입니다. 값이 높을수록 더 큰 텍스쳐를 샘플링하고 다운스케일링하는 과정을 거치며, 좋은 퀄리티의 텍스쳐를 뽑을 수 있습니다. 하지만 연산 시간도 그만큼 늘어납니다.

Soften : Softening 필터를 얼마나 적용할 지 설정할 수 있습니다. 값이 1에 가까울수록 부드러워집니다.

Multi-Layer PSD : 활성화 할 경우 모든 텍스쳐를 하나의 PSD에 레이어별로 분리해 뽑아냅니다.

 

Padding - Moderate

Padding : 텍스쳐가 UV 경계선 바깥으로 얼마나 더 지속될 지 설정할 수 있습니다. UV 경계선에 생기는 오류들을 잡아내는 데에 적합하며, 텍스쳐의 크기가 작아 UV 경계선이 모호할 때 유용한 설정입니다. Custom으로 설정하여 Padding Size를 조절할 수도 있습니다.

Multiple Texture Sets : 활성화 할 경우 로우 폴리 모델링의 Material에 따라서 여러 개의 텍스쳐를 뽑을 수 있습니다. 한 Bake Project 안에 UV가 다른 메쉬들이 포함되어 있을 경우 모델링 툴에서 Material을 분리하고 가져오면 사용하기 좋습니다.

 

이외에 Resolution은 목표로 하는 사이즈로 설정해 주면 됩니다. 그런데, 설명하는 와중에 빠진 설정이 하나 있습니다. Format입니다.

 

Format 설정에는 채널 당 몇 비트를 할당할 지 정할 수 있습니다. 8비트는 흔히 포토샵에서 사용하는 RGB256의 색상을 담아낼 수 있습니다. 그 이상 비트를 추가하더라도 모니터에서 분간할 수 없으며, 용량 낭비만 생길 뿐입니다.

 

그런데 굳이 Format만 따로 뽑아서 설명하는 이유는, 섭스턴스 페인터의 Generator에서 8비트 이상의 텍스쳐를 요구하기 때문입니다.

Marmoset Toolbag / Substance Painter에서 베이킹한 Mesh Map을 적용하였을 때.

마모셋 툴백에서 뽑은 Mesh Map을 적용하고 섭스턴스 페인터의 Steel Painted Rough Damaged 스마트 머티리얼을 적용했을 때의 모습입니다. 앞서 섭스턴스 페인터 Baker의 문제점을 주구장창 설명했음에도 불구하고, 정작 마모셋 툴백에서 뽑아온 Mesh Map을 적용하니 픽셀화 현상이 발생하고 섭스턴스 페인터에서 뽑아온 Mesh Map에는 이러한 오류가 없습니다.

 

Marmoset Toolbag / Substance Painter에서 베이킹한 Position Map

그 이유는 텍스쳐의 비트 차이입니다. 마모셋 툴백에서 가져온 텍스쳐는 RGB채널, 8비트, 총 24비트를 사용하고 있고, 섭스턴스 페인터에서 뽑은 텍스쳐는 RGBA채널, 16비트, 총 64비트를 사용하고 있습니다. 요구하는 텍스쳐의 디테일보다 낮은 비트 수의 텍스쳐를 가져오니 픽셀화 현상이 발생하는 것입니다.

 

이 문제는 특히 Position Mesh Map에서 두드러집니다. 공간을 구워내야 하는데, 16,777,216가지의 색상(8비트)만으로는 전부 다 표현할 수 없는 것이죠. 가로/세로/높이 256픽셀의 공간밖에 표현할 수 없다 하면 이해가 빠를 수 있을 것 같습니다.

 

때문에, Format을 16Bits/Channel로 설정해야 섭스턴스 페인터에서 사용할 수 있는 Mesh Map을 뽑을 수 있습니다.

 

위의 설정들은 전부 뽑아낼 텍스쳐의 퀄리티와 연관있는 것이기 때문에, 테스트용 베이킹에선 모든 옵션을 최소한으로 낮추고 오류가 없는 것이 확인되었을 때 값을 올려 최종 베이킹을 하는 편이 좋습니다.

기본 프리셋 / 첨부된 프리셋을 적용했을 경우.

이제 뽑아낼 맵을 설정해줘야 합니다. Maps 패널의 Configure 버튼을 클릭해 수동으로 설정해 줄 수도 있으나, 이를 설명하기엔 조금 귀찮기에 첨부한 파일을 적용하여 Preset으로 불러오는 방법을 추천드립니다.

SubstancePainterPreset.tbbake
0.00MB

해당 프리셋은 직접 세팅한 프리셋입니다. 섭스턴스 페인터의 World Space Normal이 Normals (Object)인 점, Vertex Color 맵의 Suffix를 ID로 변경하여 사용하는 점 외에 특별한 부분은 없습니다.

 

 

이렇게 베이킹에 필요한 모든 사전 준비는 끝났습니다. 다음 편에서는 본격적으로 베이킹 하는 법을 서술하겠습니다.