Artoke

텍스처 매핑 — 표면에 그림 입히기

텍스처 매핑 — 표면에 그림 입히기 대표 이미지
출처: 텍스처 매핑 — 표면에 이미지 입히기

텍스처 매핑 — 표면에 그림 입히기

종이접기로 만든 주사위를 떠올려 보자. 처음엔 평평한 종이였다. 거기에 점을 찍고, 접어서 상자로 만들었다. 3D 그래픽의 텍스처 매핑은 이걸 거꾸로 하는 일이다.

컴퓨터 안의 3D 모형은 처음엔 회색 덩어리다. 모양은 있지만 무늬가 없다. 여기에 그림을 입혀서 나무처럼, 벽돌처럼, 얼굴처럼 보이게 만드는 것. 그게 텍스처 매핑이다.

왼쪽은 무늬 없는 회색 전차 모형, 오른쪽은 같은 모형에 그림을 입힌 모습
1: 3D model without textures 2: Same model with textures · 출처: 텍스처 매핑 — 표면에 이미지 입히기

모형은 왜 회색 덩어리일까

3D 모형은 아주 작은 삼각형 수천 개가 모여서 만들어진다. 삼각형은 모양만 알려준다. "여기가 튀어나왔고, 저기가 들어갔다"까지가 삼각형의 일이다.

색은 삼각형이 모른다. 그래서 그림을 따로 준비해서 붙여야 한다. 이 붙일 그림을 텍스처라고 부른다.

UV 펼치기 — 종이접기를 거꾸로

가장 많이 쓰는 방법이 UV 언랩이다. 우리말로는 "UV 펼치기"다.

인형을 하나 상상해 보자. 헝겊 인형이다. 이 인형의 실밥을 뜯으면 어떻게 될까? 팔 부분 헝겊, 다리 부분 헝겊, 몸통 헝겊이 따로따로 떨어진다. 그리고 그걸 책상 위에 쫙 펼치면 평평해진다.

3D 모형에도 똑같이 한다. 모형 표면을 가위로 자르는 선을 정하고, 그 선을 따라 갈라서 평평하게 펼친다. 펼쳐진 평면 위에 그림을 그린다. 그림을 다 그리면 다시 접어서 모형에 씌운다.

텍스처 매핑 — 표면에 그림 입히기 도식

U와 V는 무슨 뜻일까

지도를 볼 때 가로줄과 세로줄이 있다. "가로 3칸, 세로 5칸"처럼 위치를 말할 수 있다.

펼쳐진 그림에도 똑같은 좌표가 필요하다. 가로를 U, 세로를 V라고 부른다. 왜 하필 U와 V냐면, X와 Y와 Z는 이미 3D 공간 좌표로 쓰고 있었기 때문이다. 겹치면 헷갈리니까 다음 글자를 빌려 쓴 것이다.

그래서 모형의 삼각형 꼭짓점마다 이런 메모가 붙는다. "나는 그림에서 가로 0.3, 세로 0.7 위치의 색을 가져올 거야." 이 메모가 UV 좌표다.

그림 한 장으로 끝이 아니다

실제로는 그림을 여러 장 겹쳐 쓴다. 각 그림이 맡은 역할이 다르다.

색 그림. 가장 기본이다. 빨강, 파랑, 나무색 같은 색깔 정보를 담는다.

울퉁불퉁 그림. 범프 맵이라고 부른다. 밝은 곳은 튀어나온 척, 어두운 곳은 들어간 척하게 만든다. 실제로 모형이 울퉁불퉁해지는 건 아니다. 빛이 닿는 방향만 속인다. 벽에 그린 그림자 그림 같은 거다. 정면에서 보면 진짜 같지만 실제로는 평평하다.

투명 그림. 어디를 뚫어 보이게 할지 정한다. 나뭇잎이나 철망을 만들 때 쓴다. 나뭇잎 하나하나를 삼각형으로 만들면 너무 무겁다. 대신 네모난 판 하나에 나뭇잎 그림을 붙이고, 잎 바깥쪽은 투명하게 뚫어 버린다.

구 네 개 비교. 무늬 없는 구, 무늬와 울퉁불퉁 그림을 같이 쓴 구, 무늬만 쓴 구, 투명 그림을 쓴 구
Examples of multitexturing : 1: Untextured sphere, 2: Texture and bump maps, 3: Texture map only, 4: Opacity and texture maps · 출처: 텍스처 매핑 — 표면에 이미지 입히기

옛날 게임의 이상한 일렁임

오래된 게임 화면을 보면 바닥 무늬가 물결처럼 출렁이는 걸 볼 수 있다. 이건 계산을 대충 했기 때문에 생긴 일이다.

왜 그럴까. 긴 복도를 생각해 보자. 눈앞의 바닥 타일은 크게 보이고, 멀리 있는 타일은 작게 보인다. 같은 크기의 타일인데도 그렇다. 이게 원근법이다.

그런데 옛날 컴퓨터는 느렸다. 그래서 "가까운 쪽과 먼 쪽 사이를 그냥 똑같은 간격으로 나누자"고 계산을 줄였다. 깊이를 무시한 것이다. 그러면 멀리 있는 타일이 실제보다 크게 그려지고, 화면이 움직일 때마다 무늬가 미끄러진다.

깊이를 무시한 텍스처 매핑과 원근을 제대로 계산한 텍스처 매핑의 차이 비교
Because affine texture mapping does not take into account the depth information about a polygon's vertices, where the polygon is not perpendicular to the viewer, it produces a noticeable defect, espec · 출처: 텍스처 매핑 — 표면에 이미지 입히기

지금 컴퓨터는 빠르니까 깊이까지 제대로 계산한다. 그래서 요즘 게임에서는 이런 일렁임을 보기 어렵다.

영리하게 피해 간 방법

1990년대 게임 중에 이라는 유명한 게임이 있다. 이 게임은 계산이 느린 컴퓨터에서도 화면이 부드러웠다. 비결은 규칙을 만든 것이었다.

둠에서는 바닥이 절대 기울어지지 않는다. 벽도 항상 수직이다. 언덕이나 비스듬한 벽이 아예 없다.

왜 그런 규칙을 만들었을까? 바닥이 완전히 평평하면, 가로줄 하나에 있는 픽셀들이 모두 같은 깊이에 있다. 그러면 그 줄에서 딱 한 번만 어려운 계산을 하고, 나머지는 쉽게 채워도 된다. 벽도 마찬가지로 세로줄 한 번이면 끝난다.

둠 계열 게임 화면. 바닥은 평평하고 벽은 모두 수직으로 되어 있다
The Doom engine did not permit ramped floors or slanted walls. This requires only one perspective correction per horizontal or vertical span rather than one per-pixel. · 출처: 텍스처 매핑 — 표면에 이미지 입히기

못하는 걸 억지로 하지 않고, 할 수 있는 것만 하도록 세계의 규칙을 바꾼 셈이다. 그래서 둠에는 계단은 있어도 경사로는 없다.

UV 펼치기, 해 보면 이렇다

텍스처 매핑에는 UV 펼치기 말고도 방법이 있다. 상자처럼 여섯 방향에서 그림을 쏘는 방법, 원통을 두르듯 감는 방법도 있다. 그중 UV 펼치기를 고른다면 이런 점을 겪게 된다.

좋은 점. 원하는 곳에 원하는 그림을 정확히 놓을 수 있다. 캐릭터 얼굴의 점 하나, 옷의 단추 하나까지 마음대로 위치를 정한다. 그리고 한번 펼쳐 두면 그 지도를 계속 쓴다. 색 그림을 바꾸든, 울퉁불퉁 그림을 바꾸든 지도는 그대로다. 옷 여러 벌을 같은 몸에 갈아입히는 것과 비슷하다.

힘든 점. 자르는 선을 어디에 둘지 정하는 게 골치 아프다. 잘못 자르면 이음매가 눈에 띈다. 얼굴 한가운데를 자르면 코에 흉터처럼 선이 보인다. 그래서 보통 뒤통수나 겨드랑이처럼 잘 안 보이는 곳으로 선을 숨긴다.

또 하나. 펼칠 때 그림이 늘어나거나 찌그러진다. 지구본을 억지로 평평하게 펴면 극지방이 늘어나는 것과 똑같은 문제다. 둥근 걸 평평하게 만들면 어딘가는 반드시 일그러진다. 손이나 얼굴처럼 굴곡이 심한 부분에서 특히 심하다.

그리고 시간이 걸린다. 복잡한 캐릭터 하나를 제대로 펼치는 데 몇 시간이 들기도 한다. 자동으로 펼쳐 주는 기능이 있지만, 결과가 어수선해서 결국 손으로 고치게 된다.

정리하면

텍스처 매핑은 평평한 그림을 3D 모형에 입히는 기술이다. 헝겊 인형의 실밥을 뜯어 펼치듯 모형을 평면으로 펼치고, 거기에 그림을 그린 다음, 다시 접어서 씌운다.

이 방법 덕분에 삼각형 몇천 개짜리 단순한 덩어리가 나무가 되고, 벽돌이 되고, 사람 얼굴이 된다. 모양을 정교하게 만드는 대신 그림으로 속이는 것이다. 그리고 그 속임수가 아주 잘 통한다.

출처

광고

리깅 파이프라인 자동화 도구

반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.

리깅 도구 보기