테셀레이션

 


[image]
테셀레이션의 활용으로 유명한 화가 M. C. 에셔의 작품.
1. 개요
2. 기하학적 상세
2.1. 정규 테셀레이션
2.2. 준정규 테셀레이션
2.3. k-uniform tilings
3. CGI에서의 응용
3.1. 테셀레이션이 사용된 게임


1. 개요


Tessellation
기하학 용어.
일정한 형태의 도형들로 평면을 빈틈 없이 채우는 것. 평면작성, 타일링 등으로 불리기도 하며 '쪽매맞춤' 혹은 '쪽매붙임'으로 번역되기도 한다.
같은 모양의 정다각형으로 테셀레이션을 하려면 정삼각형, 정사각형, 정육각형 밖에 불가능하지만 (이 세 개의 정다각형만이 한 각의 크기가 360의 약수이기 때문이다) , 두 가지 이상의 정다각형을 활용해서 다양한 테셀레이션을 할 수 있다. 물론 정다각형이 아닌 모양으로도 테셀레이션을 할 수 있다. 보통 타일을 몇 개 조합해 만든 일정한 형태가 반복되어 나타나게 되지만, 그런 패턴이 존재하지 않는 펜로즈 타일링(Penrose tilling) 등의 테셀레이션도 존재한다.
실생활에서는 목욕탕 타일이나 보도블록을 까는 것에서 쉽게 찾아 볼 수 있을 것이다. 옷 패턴에도 제법 채용되는데, 일본 기모노 문양 중 하나인 치도리 무늬 등이 그 예시이다.
학문적으로는 결정학에서 중요하게 다뤄진다.
펜로즈 타일링을 발견한 영국의 로저 펜로즈와 네덜란드의 마우리츠 코르넬리스 에셔(Maurits Cornelis Escher)가 테셀레이션으로 유명하다.

2. 기하학적 상세


현실에서의 타일링은 타일의 모양이 직사각형일수도 있고, 마름모나, 평행사변형이나 사다리꼴이더라도 평면을 채우는 것이 가능하다. 임의의 형태의 삼각형은 평면을 채울 수 있다. [1] 또한, 다각형이 아니라 곡선형태의 비정형 도형으로도 평면을 채우는 것이 가능하다.
이런 경우를 모두 다루기에는 경우가 많기에, 좀더 간단하게 다루기 위해서 기하학에서는 여러 제한 조건하에서 테셀레이션을 다룬다.
  • 정다각형을 먼저 다룬다.
  • 모든 다각형은 꼭지점끼리 만난다.
  • 서로 다른 정다각형을 다룰 경우 모든 정다각형의 한변의 길이는 같다.

2.1. 정규 테셀레이션


Regular tiling(or tessellation)
[image]
단 한종류의 정다각형으로 평면을 채우는 것을 의미한다. 당연히 모든 정다각형의 크기는 같다.
이것이 가능한 도형은 정삼각형, 정사각형, 정육각형 3가지 경우 밖에 없다.
참고로 이는 정다면체와도 관련이 있다.
  • 한점에서 정삼각형이 3개씩 만나면 정사면체가 되고, 4개씩 만나면 정팔면체이며, 5개씩 만나면 정이십면체가 된다. 6개씩 만나게 되면 다각형이 아닌 평면을 이루게 되며 이것이 '정삼각형 타일링'이 된다.
  • 한점에서 정사각형이 3개씩 만나면 정육면체가 되고, 4개씩 만나면 평면이 되어 '정사각형 타일링'이 된다.
  • 참고로, 정육각형만으로는 다각형을 만들수 없다.


2.2. 준정규 테셀레이션


Uniform tiling, 1-uniform tiling, Semiregular tiling.
[image]
한변의 길이가 같은 두가지 이상의 정다각형을 조합하여 평면을 채우는 것을 의미한다.
또한, 임의의 점에서 정다각형의 구성이 동일한 경우이다.
총 8가지 종류가 있다.

2.3. k-uniform tilings


[image]
2-uniform tiling (Demiregular tiling)
정다각형을 이용해서 평면을 채울때, 각점에서 정다각형의 구성이 2가지 이상인 경우도 있다. 이것이 몇종류이냐에 따라서 k-uniform tilings 이라고 부른다.
2-uniform tilings 은 총 20가지 종류가 있으며, 3-uniform tilings 은 61가지, 4-uniform tilings 은 151가지가 있다. 참고로 k=6 까지는 완전히 분류가 끝났다.
k=7 일때 1472가지가 있다는 사실은 확인되었으나, 완전히 분류되지는 않았다.
위키백과 참조

3. CGI에서의 응용


[image]
이미 오래전부터 있던 기법이었으나 높은 성능의 CPU 혹은 GPU 요구 사양으로 인해 사용되지 못 했고, 2001년 ATI가 발표한 TruForm과 2007년 TeraScale 아키텍처부터 TruForm의 개선판인 하드웨어 테셀레이션[2]을 비롯한 테셀레이터가 PC 그래픽카드에서는 라데온 8500부터, 콘솔 게임기에서는 2005년 Xbox 360부터 탑재되어 존재를 알렸으나 ATI 독자 규격이라서 역시 널리 사용되지 못 했다. 그래도 기본적인 성능이 꾸준히 향상되었기 때문에 MS에서는 2009년 DirectX 11에 들어서 정식으로 채택하기에 이르렀고, 크로노스 그룹에서도 대세에 따라 2010년 OpenGL 4.0부터 정식으로 지원함으로써 널리 알려지기 시작했다.
앞에서도 서술했듯이 과거엔 이것을 구현하는데 GPU만으로는 한계가 있어서 일부는 CPU와 함께 사용했고 그마저도 성능 요구치가 너무 높았기 때문에 아무도 사용하지 않았다. 더 정확히 따지면 테셀레이션은 디스플레이스먼트(변위) 매핑과 동시에 쓰여야 진가가 발휘되는데 디스플레이스먼트 매핑까지 동원해야 하므로 실질적인 요구 사양은 기하급수적으로 더 높았다. 테셀레이션은 단순히 폴리곤의 면적을 잘게 쪼개어 더 많은 버텍스를 갖게 해주는 것일 뿐이고 디스플레이스먼트 매핑은 그 잘게 쪼개인 버텍스의 높낮이를 조절해서 울퉁불퉁한 표면의 굴곡을 만드는 역할이기 때문이다. 위의 그림에서 테셀레이션 ON/OFF의 차이는 단순히 테셀레이션 뿐만이 아닌 디스플레이스먼트 매핑도 ON/OFF 된 것이다.
이름의 유래는 폴리곤을 삼각형으로 분할해 빠짐없이 메우는 특성 때문으로 보인다.
원래 게임 그래픽은 요구 사양에 대한 낮은 진입 장벽을 위해 주로 자잘한 디테일은 생략하고 평면적인 껍데기(메쉬)에다가 색칠(텍스처)을 하는 식으로 구성된다. 이 메쉬를 구성하는 단위는 폴리곤인데 폴리곤은 전부 삼각형 모양이기 때문에 메쉬를 구성하는 폴리곤 숫자가 적으면 자연스레 겉면이 울퉁불퉁해지고 어색해진다. 옛날 3D 게임의 바퀴가 원형이 아닌 육각형으로 구성되어 있는 이유는 폴리곤 숫자가 적기 때문이다.
이는 바위나 자갈 같은 것에서도 마찬가지인데, 사실 바위의 거친 표면이나 자갈 하나하나를 폴리곤으로 구성하려면 굉장히 힘이 들고 사양 또한 무지막지하게 잡아먹는다. 그래서 그래픽 엔지니어들은 자잘한 디테일은 생략하고 평면을 깔아 그 위에 울퉁불퉁하게 보이기 위해 범프매핑이나 노말 매핑, 패럴랙스 매핑, 패럴랙스 오클루젼 매핑[3]# 등의 기법을 이용하여 눈속임을 했었다.
테셀레이션은 이런 눈속임이 아니라 말 그대로 '''자잘한 것까지 모조리 폴리곤'''으로 구성하는 기술이다. 이해가 안 된다면 위의 사진을 비교해보자.
디스플레이스먼트 매핑과 마찬가지로 테셀레이션이 적용되면 연산해야할 폴리곤의 숫자가 엄청나게 많아서 처리속도가 느려진다. 그러나 DirectX 11, OpenGL 4 이상을 지원하는 GPU엔 기본적으로 테셀레이션 처리 모듈인 테셀레이터가 포함되어있기 때문에 같은 수의 폴리곤을 가진 모델을 넣는 것보다 그나마 더 효율적이다. 때문에, 그래픽 퀄리티(폴리곤 숫자)를 기준으로 보면 디스플레이스먼트 매핑을 하드웨어 테셀레이션으로 구현하는 게 그나마 성능 위주의 최적화이다. 점진적으로 기존 기술을 대체한 건 괜히 그런 게 아니다.
  • 실제로 ATI에서 TeraScale 발표 초기에 하드웨어 테셀레이션 수준의 디스플레이스먼트 매핑을 기존 기술(패럴랙스 오클루젼 매핑)로 억지로 구현해서 프레임이 박살난 걸 먼저 보여준 후에 하드웨어 테셀레이션을 적용하여 극적인 프레임 향상을 시연한 바 있다.# 2560x1600 해상도에서 자갈 재질의 울퉁불퉁한 바닥은 구현하는데 있어, 패럴랙스 오클루젼 매핑의 초당 72 프레임에 비해 173프레임으로 2.4배 가량 빠른 모습을 보인다. 일반적인 범프맵핑은 같은 조건에서 494 프레임으로 훨씬 빠르지만 입체감이 떨어지는 게 한 눈에 띌 정도로 차이가 난다. 다만 당시 AAA급 기준 기본값이라 할 수 있을 정도의 대세였던 노멀 매핑이 비교에서 빠진 건 아쉬운 점.
테셀레이션과 디스플레이스먼트 매핑같은 고급 매핑을 활용할 자원의 성능이 충분해졌다 하더라도 2010년대 초반까지만 해도 이를 많이 활용하기엔 여전히 버거운 기능이었다. 그러다가 2013년에 AMD에서 개발한 새로운 API인 Mantle을 도입하여 기존의 API로 구현하면서 발생한 오버헤드를 줄이고 콘솔 게임기에서나 활용했던 하드웨어 직접 접근, 이기종 컴퓨팅, 비동기 셰이딩, 개선된 메모리 공유 기능을 통해 성능 효율이 대폭 상승하게 되어 테셀레이션과 고급 매핑의 제약이 줄어들었다.
2014년에 MS에서도 Mantle의 특성을 반영하고 대응하기 위해 DirectX 12를 발표하였고, 2015년에 크로노스 그룹에서도 역시 Mantle과 DirectX 12에 대응하기 위해 기존의 OpenGL 네이밍이 아닌 Vulkan이라는 새로운 이름의 API를 발표하였으며, 언리얼 엔진, 유니티 엔진, 크라이엔진, 프로스트바이트 엔진 등의 유명 게임 엔진 쪽에서도 이러한 새로운 API를 실험적으로 도입하여 테셀레이션과 고급 매핑 기능을 많이 활용한 게임이 증가할 것으로 전망되고 있다. 물론, 개발 난이도가 높은 기술 특성상 테크니컬한 부분에 많은 투자를 할 수 있는 AAA 게임 위주가 될 가능성이 높다.

3.1. 테셀레이션이 사용된 게임



[1] 임의의 삼각형에 이를 180도 회전한 삼각형을 붙이면 평행사변형이 된다. 평행사변형은 평면을 채울 수 있다.[2] 2012년 GCN 아키텍처부터는 이를 '지오메트릭 프로세서'라고 명명되었다.[3] 기존 패럴랙스 매핑의 단점을 보완한 매핑이지만 그만큼 연산 요구량이 더 많아지고 리소스도 더 필요하며, 결과적으로 더 비싼 기법이라 자주 사용되지 않는 편이다.