본문 바로가기

프로그래밍/Shader

Tessellation

테셀레이션 (Tessellation)
 : 작은 조각들을 틈이 없게, 그리고 겹치지 않게 이어 붙여서 하나의 surface를 형성하는 것
 -> 여러 개의 작은 기하구조들을 틈 없이 겹치지 않게 붙여서 하나의 표면을 만들어 내는 것

래스터 기반 컴퓨터 그래픽에서는 일반적으로 표면을 주로 삼각형들로 표현했다.
삼각형이 항상 블록꼴이고 세 정점이 항상 같은 평면에 있다는 성질 때문이었다.
하지만 삼각형으로는 평평한 기하학적 표면만을 표현할 수 있다는 제약이 있다.
많은 수의 작은 삼각형들로 매끄러운 곡면을 근사하는 것이 가능하지만, 기본 단위인 삼각형은 여전히 평평하다.

곡면을 표현하는 기법
  1. NURBS (Non-Uniform Rational Basis Splines) : 매끄러운 곡면에 대한 일반화된 수학 형식
  2. 세분 표면 (Subdivision Surface, SubD) : Mesh Refinement를 위한 일반적인 틀로, 이상적인 곡면을 더 이상 잘 표현할 수 없을때까지 재귀적으로 삼각형을 추가해 나간다.
            ex) 캐트멀-클라크 세분 표면 (Catmull-Clark Subdivision Surfaces)

두 기법의 차이점은 세분 표면에서는 수학적 basis가 필요하지 않지만, NURBS에서는 필요하다는 것이다.

고차 표면 (Higher-Order Surface)
 : 수학적으로 정의된 표면. 바탕 공식들이 그 차수(order)로서 정의되고, 그 차수가 선형(1차)보다 높다.
    일반적으로 2차(제곱)와 3차(세제곱)가 쓰인다.

테셀레이션이 유용한 이유는 매끄러운 고차 표면을 아주 많은 수의 작은 삼각형들로 근사하는 것이 가능하기 때문이다.

고해상도 모형을 정의하려면 필요한 자료의 양이 크게 증가하게 된다. 이렇게 되면 디스크와 메모리의 저장 공간과 I/O 대역폭, 그리고 계산 횟수도 증가한다.

반면 표면을 수학적으로 정의하는 데에는 수학 공식의 계수들 또는 해당 함수에 대한 입력 매개변수들 몇 개로 충분하다. 

고차 표면을 정의하는 함수들은 미리 계산해둘 수 없으므로 반드시 실시간으로 계산해야 한다.

'프로그래밍 > Shader' 카테고리의 다른 글

Adaptation 구현 과정  (0) 2019.04.03
기하 셰이더 (Geometry Shader)  (0) 2019.03.29
Adaptation  (0) 2019.03.14
Bloom 이론  (0) 2019.03.13
HDR 이론  (0) 2019.03.06