본문 바로가기

공부/Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문

[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 8 - 이미지 텍스처링 [2/2]

728x90
반응형

 

 

 

8.4 텍스처 포장

 

  • 텍스처 좌표는 원칙적으로 [0, 1] 범위 안에서 정의되지만, GL은 그 범위 밖에서 좌표를 지정하는 것을 허용하고 이를 처리해 준다.
  • 사용자는 텍스처 포장 모드(texture wrapping mode)를 설정하여 그 처리 방식을 조절할 수 있다.

 

텍스처 포장 모드

 

  • 폴리곤 메시의 세 정점은 [0, 1] 범위 밖의 텍스처 좌표를 가지고 있다. 이에 따라 래스터라이저가 생성하는 프래그먼트의 상당수는 [0, 1] 범위 밖의 텍스처 좌표를 가지게 된다.

 

  • 이러한 텍스처 좌표는 [0, 1] 범위의 경계(edge)로 고정(clamp)시킬 수 있다. 이를 경계 고정 모드(clamped-to-edge)라고 한다. 한 프래그먼트의 s값이 1.1이라면 이를 경계 값인 1.0으로 바꾸는 것이다. (c)
  • 한편, [0, 1] 범위를 벗어나는 텍스처 좌표가 주어지면 그 소수점 이하만 이용할 수도 있다. s값이 1.1이라면 이를 0.1로 대체한다. 이렇게 하면 텍스처를 타일처럼 이어붙인 결과가 나온다. 이를 반복 모드(repeat mode)라고 부르는데, 작은 이미지로 넓은 영역을 텍스처링할 수 있으므로 경계 고정 모드보다 훨씬 많이 사용된다. 하지만 텍스처 타일 사이의 경계선이 두드러져 보일 수도 있다. (d)
  • 반사 반복 모드(mirrored-repeat mode)s값이 1.1이라면 이를 0.9로 바꾸고, s값이 1.2라면 0.8로 바꾼다. 이렇게 하면 텍스처 타일은 정수의 텍스처 좌표마다 반사된 형태로 놓이게 되어 부드러운 효과를 얻을 수 있다. (e)
  • 반복 모드와 반사 반복 모드를 함께 적용할 수도 있다. (f)

 

 

 

 


 

 

 

8.5 텍스처 필터링

 

폴리곤 메시
텍스처 확대
텍스처 축소

 

  • 프래그먼트의 텍스처 좌표 (s, t)는 텍스처 공간의 (s', t')로 투영된다. 그러면 (s', t') 주변의 텍셀을 고려해서 해당 프래그먼트의 색상을 결정해야 하는데, 이를 텍스처 필터링(texture filtering)이라고 부른다.

 

  • 텍스처 확대의 경우 스크린 공간 사각형의 크기는 이미지 텍스처보다 크다. 따라서, 텍스처는 사각형에 맞도록 확대(magnify)되어야 한다.
  • 점선 격자는 텍스처 공간을 나타내는데, 격자 한 칸에 텍셀이 하나씩 위치한다. 한편, 동그란 점은 텍스처 공간에 투영된 픽셀을 나타낸다. 텍셀보다 픽셀이 많음에 주목해야한다.

 

  • 반면, 텍스처 축소의 경우 스크린 공간 사각형의 크기는 이미지 텍스처보다 작다. 따라서, 텍스처는 사각형에 맞도록 축소(minify)되어야 한다. 텍셀보다 픽셀이 적으므로, 픽셀들은 텍스처 공간에 듬성듬성 투영된다.

 

 

 

8.5.1 텍스처 확대

 

근접점 샘플링

  • 텍스처 확대에 사용되는 필터링 방법 중 하나는 근접점 샘플링(nearest point sampling)이다. 즉, (s', t')와 가장 가까운 텍셀을 사용하는 것이다.
  • 여러 개의 픽셀이 하나의 텍셀을 참조하게 되어, 그림 오른쪽에 보인 것처럼 마치 모자이크 처리된 듯한 결과를 얻게 된다.

 

 

겹선형보간(bilinear interpolation)

 

  • 겹선형보간주위를 둘러싸는 네 개의 텍셀을 겹선형보간하여 해당 픽셀의 텍스처 색상을 결정하는 방법이다.
  • 겹선형보간을 사용하면 인접한 픽셀일지라도 필터링된 색상이 달라질 수 있고, 근접점 샘플링보다 부드러운 텍스처링 결과를 얻을 수 있다.
  • 대부분의 경우에 겹선형보간 기법은 근접점 샘플링보다 우수한 결과를 생성한다.

 

 

 

 


 

 

 

8.5.2 텍스처 축소

 

텍스처 축소에서의 에일리어싱 문제

 

  • 텍스처 축소의 경우, 픽셀들이 텍스처 공간에 듬성듬성 투영됨을 기억하자.
  • 왼쪽의 경우 네 개의 픽셀은 모두 검은색 텍셀에 둘러싸여 있다. 이러한 경우 픽셀의 텍스처 색상은 검은색이 된다. 모든 픽셀들이 이렇게 검은색 텍셀에 둘러싸이게 되면, 텍스처링된 프리미티브는 완벽한 검은색이 된다.

 

  • 이 문제는 이른바 에일리어싱(aliasing)의 한 예이다. (픽셀에 대비해서 텍셀이 너무 많다.)
  • 에일리어싱이 일으키는 부작용을 최소화하기 위한 안티에일리어싱(anti-aliasing)기술이 필요하다. 그 중 대표적인 안티에일리어싱 기법을 소개할 것이다.

 

 

 

 


 

 

 

 

8.6 밉매핑

 

  • 텍스처 축소 시 발견한 에일리어싱의 원인을 한 마디로 요약하면, 픽셀에 비해 텍셀이 너무 많아서 텍스처링에 참여하지 못하는 텍셀이 발생하기 때문이다.
  • 문제 해결 방법은 텍스처를 작게 만들어서 텍셀 수를 픽셀 수에 맞추면 된다.

 

 

 

8.6.1 밉맵 생성

 

밉맵 생성

 

  • 왼쪽에 있는 원본 텍스처는 8 x 8 해상도를 가졌다. 이 원본 텍스처를 구성하는 2 x 2 텍셀들의 색상 평균을 구하는 작업을 반복하면, 원본 텍스처의 1/4 크기를 가진 4 x 4 해상도 텍스처를 만들 수 있다. 이러한 다운샘플링(down-sampling)을 반복하면 원본 텍스처 전체의 평균 색상을 담고 있는 1 x 1 크기의 텍스처를 얻을 수 있다.
  • 원본 텍스처의 해상도가 2^l x 2^l일 때, 총 (l + 1)개의 레벨을 가지는 텍스처 피라미드로 묶일 수 있다. 이 피라미드를 밉맵(mipmap)이라 부른다.
  • 밉맵을 사용하면, 텍셀 개수를 픽셀 개수에 맞출 수 있다.

 

 

 

8.6.2 밉맵 필터링

 

밉맵 필터링 예제 [1/3]

 

  • 이제까지 픽셀을 스크린 공간의 한 '점'으로 간주해 왔고, 이 픽셀이 텍스처 공간의 한 '점'인 (s', t')로 투영된다고 설명해 왔다.
  • 텍스처 공간에 투영된 픽셀은 (s', t')에 놓인 '점'이 아니라 (s', t')를 중심으로 일정한 '영역'을 차지하게 된다. 이 영역을 픽셀의 발자국(footprint)이라고 부른다.
  • 레벨 0번처럼 픽셀 발자국은 2 x 2 텍셀 영역을 차지한다. 텍셀이 픽셀보다 너무 많다.
  • 레벨 1번은 픽셀 발자국은 하나의 텍셀을 차지한다. 즉, 픽셀과 텍셀의 개수가 같다. 그러면 이 레벨에서 필터링이 수행된다.

 

밉맵 필터링 예제 [2/3]

  • 밉맵 0번 레벨에 있는 원본 텍스처의 RGB값은 그 상위 레벨에 모두 포함되어 있다. 밉맵의 어느 레벨을 골라 필터링을 하건, 원본 텍스처의 텍셀이 배제되는 경우는 없다. 이렇게 해서 에일리어싱 문제를 해결하는 것이다.
  • 필터링을 수행할 밉맵의 레벨을 통상적으로 λ로 표기하는데, 픽셀의 발자국이 0번 레벨 텍스처에서 m x m 텍셀을 차지하는 경우 λlog2m으로 설정된다. m이 2의 거듭제곱이라면 λ는 정수가 된다.

 

 

밉맵 필터링 예제 [3/3]

 

  • 하지만, 대개의 경우 m은 2의 거듭제곱이 아닐 것이다. 따라서 λ는 정수가 아닌 실수가 된다.
  • 정수가 아닌 λ가 계산되면, λ에 가장 가까운 레벨을 선택할 수 있다. 물론 해당 레벨은 근접점 샘플링 혹은 겹선형보간을 통해 필터링될 수 있다.
  • 위 그림에서는 그 보다 좋은 방법인 λ가 끼여있는 레벨 1과 레벨 2 두 레벨을 모두 선택한 뒤, 두 레벨 모두 겹선형보간으로 필터링한 후 λ의 소수점 이하 값 0.585를 이용해 선형보간한 결과를 보여준다. 이것을 특히 삼선형보간(trilinear interpolation)이라 부른다.
  • 하지만 이러한 계산은 GPU가 전담하므로 신경 쓰지 않아도 된다.

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

출처

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.

728x90