언어:
페이지 정보
엔진 버전:
언리얼 엔진

라이트맵 UV 펼치기

언리얼 엔진

라이트맵 제작에 대해

라이트맵은 아마도 배경 아트 제작에 있어 가장 어려운 부분일 것입니다. 라이트맵을 통해 깨끗한 라이트와 그림자 디테일을 얻어내기 때문에, 모델의 각 부분이 명암 정보를 받도록 하기 위해서는 독자적인 대표성을 띄는 공간을 갖도록 라이트맵을 고유하게 언래핑해(펼쳐)줘야 합니다.

꼭 알아둬야 할 중요한 점은, 라이트맵 해상도는 텍스처의 UV 해상도에 비하면 새발의 피라는 점입니다. 레벨을 최적화해야 할 필요성이 높아질 수록 레벨 디자이너도 라이트맵 해상도를, 작은 오브젝트의 경우 16 x 16 이나 심지어 8 x 8 까지도 낮출 거라는 것도 알아둬야 합니다. 이러한 경향 때문에 어두운 부분이 밝은 영역으로 새어들어가 게임내 그림자 현실감을 망치지 않도록 하기 위해, 라이트맵 UV 의 각 부분 주변으로 '패딩'을 많이 두게 되었습니다.

라이트맵을 만드는 데는 세 가지 방법이 있습니다:

BOX UNWRAP 박스 언랩

보통 라이트맵 언래핑 방법 중 가장 안정적인 것인데, 대부분의 환경 모델은 블록형 모양인 것을 조합하거나 반복하여 구조물을 만들기 때문입니다. (별도의 요소 없이 모든 것이 이어진) 인접 메시는 보통, 서로 연결된 디자인의 대부분을 펼치기만 하면 되기 때문에 괜찮은 제작 방식입니다.

PLANAR UNWRAP 평면 언랩

빗각이나 돌출된 부분이 있는 벽과 같은 단순 평면 디자인에 가장 좋습니다. 다세대 주택 건물처럼 커다란 빌딩 파사드 건물에도 매우 유용합니다. 평면 언랩은 인접 메시를 사용하면 크게 도움이 되는데, 그저 메시 UV 를 손봐주고 게임에서 라이팅이 제대로 되지 않는 빗각 부분을 손수 채워주기만 하면 되기 때문입니다.

CYLINDRICAL UNWRAP 원통 언랩

그 외 환경 내 대부분의 모양은, 박스나 평면 기반 모양이 아니라면 원통 모양의 변종으로 나뉩니다. 원통 모양은 옆면에다 앞면은 있지만 뒷면은 없는 디자인에 잘 맞습니다. 뒷면까지 있다면 그냥 박스를 쓰는 것이 낫겠지요.

예제

BoxUnwrap1.jpg

인접 메시이므로, 박스 언랩을 해서 가로로 펼쳐 원하는 만큼의 라이트맵 해상도를 쓰기가 용이합니다. 가운데 이미지에 강조된 밑면은 전체에서 분리시켰는데, 그 이유는 거의 항상 까맣게 렌더될 것이라서 나머지 UV 에 연결되어 있으면 어둡지 않은 곳에도 어둠이 새어 나갈 소지가 있기 때문입니다.

아래 이미지에서 보듯이 떼어낸 윗면의 경우 그 반대도 마찬가지, 즉 항상 밝겠지요. 맨위 이미지는 텍스처 UV 를 나타냅니다.

BoxUnwrap2.jpg

이 만큼의 연결 방법으로 안전하게, 32 x 32 유닛 해상도로 거의 완벽에 가까운 게임내 라이트맵이 가능합니다. 전혀 이음새가 보이지 않아, 미묘한 어두운 선이 보이지 말아야 할 곳에는 보이지 않습니다.

BruteForce.jpg

가끔은 억지로 조각들을 짜맞춰야 할 때가 있습니다. 라이트맵을 중단하지 않고 깨끗한 표면을 낸다는 데 가지가 있죠. 충분히 얇아 라이트매스로 커버되기만 한다면야 1:1 비율로 늘이는 것은 별 문제가 되지 않지만, 1:1 비율은 블리딩 때문에 라이팅이 올바르게 되지 않는 반면, 커버리지를 두 배로 늘리고 1:7 비율로 하면 괜찮아 보입니다. 여기 또 내부의 어두운 부분을 분할한 것을 볼 수 있는데, 그 부분은 항상 어둡기 때문에 바깥으로 새어 나가지 못하게 하기 위해서입니다.

Facade1.jpg

커다란 파사드 조각에는 이 평면 언랩이 잘 돌아갑니다. 여기서는 작업상의 편의를 위해 인접 메시를 쓰고 있으나, 가로나 세로 요소가 약간 있는 메시도 같은 원리로 처리 가능합니다. 로우폴리에 일치하여 가장 대표성을 띠는 레이아웃 내 라이트맵 UV 위에 놓기만 한다면, 다른 조각과 겹쳐놓았을 때 일부 측면 부분이 까맣게 렌더되는 경우를 대비해 약간의 패딩을 대 줘야 하기는 하겠지만, 같은 식으로 돌아는 갈 것입니다.

Facade2.jpg

여기서 보면 인접 메시 레이아웃 덕에 로우폴리 메시를 미러링하는 식으로 UV 를 더욱 쉽게 레이아웃 할 수 있었습니다. 아직 측면과 상하 한도를 중앙 부분에서 옮겨 줘야 블리딩 문제가 해결되고, 상단의 창문과 주요 부분 주변의 패딩이 같도록 해줄 수 있기는 합니다.

가끔 이렇게 단순한 경험 법칙을 어기는 디자인이 있습니다. 디자인에 약간의 별도 요소와 함께 음수 공간이 많다면, 라이트맵을 조각내고 패딩을 훨씬 많이 추가해 줘야 할 것입니다.

NegativeSpaces.jpg

레일을 부여잡고 있는 교차 세로 조각에 약간 심하게 뒤틀린 부분을 볼 수 있습니다. 그냥 가운데의 두 면과, 세 조각 각각의 중심 부분을 그냥 강제로 붙인 것입니다.

순환 레일 내부를 가지고 내외부 면을 붙이면서, 그 자체에서 한 면을 분할해 냈습니다. 이렇게 한 이유는 그 부분의 3/4 부분에 걸쳐서만 라이트맵 셰이딩이 부드럽게 되도록 하고, 나머지 면에서만 라이트맵이 끊어지도록 하기 위해서인데, 이 부분은 그 위를 지나는 철골 빔때문에 볼 수 없기 때문입니다.

railingame.jpg

어떤 디자인은 최적이라기 보단 그냥 돌아가기도 하는데, 아래같은 것이 그렇습니다.

Fragmented.jpg

별개의 요소가 너무 많을 때는 텍스처 해상도를 올리는 수 밖에 없습니다. 안그러면 각 부분 사이의 패딩때문에 라이트맵 상에서 낭비되는 공간이 너무 많아 게임에서 심각하게 안좋아 보일 것입니다. 그래서 완벽해 보이지 않는다는 것은 알지만, 블리딩은 조금 있어도 오브젝트를 너무 심하게 망치지는 않도록 128 x 128 라이트맵으로 만들기로 했습니다.

GirderINGAME.jpg

가끔은 그냥 평면 비슷하게 쏴 주고 UV 를 만져 주는 편이 쉽기도 합니다. 아래 모델처럼 딱 떨어져서 쉽게 연결할 수 있는 인접 부분이 있는 경우라면요.

easy.jpg

이 디자인은 본질적으로 밑이 평면인 원통에다 캡을 씌운 것으로, 이 두 가지 방법을 사용해서 UV 를 언래핑했습니다. 바닥 부분의 이는 Z 축 상으로 그냥 쉽게 평면 언랩시킨 다음 모디파이어를 약간 만져 주고, 빗각에서의 얇은 1:1 비율 문제때문에 커버되는 부분이 너무 작아지는 부분이 없도록 약간 조절해 줍니다.

중간 부분은 밑둥 만큼 명확했는데, 최대한 커버되도록 하면서 공간 활용도를 높이기 위해 손수 원통형 언랩을 세웠습니다. 언제나처럼 로우폴리 메시의 작은 꼭다리 각각의 1:1 표현보다 더 커버되도록 하는 데 신경을 썼습니다. 맨위 사자머리 부분 아래쪽에 대해서는 윗방향 Z 축 평면 언랩을 한 다음 조금 손봐 줬습니다.

이런 식으로 모델을 분리하면 로우폴리 디자인 내 확실한 이음새 부분에 이음새를 놓아, 그 곳의 라이팅이 약간 끊겨도 자연스러워 보이도록 할 수 있는 장점이 있습니다. 선명하게 움푹 들어간 곳이나 틈이 있는 곳에서 라이트맵 UV 를 분할하는 것은, 분할 지점을 선택하는 데 있어 게임 내 모델의 질을 떨어뜨리지 않으면서도 그 외양을 살리기에 좋은 원칙입니다.

FountainINGAME.jpg

라이트맵 좌표 인덱스

디폴트로 스태틱 메시의 첫 UV 세트(인덱스 0)는 스태틱 라이팅에 대한 라이트맵 생성시 사용됩니다. 무슨 뜻이냐면 메시에 머티리얼을 적용하는 데 사용된 좌표 세트가 그대로 라이트맵에도 사용된다는 뜻입니다. 이건 보통 이상적인 것은 아닙니다. 그 이유라면 라이트맵 생성에 사용되는 UV 는 고유성을 띄어야 하기, 즉 메시의 각 면이 UV 공간 내 다른 면과 겹치지 않아야 하기 때문입니다.

그 이유는 꽤나 명확합니다: 한 면이 같은 UV 공간을 공유한다면, 그 공간에 해당하는 라이트맵 부분은 두 면 모두에 적용되기 때문입니다. 이것은 디퓨즈나 다른 텍스처에는 각 면마다 텍스처 해상도를 더 높일 수 있을 테니 좋은 일입니다. 그러나 라이팅은 부정확해 지겠지요. 스태틱 메시에는 LightmapCoordinateIndex (라이트맵 좌표 인덱스)라는 프로퍼티가 있어, 라이트맵 생성에 사용할 UV 를 지정할 수 있습니다. 이 프로퍼티에 고유성을 띈 데다 라이트맵 용으로 적당히 셋업된 UV 세트를 지정해 주면 스태틱 메시에는 일석이조 격입니다. 디퓨즈 텍스처 해상도도 나아지고, 라이트맵의 라이팅도 정확해 집니다.

연속된 UV 와 패딩

연속된 UV 를 가진 트라이앵글 그룹을 UV 차트라 합니다.

uvs_charts.jpg

UV 차트

  1. UV 차트

UV 차트 사이에 패딩(여백)을 두는 것은 블리딩 부작용을 방지하는 데 필수입니다. 그러나 라이트맵 UV 레이아웃 주변에 패딩을 따로 둘 필요는 없는데, 블리딩 부작용을 방지하기 위해 라이트매스 가 자동으로 충분히 패딩해 주기 때문입니다. 참고로 UV 차트간 패딩을 설정할 때는, DXT 압축이 4x4 텍셀 블록 단위로 이루어지기 때문에, 보통 4 텍셀 정도면 모든 부작용을 막을 수 있습니다.

uvs_padding.jpg

UV 패딩

  1. 낭비된 UV 패딩

  2. 필수 UV 패딩

즉 라이트맵 해상도가 32 인 경우, UV 차트 사이의 패딩은 전체 UV 공간의 12.5% 가 된다는 뜻입니다. 그러나 UV 차트 사이에 패딩량을 늘릴 수록 고해상도 라이트맵에서 낭비되는 메모리도 늘어날 것이라는 점 염두에 두시기 바랍니다. 한 메시의 라이트맵 UV 연속성을 늘릴 수록 결과도 더 나아집니다. 필요한 패딩량이 줄어들어 더 높은 해상도가 가능해 지기 때문입니다. 라이트매스가 구현되기 전이나 버텍스 라이팅에 대부분 의존하던 시절, 메시는 별도의 모델링 엘리먼트로 만든 다음 머지하는 식으로 작성되었었습니다.

old_mesh_seperate.jpg

나무 판자 각각은 병합된 별도의 요소입니다.

라이트맵에 의존하고 라이트매스를 사용하긴 하지만 그다지 이상적이지는 않습니다. 괜찮고, 연속된 라이트맵 UV 가 나오지 않습니다.

old_mesh_uvs.jpg

오래된 메시 UV

대신 모델 내부에 있는 폴리곤으로 단편화된 라이트맵이 나오게 되어, 메시의 다른 부분으로 검게 새어 들어가는 모양으로 렌더됩니다. 자동 언래핑에 의존하는 것도 똑같은 문제를 일으킬 소지가 있습니다.

old_mesh_ingame.jpg

게임내 오래된 메시

메시와 라이트맵을 위한 그 UV 를 레이아웃하기에 최적의 방법은, 전체 메시의 하나의 연속된 엘리먼트로 모델링하고, UV 를 수동으로 레이아웃하는 방법입니다.

new_mesh_contiguous.jpg

애셋을 인접한 단일 요소로 리모델링하면 라이트맵 역시도 인접되도록 할 수 있습니다.

이음새(seams)가 사라지고 라이트맵 효율성을 높이는 연속된 라이트맵 UV가 탄생했습니다.

new_mesh_uvs.jpg

새로운 메시 UV

최종 결과를 보니, 블리딩 부작용 전혀 없이 깨끗하게 라이팅된 메시입니다.

new_mesh_ingame.jpg

게임내 새로운 메시

이 방법의 추가적인 장점은, 모델링에 필요한 트라이앵글 수도 보통 감소된다는 점입니다.

old_mesh.jpg

new_mesh.jpg

오래된 메시

새로운 메시