서브스턴스 페인터 베이크에 검은 얼룩이 생길 때: 마야 모델의 노멀과 케이지 확인
서브스턴스 페인터에서 베이크한 노멀·AO 맵에 검은 얼룩이 생기면, 해상도를 올리기 전에 얼룩의 모양부터 보세요. 검은 얼룩은 픽셀이 모자란 자리가 아니라 레이가 길을 잃은 자리입니다. 마야에서 로우폴리와 하이폴리를 만들어 FBX로 넘겼고, Painter에서 Bake를 눌렀습니다. 그런데 모서리를 따라 검은 줄이 생기고, 넓은 면에는 멍 같은 얼룩이 번지고, 어떤 곳에는 옆 부품의 모양이 그대로 찍혀 있습니다.
Output size를 4K로 올리고 Antialiasing을 켜도 얼룩은 그대로입니다. Painter 설정을 이것저것 바꿔도 안 풀린다면, 답은 Painter 바깥에 있을 가능성이 큽니다. 마야에서 넘어온 무엇이 얼룩을 만들까요? 이 질문의 답은 네 가지 얼룩을 다 본 뒤에 한 문장으로 정리합니다.
얼룩은 모양에 따라 네 갈래로 나뉩니다. 모서리를 따라 생기는 선, 다른 부품을 닮은 얼룩, AO 맵에만 생기는 얼룩, 맵은 멀쩡한데 화면에서만 보이는 검은 십자입니다.
서브스턴스 페인터 베이크는 로우폴리에서 쏜 레이로 하이폴리를 찾습니다
얼룩을 가르려면 베이크가 하는 일을 한 장면으로 떠올리면 됩니다. 로우폴리 표면의 각 지점이 손전등을 들고, 조금 바깥에서 안쪽으로 빛을 비춰 하이폴리 표면을 찾습니다. 처음 부딪힌 하이폴리의 방향과 깊이가 그 픽셀에 기록됩니다. 이 손전등 빛이 레이입니다.
레이가 어디서 출발하고 어디까지 가는지는 두 값이 정합니다. Max Frontal Distance는 로우폴리 표면 위로 얼마나 떨어진 곳에서 레이를 시작할지, Max Rear Distance는 표면 아래 어디까지 찾을지입니다. 이 출발점들을 이은 껍질을 케이지라고 부릅니다. Painter의 기본 케이지(Distance based)는 로우폴리를 이 거리만큼 고르게 부풀린 모양입니다.
레이의 방향도 정해져 있습니다. Substance 베이커 문서에 따르면 Average Normals를 켜면 버텍스 노멀을 평균한 방향으로 쏘고, 끄면 메시가 원래 가진 버텍스 노멀 방향으로 쏩니다. 이 문장은 뒤에서 다시 꺼냅니다.
검은 얼룩은 레이가 하이폴리를 못 찾았거나 엉뚱한 면을 찾은 결과입니다. Painter 8.3부터는 F8로 들어가는 Baking mode에서 케이지와 하이폴리를 뷰포트에 겹쳐 볼 수 있고, 11.0부터는 케이지를 자동으로 만드는 Automatic(실험 기능)도 고를 수 있습니다. 아래 메뉴 이름은 Painter 12 문서 기준입니다.
1. 모서리를 따라 검은 선이 생기면: 마야의 하드 엣지와 노멀 방향
노멀 맵에서 각진 모서리를 따라 가는 선이나 끊김이 보이면 먼저 마야의 하드 엣지를 의심합니다. 하드 엣지는 한 버텍스에서 면마다 노멀을 따로 둡니다. 그래서 모서리 양쪽 면의 레이가 서로 평행하게 나갑니다. 두 면 사이 모서리 바깥은 어느 레이도 지나가지 않는 빈틈이 됩니다.

Painter에는 이 문제를 미리 보여 주는 표시가 있습니다. Baking mode 뷰포트의 시각화 설정에서 UV seams 항목의 Missing seams on hard edges를 켜면, UV 이음새가 아닌데 하드 엣지인 곳이 색으로 표시됩니다. Adobe 문서는 이런 엣지가 베이크 문제로 이어질 수 있다고 설명합니다. 표시된 엣지가 검은 선이 생긴 자리와 겹친다면 원인을 찾은 셈입니다.
고치는 곳은 마야입니다. 메시 전체를 Mesh Display > Soften Edge로 부드럽게 한 뒤, UV 셸 경계에 있는 엣지만 골라 Harden Edge를 줍니다. 하드 엣지를 UV 이음새 위에만 두면, 노멀이 갈라지는 곳과 텍스처가 갈라지는 곳이 일치합니다. 하드 엣지가 꼭 필요하다면 베이커 공통 문서의 Average Normals 설정으로 레이 방향을 바꾸는 방법도 있습니다. 다만 Painter 12.1의 Mesh map settings 문서에는 이 항목이 나오지 않아 Painter UI에서 제공되는지는 확인되지 않았습니다.
반대로 노멀 맵 전체에 면 하나하나가 각지게 보인다면 모든 엣지가 하드인 상태입니다. Adobe의 베이커 문서는 이 경우 마야에서 노멀을 평균(소프트)으로 만들고, 내보낼 때 노멀 정보가 함께 저장되게 하라고 안내합니다.
선이 아니라 면 하나가 통째로 까맣다면 면 방향이 뒤집혔을 수 있습니다. 레이는 노멀 방향을 따르므로, 안쪽을 보는 면은 레이도 엉뚱한 쪽으로 쏩니다. 마야에서 면 방향을 표시하고 Conform·Reverse로 정리하는 방법, 잠긴 노멀을 푸는 방법은 마야에서 면이 까맣게 보일 때 노멀 뒤집힘과 소프트 엣지를 구분하는 글에 정리했습니다.
모서리 선은 노멀을 정리하면 대부분 사라집니다. 그런데 노멀이 깨끗한데도 엉뚱한 무늬가 찍힌다면, 이번에는 레이의 길이를 볼 차례입니다.
2. 다른 부품 모양이 찍히면: 케이지 거리와 Match By Mesh Name
얼굴에 헬멧 테두리가 찍히거나, 몸통에 벨트 모양 얼룩이 생겼다면 레이가 너무 멀리 간 경우입니다. Adobe 문서는 이것을 메시끼리 번지는 현상으로 설명합니다. 레이가 자기 하이폴리를 지나쳐 가까이 있는 다른 부품의 하이폴리에 먼저 부딪힌 것입니다.

Max Frontal Distance는 양쪽으로 실패합니다. 너무 짧으면 케이지 밖으로 튀어나온 디테일을 놓치고, 너무 길면 옆 부품까지 닿습니다. 케이지가 자기 하이폴리 디테일만 감싸는 거리가 목표입니다. Baking mode에서는 케이지가 모델을 뚫는 곳에 빨간 점이 보이고, 케이지 밖으로 나간 하이폴리 부분도 따로 색칠해 볼 수 있습니다. 숫자를 외우기보다 이 표시를 보면서 줄이거나 늘립니다.
이때 Relative to Bounding Box를 함께 봅니다. 켜져 있으면 거리가 로우폴리 바운딩 박스 크기를 기준으로 한 비율이라, 같은 값이라도 큰 모델에서는 실제 거리가 길어집니다. 끄면 FBX를 내보낼 때의 단위(마야라면 기본 센티미터)로 계산합니다.
부품끼리 너무 붙어 있어 거리만으로 못 가르면 이름으로 가릅니다. Common settings의 Match를 Always에서 By Mesh Name으로 바꾸면, 이름이 짝지어진 하이폴리만 찾습니다. 이 기능은 기본으로 꺼져 있습니다. 마야 아웃라이너에서 로우폴리를 helmet_low, 하이폴리를 helmet_high처럼 같은 이름에 접미사만 다르게 붙입니다. 대소문자도 구분하므로 Helmet_high와 helmet_low는 짝이 되지 않습니다. 베이크가 끝나면 Baking Log에 어떤 이름끼리 짝지어졌는지 나오니, 짝이 안 된 부품이 없는지 확인합니다.
이름을 다 맞췄는데 AO에는 여전히 옆 부품의 그림자가 남을 수 있습니다. 그건 AO가 레이를 한 번 더 쏘기 때문입니다.
3. AO 맵에만 검은 얼룩이 생기면: Self Occlusion과 겹친 UV
노멀 맵은 깨끗한데 AO에만 얼룩이 있다면 AO 전용 설정을 봅니다. AO는 표면에서 다시 바깥쪽 반구로 레이를 여러 개 쏴 주변이 얼마나 가리는지 셉니다. Adobe 문서에 따르면 이 두 번째 레이에는 공통 설정의 Match가 적용되지 않습니다. Ambient occlusion 설정의 Self occlusion을 Always에서 이름으로 거르는 옵션으로 따로 바꿔야 다른 부품이 드리우는 어둠이 빠집니다.
같은 설정 안의 Ignore backface도 봅니다. 하이폴리의 뒷면에 레이가 부딪혀 생기는 어둠을 무시할지 정하는 옵션입니다. 하이폴리 부품이 서로 파고들어 있거나 표면에 따로 띄운 조각이 있으면, 레이가 안쪽 뒷면에 걸려 얼룩이 생기기 쉽습니다. Adobe 베이커 문서는 대부분의 경우 켜는 편이 낫다고 하지만, Painter 문서는 공통 설정의 Ignore backface가 일부 경우 오히려 오류를 낼 수 있다고 적고 있으니 켜고 끈 결과를 비교합니다.
마지막은 겹친 UV입니다. AO는 3D 공간의 위치에 따라 값이 달라집니다. 서로 다른 자리에 있는 두 부품이 UV를 공유하면, 각자 다른 AO가 같은 픽셀에 겹쳐 써집니다. 좌우 대칭이라 UV를 겹쳐 둔 경우에도 양쪽의 가림 정도가 다르면 얼룩이 생깁니다. 베이크용으로는 UV를 펼쳐 두고, 겹쳐 쓰는 것은 그 결과를 감수할 수 있을 때만 합니다.
AO 맵이 통째로 까맣고 뷰포트 모델 전체가 어두워졌다면 경우가 다릅니다. Adobe 문서는 하이폴리가 제대로 불러와지지 않았거나, 메시가 1 km보다 크거나 1 cm보다 작거나, Match By Mesh Name 설정 때문에 짝이 하나도 없거나, 로우폴리 UV가 0~1 범위를 벗어난 경우를 원인으로 듭니다. 이때는 Baking Log의 오류부터 확인합니다.
4. 맵은 멀쩡한데 화면에서 검은 십자가 보이면: 삼각분할과 탄젠트
Painter 안에서는 깨끗했는데 마야나 엔진으로 가져가니 면 위에 검은 십자나 대각선 얼룩이 생기는 경우가 있습니다. Adobe 문서는 이것을 노멀 맵이 메시와 맞지 않는 상태로 설명합니다. 베이크할 때와 화면에 그릴 때 메시를 다르게 계산했다는 뜻입니다.
맞춰야 할 것은 세 가지입니다. 탄젠트 공간, 노멀 맵 형식(OpenGL·DirectX), 삼각분할입니다. Painter는 탄젠트 공간으로 늘 MikkTSpace를 쓰고, 메시에 탄젠트 정보가 없으면 MikkTSpace로 다시 계산합니다. 사각형 면을 삼각형으로 나누는 방법은 프로그램마다 다를 수 있어서, 마야에서 Mesh > Triangulate로 미리 나눈 같은 메시를 Painter와 최종 렌더러 양쪽에 쓰는 것이 안전합니다.
마야에서 노멀 맵을 셰이더에 연결할 때 색공간을 sRGB로 두면 또 다른 방식으로 음영이 틀어집니다. 이 부분은 노멀 맵을 sRGB로 불러오면 망가지는 이유에서 따로 다뤘습니다.
Painter 설정만 바꿔서는 얼룩이 안 풀리는 이유
처음 질문으로 돌아갑니다. Painter 설정을 바꿔도 얼룩이 그대로였던 이유는 무엇일까요? 베이커 문서에 따르면 Average Normals를 끄면 레이가 메시가 가진 원래 버텍스 노멀 방향을 따릅니다. 하드 엣지도, 뒤집힌 면도, 잠긴 노멀도 모두 마야에서 FBX에 담겨 넘어온 정보입니다.
레이의 출발점과 방향은 마야에서 넘어온 로우폴리의 노멀이 정하고, 레이가 닿는 범위는 케이지가 정합니다.
해상도와 Antialiasing은 레이가 찾은 결과를 더 촘촘하게 기록할 뿐, 레이의 길을 바꾸지 않습니다. 그래서 얼룩은 모양을 보고 아래 표처럼 갈라 고칩니다.
| 보이는 모양 | 원인 | Painter에서 확인 | 고치는 곳 |
|---|---|---|---|
| 각진 모서리를 따라 선·끊김 | UV 이음새가 아닌 하드 엣지 | Missing seams on hard edges 표시 | 마야: Soften Edge 후 UV 경계만 Harden Edge |
| 면 하나가 통째로 까맘 | 뒤집힌 면, 잠긴 노멀 | 같은 면이 마야에서도 까만지 확인 | 마야: Conform·Reverse, Unlock Normals |
| 옆 부품 모양이 찍힘 | Max Frontal Distance가 너무 김 | 케이지 표시와 빨간 점 | Painter: 거리 줄이기, Match를 By Mesh Name으로 |
| 튀어나온 디테일이 빠짐 | 케이지가 디테일보다 낮음 | 케이지 밖 하이폴리 색 표시 | Painter: 거리 늘리기 또는 Custom 케이지 |
| AO에만 얼룩 | 다른 부품의 가림, 뒷면 충돌, 겹친 UV | Ambient occlusion 설정 | Painter: Self occlusion·Ignore backface, 마야: UV 펼치기 |
| 다른 프로그램에서만 검은 십자 | 삼각분할·탄젠트·노멀 형식 불일치 | Painter 안에서는 정상 | 마야: Triangulate한 메시로 다시 베이크 |
마야에서 FBX로 내보내기 전에 볼 다섯 가지
얼룩의 대부분은 마야 쪽에서 미리 막을 수 있습니다. 베이크용 FBX를 내보내기 전에 아래 순서로 봅니다.
- 면 방향: Display > Polygons > Face Normals로 안쪽을 보는 면이 없는지 봅니다.
- 엣지: 하드 엣지는 UV 셸 경계에만 둡니다. 소프트·하드 설정이 안 먹으면 Mesh Display > Unlock Normals부터 합니다.
- 이름: 부품마다 같은 이름에 _low와 _high를 붙이고 대소문자를 맞춥니다.
- 삼각분할: 최종 렌더러나 엔진으로 보낼 로우폴리는 Mesh > Triangulate로 나눈 같은 파일을 Painter에도 씁니다.
- UV: 베이크할 로우폴리 UV는 0~1 범위 안에 두고, 위치가 다른 부품끼리는 UV를 겹치지 않습니다.
FBX 내보내기 옵션에서는 Geometry의 Smoothing Groups를 켜 두면 마야의 소프트·하드 엣지 정보가 함께 넘어갑니다. 베이크가 깨끗한데 경계에 가는 선만 남는다면 얼룩이 아니라 UV 패딩 문제일 수 있으니 텍스처 이음새와 패딩·밉맵의 관계를 이어서 보세요.
한 줄 정리
검은 얼룩은 레이가 길을 잃은 자리입니다. 해상도보다 마야의 노멀과 케이지를 먼저 보세요.
메뉴 이름과 기본값은 Painter 12 기준 Adobe 공식 문서에서 확인했습니다.
vfx 잡학지식



댓글 0
첫 댓글을 남겨보세요.