다음을 통해 공유


가장 가까운 지점-샘플링

애플리케이션은 텍스처 필터링을 사용할 필요가 없습니다. Direct3D는 정수로 계산되지 않는 텍셀 주소를 계산하고 가장 가까운 정수 주소를 사용하여 텍셀 색을 복사하도록 설정할 수 있습니다. 이 프로세스는 가장 가까운 지점 샘플링이라고 호출됩니다. 가장 가까운 지점 샘플링은 텍스처의 크기가 화면에서 프리미티브의 이미지 크기와 비슷할 때 효과적일 수 있습니다. 그렇지 않은 경우 텍스처를 확대하거나 축소해야 합니다. 텍스처 크기가 기본 이미지 크기와 일치하지 않으면 두툼하거나 별칭이 지정되거나 흐린 이미지가 될 수 있습니다.

텍스처가 두 텍셀 사이의 경계에서 샘플링될 때 그래픽 아티팩트가 발생할 수 있으므로 가장 가까운 지점 샘플링을 신중하게 사용합니다. 이 경계는 샘플링된 텍셀이 한 텍셀에서 다음 텍셀로 전환되는 텍스처(u 또는 v)를 따라 위치합니다. 점 샘플링을 사용하는 경우 시스템은 하나의 샘플 텍셀 또는 다른 샘플을 선택하고 경계가 교차하면 결과가 갑자기 한 텍셀에서 다음 텍셀로 변경될 수 있습니다. 이 효과는 표시된 질감에서 원치 않는 그래픽 아티팩트로 나타날 수 있습니다. 선형 필터링을 사용하는 경우 결과 텍셀은 인접한 텍셀 모두에서 계산되고 텍스처 인덱스가 경계를 통과할 때 둘 사이에 매끄럽게 혼합됩니다.

이 효과는 매우 작은 텍스처를 매우 큰 폴리곤에 매핑할 때 볼 수 있으며, 이는 종종 확대라고 하는 연산입니다. 예를 들어 바둑판처럼 보이는 텍스처를 사용하는 경우 가장 가까운 점 샘플링을 수행하면 고유한 가장자리를 표시하는 더 큰 바둑판이 생성됩니다. 반면, 선형 텍스처 필터링은 바둑판 색이 다각형에 걸쳐 원활하게 변하는 이미지를 생성합니다.

대부분의 경우 애플리케이션은 가능한 경우 가장 가까운 지점 샘플을 방지하여 최상의 결과를 받습니다. 오늘날 대부분의 하드웨어는 선형 필터링에 최적화되어 있으므로 애플리케이션의 성능이 저하되지 않아야 합니다. 원하는 효과가 텍스처를 사용하여 읽을 수 있는 텍스트 문자를 표시하는 경우처럼 가장 가까운 지점 샘플링을 확실히 요구한다면, 애플리케이션은 텍셀 경계에서 샘플링하지 않도록 주의해야 하며, 그렇지 않으면 원치 않는 효과가 발생할 수 있습니다. 다음 그림에서는 이러한 결과물이 어떻게 보일 수 있는지 보여 줍니다.

오른쪽 위의 두 사각형에 연속되지 않은 가로줄이 있는 6칸 상자 그림의 삽화

그룹의 오른쪽 위에 있는 두 사각형은 인접한 사각형과 다르게 표시되고 대각선 오프셋이 실행됩니다. 이와 같은 그래픽 아티팩트가 발생하지 않도록 하려면 가장 가까운 지점 필터링을 위한 Direct3D 텍스처 샘플링 규칙을 잘 알고 있어야 합니다. Direct3D는 [0.0, 1.0](0.0에서 1.0, 포함)에 이르는 부동 소수점 텍스처 좌표를 [ - 0.5, n - 0.5]에 이르는 정수 텍셀 공간 값에 매핑합니다. 여기서 n은 텍스처의 지정된 차원에 있는 텍셀 수입니다. 결과 텍스처 인덱스는 가장 가까운 정수로 반올림됩니다. 이 매핑은 텍셀 경계에서 샘플링 부정확성을 도입할 수 있습니다.

간단한 예제에서는 래핑 텍스처 주소 지정 모드로 다각형을 렌더링하는 애플리케이션을 상상해 보세요. Direct3D에서 사용하는 매핑을 사용하여 u 텍스처 인덱스는 너비가 4텍셀인 텍스처에 대해 다음 다이어그램과 같이 매핑됩니다.

다이어그램은 텍셀 사이의 경계에 있는 텍스처 좌표 0.0 및 1.0을 나타냅니다.

이 그림의 텍스처 좌표 0.0과 1.0은 텍셀 사이의 경계에 정확히 있습니다. Direct3D가 값을 매핑하는 메서드를 사용하여 텍스처 좌표의 범위는 [- 0.5, 4 - 0.5]이며 여기서 4는 텍스처의 너비입니다. 이 경우 샘플링된 텍셀은 텍스처 인덱스 1.0의 0 텍셀입니다. 그러나 텍스처 좌표가 1.0보다 약간 작으면 샘플링된 텍셀은 0 텍셀 대신 n 텍셀이 됩니다.

이는 정확히 0.0과 1.0의 텍스처 좌표를 사용하여 작은 질감을 확대하고 화면 공간 정렬 삼각형에서 가장 가까운 점 필터링을 통해 텍스처 맵이 텍셀 사이의 경계에서 샘플링되는 픽셀을 생성한다는 의미입니다. 텍스처 좌표 계산의 부정확성이 작을수록 렌더링된 이미지의 영역을 따라 아티팩트가 생성되며 이는 텍스처 맵의 텍셀 가장자리에 해당합니다.

정확한 정확도로 부동 소수점 텍스처 좌표를 정수 텍셀에 매핑하는 작업은 어렵고 계산 시간이 많이 걸리며 일반적으로 필요하지 않습니다. 대부분의 하드웨어 구현은 삼각형 내의 각 픽셀 위치에서 텍스처 좌표를 계산하는 반복적인 방법을 사용합니다. 반복 방법은 반복하는 동안 오류가 균등하게 누적되기 때문에 이러한 부정확성을 숨기는 경향이 있습니다.

Direct3D 참조 래스터라이저는 각 픽셀 위치에서 텍스처 인덱스를 계산하는 데 직접 평가 방법을 사용합니다. 직접 평가는 작업의 부정확성이 더 임의의 오류 분포를 나타낸다는 점에서 반복적인 접근 방식과 다릅니다. 따라서 참조 래스터라이저가 완벽한 정확도로 이 작업을 수행하지 않으므로 경계에서 발생하는 샘플링 오류가 더 두드러질 수 있습니다.

가장 좋은 방법은 필요한 경우에만 가장 가까운 지점 필터링을 사용하는 것입니다. 이를 사용해야 하는 경우 아티팩트 방지를 위해 경계 위치에서 텍스처 좌표를 약간 오프셋하는 것이 좋습니다.

텍스처 필터링