불규칙 Z 버퍼
Irregular Z-buffer불규칙 Z 버퍼는 실시간 3D 컴퓨터 그래픽스의 가시성 문제를 해결하기 위해 설계된 알고리즘입니다.이는 각 영상 샘플에 대한 깊이 값을 유지하고 이러한 값을 사용하여 씬(scene)의 어떤 기하학적 요소를 볼 수 있는지 판별한다는 점에서 기존의 Z 버퍼와 관련이 있습니다.그러나 기존의 Z 버퍼와 불규칙한 Z 버퍼의 주요 차이점은 이미지 샘플을 이미지 평면에 임의로 배치할 수 있는 반면, 일반 그리드에 샘플을 배치해야 한다는 것입니다.
이러한 깊이 샘플은 2차원 공간 데이터 구조에 명시적으로 저장됩니다.래스터라이제이션 중에 통상대로 삼각형이 이미지 평면에 투영되고 데이터 구조가 쿼리되어 투영된 각 삼각형이 겹치는 샘플이 결정됩니다.마지막으로 중복되는 샘플별로 표준 Z 비교 및 (조건부) 프레임 버퍼 갱신을 실시한다.
실행
기존 래스터라이제이션 알고리즘은 각 폴리곤을 영상 평면에 투영하고 투영된 폴리곤 안에 있는 일정한 간격의 세트의 샘플 포인트를 결정합니다.이러한 샘플의 위치(즉, 픽셀)는 암묵적이기 때문에, 이러한 결정은 샘플 포인트의 암묵적인 그리드에 대해 에지를 테스트함으로써 할 수 있다.그러나 표본 지점의 위치가 불규칙하게 떨어져 있고 공식에서 계산할 수 없는 경우에는 이 접근방식이 작동하지 않는다.불규칙한 Z 버퍼는 샘플 위치를 2차원 공간 데이터 구조에 명시적으로 저장하고 나중에 이 구조를 쿼리하여 투영된 삼각형 내에 어떤 샘플이 있는지 확인함으로써 이 문제를 해결합니다.이 후 단계를 "불규칙 래스터라이제이션"이라고 합니다.
사용된 특정 데이터 구조는 구현마다 다를 수 있지만, 연구된 두 가지 접근법은 kd-tree와 연결된 목록의 그리드입니다.균형 잡힌 kd-tree 구현은 O(log(N) 액세스를 보장한다는 장점이 있습니다.주요 단점은 kd-트리의 병렬 구축이 어려울 수 있으며, 트래버설에는 고가의 분기 명령이 필요하다는 것입니다.목록 그리드는 주로 기존 Z 버퍼용으로 설계된 GPU 하드웨어에서 보다 효과적으로 구현할 수 있다는 장점이 있습니다.
CUDA의 등장으로, 현재의 그래픽 하드웨어의 프로그래머빌리티가 큰폭으로 향상되었습니다.마스터 논문 "CUDA의 불규칙한 Z 버퍼를 사용한 고속 삼각 래스터라이제이션"(외부 링크 참조)은 CUDA에서의 불규칙한 Z 버퍼 기반의 섀도우 맵핑소프트웨어 실장에 대한 완전한 설명을 제공합니다.렌더링 시스템은 GPU에서 완전히 실행되고 있습니다.초당 수천만 개의 삼각형 처리량으로 앨리어싱 없는 그림자를 생성할 수 있습니다.
적용들
불규칙 Z 버퍼는 이미지 평면의 임의 위치에서 가시성 계산이 필요한 모든 애플리케이션에 사용할 수 있습니다.특히 섀도 매핑, 즉 하드 섀도를 렌더링하기 위한 이미지 공간 알고리즘에 능숙한 것으로 나타났습니다.섀도 렌더링 외에 적응형 안티에이리어싱, 지터 샘플링, 환경 매핑 등이 있을 수 있습니다.