쌍선형 텍스처 필터링(Direct3D 9)

텍스처는 다음 그림과 같이 항상 왼쪽 위 모서리의 (0.0, 0.0)에서 오른쪽 아래 모서리(1.0, 1.0)로 선형으로 처리됩니다.

단색 블록이 있는 4x4 텍스처 그림

텍스처는 대개 단색 블록으로 구성된 것처럼 표현되지만 실제로는 래스터 디스플레이를 생각할 때와 같은 방식으로 텍스처를 생각하는 것이 더 정확합니다. 다음 일러스트레이션과 같이 각 텍셀이 표 형태 창 셀의 정중앙에 정의됩니다.

그리드 셀의 가운데에 텍셀이 정의된 4x4 텍스처 그림

UV 좌표(0.375, 0.375)에서 이 텍스처의 색에 대한 텍스처 을 요청할 경우 빨간색 단색(255, 0, 0)이 제공됩니다. 빨간색 텍셀 셀의 정확한 중심이 UV(0.375, 0.375)에 있기 때문에 완벽한 의미가 있습니다. UV(0.25, 0.25)의 텍스처 색에 대한 샘플러를 요청하면 어떻게 될까요? UV(0.25, 0.25)의 지점이 4텍셀의 정확한 모서리에 있기 때문에 그렇게 쉽지 않습니다.

가장 간단한 구성표는 샘플러가 가장 가까운 텍셀의 색을 반환하도록 하는 것입니다. 이를 지점 필터링이라고 하며( 가장 가까운 지점 샘플링(Direct3D 9 참조) 일반적으로 거친 결과 또는 블로킹 결과로 인해 바람직하지 않습니다. UV(0.25, 0.25)의 텍스처를 점 샘플링하면 가장 가까운 점 필터링에 또 다른 복잡한 문제가 생깁니다. 샘플링 점에서 등거리에 4개의 텍셀이 있으므로 가장 가까운 텍셀이 하나도 없습니다. 이러한 4개의 텍셀 중 하나가 반환 색으로 선택되지만 선택 내용은 좌표가 반올림되는 방식에 따라 다릅니다. 이로 인해 깨지는 아티팩트가 생길 수 있습니다(SDK의 가장 가까운 점 샘플링 문서 참조).

약간 더 정확하고 일반적인 필터링 체계는 샘플링 지점에 가장 가까운 4텍셀의 가중 평균을 계산하는 것입니다. 이를 쌍선형 필터링이라고 하며, 이 루틴은 최신 그래픽 하드웨어에서 구현되므로 추가 계산 비용은 일반적으로 무시할 수 있습니다. 다음은 쌍선형 필터링을 사용하여 몇 가지 샘플 점에서 얻은 색입니다.

UV: (0.5, 0.5)

이 점은 빨간색, 녹색, 파란색 및 흰색 텍셀 사이의 테두리에 정확히 위치합니다. 샘플러에서 반환하는 색은 회색입니다.

  0.25 * (255, 0, 0)
  0.25 * (0, 255, 0) 
  0.25 * (0, 0, 255) 
## + 0.25 * (255, 255, 255) 
------------------------
= (128, 128, 128)
UV: (0.5, 0.375)

이 점은 빨간색, 녹색, 파란색 및 흰색 텍셀 사이의 테두리의 중간점에 위치합니다. 샘플러가 반환하는 색은 노란색-회색입니다. 파란색 및 흰색 텍셀의 기여는 0으로 조정됩니다.

  0.5 * (255, 0, 0)
  0.5 * (0, 255, 0) 
  0.0 * (0, 0, 255) 
## + 0.0 * (255, 255, 255) 
------------------------
= (128, 128, 0)
UV: (0.375, 0.375)

이는 반환 색인 빨간색 텍셀의 주소입니다(필터링 계산의 다른 텍셀은 모두 0으로 가중치가 매겨짐).

  1.0 * (255, 0, 0)
  0.0 * (0, 255, 0) 
  0.0 * (0, 0, 255) 
## + 0.0 * (255, 255, 255) 
------------------------
= (255, 0, 0)

이러한 계산을 다음 일러스트레이션과 비교하세요. 일러스트레이션은 4x4 텍스처의 모든 텍스처 주소에서 쌍선형 필터링 계산이 수행되는 경우 어떤 일이 일어나는지를 보여줍니다.

모든 텍스처 주소에서 쌍선형 필터링이 수행된 4x4 텍스처 그림

텍스처 필터링