2011-03-24 5 views
2

이것은 학문적 인 질문입니다. 사실 나는 시험을 준비하고 있는데, 나는이 개념을 진정으로 이해하려고 노력하고 있습니다.Z 버퍼를 사용하는 것의 장점과 깊이에 따라 픽셀 우선 순위 지정

문맥을 다소 설명하도록 허용합니다. 현재 진행중인 문제는 화면에 그릴 때 서로 뒤에 숨어있는 물체 (또는 특히 다각형)를 숨기는 것입니다. 어떤 사람이 마지막으로 그려지고 따라서 최전방으로 끌려 가는지 결정하기 위해 계산이 수행되어야합니다.

강의에서 저는 교수님이 깊이 값으로 픽셀의 우선 순위를 지정하는 것이 계산 상 비효율적이라고 말씀하셨습니다. 그는 Z 버퍼에 대한 간단한 설명과 픽셀의 깊이 값을 테스트하고 버퍼의 픽셀 깊이 값과 비교하는 방법을 설명했습니다. 이 방법은 픽셀의 우선 순위를 어떻게 다르게 할 것인가?

감사합니다.

답변

6

프래그먼트가 속한 폴리곤을 결정하는 것은 모든 단일 픽셀에 대해 가장 가까운 다각형을 찾아야하므로 (그리고 픽셀 쉐이딩 중에 전체 지오메트리 정보를 사용할 수 있어야하기 때문에) 많은 비용이 듭니다.

깊이에 따라 많은 삼각형 (다각형은 하나 또는 여러 개의 삼각형이 아닙니다)으로 구성된 전체 객체를 쉽게 정렬 할 수 있습니다. 그러나 이것은 근사한 근사치에 불과하며 인근 물체가 겹쳐져 인공물을 생성하므로 픽셀을 완벽하게 만들기 위해 무언가를 수행해야합니다.

여기가 z 버퍼가 들어오는 지점입니다. 조각의 계산 된 깊이가 z 버퍼에 이미 저장된 것보다 큰 것으로 밝혀지면 조각이 "무언가 뒤에"있기 때문에 삭제됩니다. 그렇지 않으면 조각이 컬러 버퍼에 기록되고 깊이 값이 z 버퍼에 기록됩니다. 물론 이것은 20 개의 삼각형이 서로 뒤떨어져있을 때 동일한 픽셀이 무색으로 19 번 음영 처리된다는 것을 의미합니다. 아아, 불행. 전에 Z 테스트 을 수행하여

현대 그래픽스 하드웨어 주소 이것은 실제로 (이 최적화 분명히 불가능 픽셀 단위의 심도를 산출하는 경우)의 삼각형의 정점의 보간 깊이에 따른 화소 음영.

또한 전체 조각 그룹을 빠르게 삭제하는 보수적 인 (때로는 계층 적, 때로는 타일링 된) 최적화를 사용합니다. 이를 위해 z 버퍼에는 64x64 직사각형 영역에 렌더링되는 최대 깊이와 같은 추가 정보 (사용자에게 알려지지 않은 정보)가 들어 있습니다. 이 정보를 사용하면 저장된 깊이를 실제로 보지 않고도이 화면 영역의 조각을 즉시 삭제할 수 있으며 모든 정점의 깊이가 더 큰 삼각형에 속한 모든 조각을 완전히 삭제할 수 있습니다. 분명히, 그 중 아무 것도 볼 수있는 방법이 없기 때문입니다.
이것은 구현 세부 사항이며 매우 구체적인 플랫폼입니다.

편집 :이 점을 분명히했는지는 확실하지 않지만 z-culling을 사용하여 정렬 할 때는 화가의 알고리즘으로 수행하는 작업의과 정확히 일치하는 을 사용해야합니다. 가장 가까운 것이 가장 먼저 그려지기를 원합니다 (대략 100 % 정확할 필요는 없습니다). 그래서 "마지막 사람이 서있다"는 의미에서 픽셀의 최종 색을 결정하는 대신, "선착순 봉사하고 단 한 명만 봉사했다. "

3

첫 번째로 이해해야 할 점은 교수님이 '픽셀을 자신의 깊이로 우선 순위 지정'한 것입니다.내 생각 엔 주어진 화면 픽셀에 대해 요청 된 모든 조각을 저장하고 가장 가까운 조각을 선택하여 결과 색상을 생성하는 것입니다. Z 버퍼를 사용하면 모든 값 대신 단일 값만 저장할 수 있기 때문에 비효율적입니다.

+1

이것은 내 생각에도 대답이었을 것입니다. 이와 같이 우선 순위를 정하면 불확실한 크기의 버퍼가 생성되고 그림의 끝 부분에서 오른쪽 픽셀에 대한 O (n) 검색이 추가됩니다. z- 버퍼는 항상 픽셀 당 O (1) 개의 '현재 가장 가까운'룩업을 갖는 고정 된 크기를 가지며, 그 이유 중 하나는 캐시 효율적인 비선형 및 계층 적 형태로 저장하기 쉽기 때문에 O (1) (또는 원한다면 n 픽셀의 경우 O (n)보다 낫습니다.) 폴리곤의 모든 픽셀에 대해 래스터 화하는 동안 룩업을 수행합니다. – Tommy

+1

"단일 값"을 지정하면 투명성 문제가 발생하고 몇 가지 새로운 알고리즘은 "모두 포함"으로 되돌아갑니다. 예를 들어 AMD의 Mecha Demo를보십시오. – Calvin1602

+0

좋은 메모, @ 토미와 @ Calvin1602 – kvark