다음을 통해 공유


선형 텍스처 필터링(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 텍셀의 정확한 구석에 있기 때문에 그렇게 쉽지 않습니다.

가장 간단한 구성표는 샘플러가 가장 가까운 텍셀의 색을 반환하도록 하는 것입니다. 이를 점 필터링(Nearest-Point 샘플링(Direct3D 9)참조)이라고 하며, 일반적으로 거친 결과나 막힌 결과로 인해 바람직하지 않습니다. UV(0.25, 0.25) 지점에서 질감을 점 샘플링할 때 가장 가까운 점 필터링의 또 다른 미묘한 문제가 드러납니다: 샘플링 지점에서 4개의 텍셀이 같은 거리에 있어, 가장 가까운 하나의 텍셀이 없습니다. 이러한 네 개의 텍셀 중 하나가 반환된 색상으로 선택되지만, 선택은 좌표가 반올림되는 방식에 따라 달라지며, 이로 인해 찢어지는 아티팩트가 생길 수 있습니다(SDK의 Nearest-Point 샘플링 문서 참조).

약간 더 정확하고 일반적인 필터링 체계는 샘플링 지점에 가장 가까운 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 텍스처의 일러스트레이션

텍스처 필터링