다음을 통해 공유


깊이 버퍼

깊이 버퍼 또는 z-버퍼는 깊이 정보를 저장하여 다각형의 어떤 부분이 시야에서 숨겨지지 않고 렌더링될지 제어합니다.

개요

z-버퍼 또는 w-버퍼라고도 종종 불리는 깊이 버퍼는 Direct3D에 사용되는 깊이 정보를 저장하는 디바이스의 속성입니다. Direct3D는 장면을 대상 표면에 렌더링합니다. 이는 메모리와 이에 연결된 깊이 버퍼 표면을 작업 영역으로 사용하여 래스터화된 다각형의 픽셀이 다른 부분을 어떻게 가릴지 결정합니다. Direct3D는 화면 외부 Direct3D 표면을 대상으로 사용하여 최종 색이 채워질 곳을 지정합니다. 대상 렌더링 표면과 연결된 깊이 버퍼 표면은 Direct3D가 장면에서 각 픽셀이 얼마나 깊이 표시되어야 하는지 알려주는 깊이 정보를 저장하는 데 사용됩니다.

깊이 버퍼링을 사용하도록 설정된 상태에서 장면을 래스터화하면 렌더링된 표면의 각 지점이 테스트됩니다. 깊이 버퍼의 값은 프로젝션 공간의 시점(x, y, z, w)에서 지점의 z 좌표 또는 같은 유형의 w 좌표가 될 수 있습니다. z 값을 사용하는 깊이 버퍼를 z-버퍼라고 하고 w 값을 사용하는 버퍼를 w-버퍼라고 합니다. 각 유형의 깊이 버퍼에는 장점과 단점이 있습니다. 이는 나중에 설명하겠습니다.

테스트를 시작할 때 깊이 버퍼의 깊이 값은 장면에 대해 가능한 가장 큰 값으로 설정됩니다. 렌더링 표면의 색 값은 배경 색 값이나 해당 시점의 배경 질감 색 값으로 설정됩니다. 장면의 각 다각형은 렌더링 표면의 현재 좌표(x, y)와 교차하는지 테스트됩니다.

교차할 경우 이는 현재 지점의 z 좌표가 z-버퍼가 되고, w 좌표가 w-버퍼가 됩니다. 이를 통해 깊이 버퍼에 저장된 깊이 값보다 더 작은지 테스트됩니다. 다각형 값의 깊이 값이 더 작은 경우, 이 값이 깊이 버퍼에 저장되고 다각형의 색 값이 렌더링 표면의 현재 지점에 적용됩니다. 해당 지점의 다각형 깊이 값이 더 큰 경우, 목록의 다음 다각형이 테스트됩니다. 이 과정은 다음 다이어그램에 표시되어 있습니다.

깊이 값 테스트 다이어그램

버퍼링 기술

대부분의 애플리케이션에서 이 기능을 사용하지 않지만, Direct3D가 깊이 버퍼에 어떤 값을 저장하고 이에 따라 대상 표면을 렌더링할지 판단하는 비교 기준을 변경할 수 있습니다. 일부 하드웨어에서는 비교 기능을 변경하면 계층적 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-버퍼링과 질감을 사용할 때 장면을 앞에서 뒤로 렌더링하는 방식으로 성능을 높일 수 있습니다. 질감이 적용된 z-버퍼 화면은 스캔 라인 기반으로 z-버퍼를 대상으로 미리 테스트됩니다. 이전에 렌더링된 다각형에 의해 스캔 라인이 숨겨지면, 시스템은 신속하고 효율적으로 이를 거부합니다. Z-버퍼링의 성능을 향상시키는 방법도 있지만, 장면에서 두 번 이상 같은 픽셀을 그릴 때 매우 유용한 기술도 있습니다. 이러한 계산을 정확하게 수행하기 어렵지만, 유사한 값을 얻는 것은 어렵지 않습니다. 동일한 픽셀을 한 번만 그리는 경우, z-버퍼링을 끄고 화면을 뒤에서 앞으로 다시 그리는 것으로 최고의 성능을 달성할 수 있습니다.

깊이 값의 실제 해석은 렌더러에 따라 달라집니다.

깊이 및 스텐실 버퍼