다음을 통해 공유


깊이 버퍼(Direct3D 9)

z-buffer 또는 w-buffer라고도 하는 깊이 버퍼는 Direct3D에서 사용할 깊이 정보를 저장하는 디바이스의 속성입니다. Direct3D는 장면을 대상 표면에 렌더링할 때 연결된 깊이 버퍼 표면의 메모리를 작업 영역으로 사용하여 래스터화된 다각형의 픽셀이 서로 폐색되는 방식을 결정할 수 있습니다. Direct3D는 최종 색 값이 기록되는 대상으로 화면 끄기 Direct3D 표면을 사용합니다. 렌더링 대상 표면과 연결된 깊이 버퍼 표면은 Direct3D에 표시되는 각 픽셀이 장면에 얼마나 깊은지 알려주는 깊이 정보를 저장하는 데 사용됩니다.

깊이 버퍼링을 사용하도록 설정하여 장면을 래스터화하면 렌더링 화면의 각 지점이 테스트됩니다. 깊이 버퍼의 값은 프로젝션 공간의 점(x,y,z,w) 위치에서 점의 z 좌표 또는 동종 w 좌표일 수 있습니다. z 값을 사용하는 깊이 버퍼를 z 버퍼라고 하는 경우가 많으며 w 값을 사용하는 버퍼를 w 버퍼라고 합니다. 각 유형의 깊이 버퍼에는 장단점이 있으며, 나중에 설명합니다.

테스트 시작 부분에서 깊이 버퍼의 깊이 값은 장면에 대해 가능한 가장 큰 값으로 설정됩니다. 렌더링 화면의 색 값은 해당 시점에서 배경색 값 또는 배경 질감의 색 값으로 설정됩니다. 장면의 각 다각형은 렌더링 화면에서 현재 좌표(x,y)와 교차하는지 확인하기 위해 테스트됩니다. 이 경우 z-버퍼의 z 좌표가 될 깊이 값과 w-버퍼의 w 좌표가 현재 지점에서 깊이 버퍼에 저장된 깊이 값보다 작은지 확인하기 위해 테스트됩니다. 다각형 값의 깊이가 작으면 깊이 버퍼에 저장되고 다각형의 색 값은 렌더링 화면의 현재 지점에 기록됩니다. 해당 시점에서 다각형의 깊이 값이 크면 목록의 다음 다각형이 테스트됩니다. 이 프로세스는 다음 다이어그램에 나와 있습니다.

다이어그램

메모

대부분의 애플리케이션은 이 기능을 사용하지 않지만 Direct3D에서 사용하는 비교를 변경하여 깊이 버퍼에 배치되는 값과 이후에 렌더링 대상 화면에 배치되는 값을 결정할 수 있습니다. 이렇게 하려면 D3DRS_ZFUNC 렌더링 상태의 값을 변경합니다. 일부 하드웨어에서 비교 함수를 변경하면 계층적 z 테스트를 사용하지 않도록 설정할 수 있습니다.

 

시장의 거의 모든 가속기는 z 버퍼링을 지원하므로 z 버퍼는 오늘날 가장 일반적인 유형의 깊이 버퍼입니다. 그러나 유비쿼터스 z 버퍼에는 단점이 있습니다. 관련된 수학으로 인해 z-버퍼에서 생성된 z 값은 z-버퍼 범위(일반적으로 0.0~1.0 포함)에 균등하게 분산되지 않는 경향이 있습니다. 특히 원거리와 가까운 클리핑 평면 간의 비율은 z 값이 고르지 않게 분산되는 방식에 큰 영향을 줍니다. 원거리에서 가까운 평면 거리 비율 100을 사용하면 깊이 버퍼 범위의 90%가 장면 깊이 범위의 처음 10%에 사용됩니다. 외부 장면을 사용하는 엔터테인먼트 또는 시각적 시뮬레이션을 위한 일반적인 애플리케이션에는 1,000에서 10,000 사이의 원거리/근거리 평면 비율이 필요한 경우가 많습니다. 1,000의 비율로 범위의 98%가 깊이 범위의 처음 2%에 쓰이고 분포는 더 높은 비율로 악화됩니다. 이로 인해 특히 가장 일반적으로 지원되는 비트 깊이인 16비트 깊이 버퍼를 사용하는 경우 먼 개체에서 숨겨진 표면 아티팩트가 발생할 수 있습니다.

반면 w 기반 깊이 버퍼는 z 버퍼보다 근거리 및 원거리 클립 평면 간에 더 균등하게 분산되는 경우가 많습니다. 주요 이점은 먼 거리와 가까운 클리핑 평면의 거리 비율이 더 이상 문제가 되지 않는다는 것입니다. 이를 통해 애플리케이션은 큰 최대 범위를 지원할 수 있지만, 여전히 시선에 가까운 비교적 정확한 깊이 버퍼링을 얻을 수 있습니다. w 기반 깊이 버퍼는 완벽하지 않으며, 때로는 가까운 개체에 대한 숨겨진 표면 아티팩트를 나타낼 수 있습니다. w 버퍼링 방식의 또 다른 단점은 하드웨어 지원과 관련이 있습니다. w 버퍼링은 하드웨어에서 z 버퍼링만큼 널리 지원되지 않습니다.

z 버퍼를 사용하려면 렌더링하는 동안 오버헤드가 필요합니다. 다양한 기술을 사용하여 z 버퍼를 사용할 때 렌더링을 최적화할 수 있습니다. 자세한 내용은 Z 버퍼 성능참조하세요.

메모

깊이 값의 실제 해석은 렌더러와 관련이 있습니다.

 

이 섹션에서는 숨겨진 선 및 숨겨진 표면 제거에 깊이 버퍼를 사용하는 방법에 대한 정보를 제공합니다.

Direct3D 렌더링