2011-03-24 32 views
2

優先像素這是一個比較學術問題的優點。事實上,我正準備參加考試,我只是想真正理解這個概念。使用Z緩衝器與根據深度

讓我有點解釋的上下文。手邊的問題是在繪製屏幕時隱藏對象(或更具體的多邊形)。需要做一個計算來決定哪一個最後被繪製,因此是最前沿的。

在講座中,我是在一天,我的教授說,在他們的深度值方面優先考慮的像素是計算效率低下。然後,他給了我們關於Z緩衝區的簡短說明,以及他們如何測試像素的深度值,並將它們與緩衝區中像素的深度值進行比較。這是怎麼樣的,然後'按照深度優先處理像素'。

謝謝!

回答

6

決定哪些多邊形片段屬於是computionally昂貴的,因爲這將需要找到最接近的多邊形(並且,其像素着色過程中可用的整個幾何信息!)爲每一個像素。

這是很容易的,幾乎微不足道的整個對象進行排序,每一個根據其深度由許多三角形的(多邊形是不超過一個或幾個三角形)。然而,這只是一個粗略的近似值,附近的物體會重疊併產生人爲現象,所以需要做一些事情使其像素完美。

這是Z緩存用武之地,如果事實證明,一個片段的計算的深度比什麼已經存儲在z-緩存更大,這意味着該片段是「背後的東西」,所以被丟棄。否則,將片段寫入顏色緩衝區,並將深度值寫入z緩衝區。當然,這意味着當20個三角形彼此相連時,同樣的像素將被徒勞地屏蔽19次。唉,運氣不好。通過之前做z檢驗

現代圖形硬件地址這實際上陰影的像素,根據所述三角形的頂點的內插的深度(這個優化是明顯不可能如果每個像素的深度被計算)。

而且,他們採用保守的(有時是分層次的,有時只是平鋪),它迅速丟棄碎片的整個羣體的優化。爲此,z緩衝區會保留一些額外的(您未知的)信息,例如渲染到64x64矩形區域的最大深度。利用這些信息,它可以立即丟棄該屏幕區域中比這更大的任何碎片,而不實際查看所存儲的深度,並且可以完全丟棄屬於三角形的所有頂點具有更大深度的碎片。因爲,顯然,沒有任何方法可以看到它。
雖然這些是實現細節,並且非常特定於平臺。

編輯:雖然這可能是顯而易見的,我不知道如果我做了一點很清楚:當排序利用Z-剔除,你會做你與畫家算法做了什麼完全相反。你希望先畫出最接近的東西(粗略地說,不一定要100%精確),所以不是從「最後一個人的立場」的意義上確定一個像素的最終顏色,而是從「先來,先來送達,只有一個送達「。

3

你需要了解的第一件事是你的教授通過「在其深度方面優先考慮像素」是什麼意思。我的猜測是關於存儲給定屏幕像素的所有請求片段,然後通過選擇最接近的片段來生成結果顏色。它效率低下,因爲Z緩衝區允許我們只存儲一個值而不是所有的值。

+1

這也是我的猜測。像這樣進行優先排序會產生一個不確定大小的緩衝區,並且在繪圖結束時至少爲正確的像素添加O(n)搜索。 z緩衝區總是具有固定的大小,每個像素具有O(1)'當前最接近'的查找,部分原因是因爲它容易以緩存高效的非線性和分層形式存儲,以比O(1 )(如果您願意,也可以優於O像素的O(n))在光柵化過程中查找多邊形上的所有像素。 – Tommy 2011-03-24 21:55:57

+1

另一方面,具有「單一值」會在透明度方面產生問題,並且一些新算法會恢復爲存儲「所有這些」。請參閱AMD的Mecha Demo。 – Calvin1602 2011-03-24 22:41:58

+0

來自你的好消息,@Tommy和@ Calvin1602 – kvark 2011-03-25 03:00:51