什麼是24位元 Z緩衝深度 - 顯卡

Table of Contents

※ 引述《Sheng1025 (努力活下去)》之銘言:
: 我的顯卡是 ASUS ATI 4670
: 在3D設定裡面有個選項是 強制 24位元 Z緩衝深度
: 請問這是用來做什麼的 玩遊戲開啟這選項
: 對畫面會有幫助嗎?

=====牆壁

人物B

箱子A
人物C ^^^
|||
----------螢幕虛擬平面


3D遊戲中,把你的螢幕畫出來的東西.當成在螢幕後面存在一個虛擬的世界.
這時候你看見的物體,相對於你的螢幕平面或者是"視角".都會有一個深
度的距離.

比如說,箱子距離你0.5M,人物距離0.8M,牆壁距離3M.

所以Z-buffer是儲存"每個Pixel",對應的現在被畫出來的物件
距離你的螢幕的距離......用途是決定接下來繪製其他pixel的時候,
就可以決定哪些pixel該被遮住,哪些該被重劃.

上面這個聽起來像是木星話嗎?

那麼這樣說明好了,假設人是躲在箱子後面偷看你,也就是說,人頭有部分
被箱子遮住.部分沒有.箱子所占用的pixel為A,人所占用的為B


AAAAAAAA
AAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA <--繪畫箱子
AAAAAAAAAA
AAAAAAAAAA

BBBBBBB
AAAAAAAABB
AAAAAAAAABB <--繪畫人
AAAAAAAAAABB
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA

為何會知道畫人的時候,部分的pixel是被箱子遮住.必須避開不畫.
而剩下的部分要畫出來呢?就是以Z-buffer實作來解決這個問題.

假如說先畫箱子,那麼這些pixel對應的Z-buffer大小就是0.3M.
接下來要畫的物件和這個區域重疊的時候,如果新物件的Z的大小
大於0.3M,表示會被遮住,不用畫在螢幕上.如果Z的大小小於0.3M
表示重疊部分必須更新重畫.

如果接下來要畫的是更前面的人物C.那麼因為C的Z值都比現存的
Z-buffer的值小,所以知道重疊的pixel都一全部重劃,並且把
這些pixel的Z-buffer更新成更小的Z值.

那麼..Z-buffer設定成24bit有什麼意義呢?因為相較於原本的16-bit Z-buffer.
把數字變大,可以得到比較高的精確值以及表示範圍.

比如說,如果我把場景中的"最遠"定義成60公尺左右.那麼16-bit Z-buffer
的最小單位就會是差不多0.1cm...這看起來是很夠用了,就算我們把視角
轉回桌上的文具等等.也不用擔心繪圖因為精確度太差而出問題.

不過實際上並沒有這麼簡單.因為Z-buffer儲存的是Z值(聽起來像是火星話,
但是我不打算現在解釋).所以說,Z-buffer每差一個單位,在越遠的地方會差異越大.

換個方式解釋好了.你的螢幕上同樣的一個pixel,在看很近的東西的時候,
一個pixel所佔有的實際長度很短.但是視角切換到看遠處的時候,一個pixel
所佔有的實際長度/面積會大很多.

如果說我希望場景的深度最深達到1000公尺,在這個等級的時候.
我看最遠處(1公里)的東西,16-bit Z-buffer"不能"分辨出
小於30公尺內的物件的正確遮蔽關係.這表示物體的三角面會有
很多被計算錯誤.就會出現物體的邊緣不正常的被吃掉,或者是畫出
詭異的形狀等等.更嚴重的情況則是,有些物件只要移動一點點.
就會算出孑然不同的結果.那麼你就會看到這個物體一面變形一面移動.
或者是產生視覺上嚴重閃爍的問題.

如果Z-buffer提升到24-bit,那麼可分辨的下限
就大概是降為12.5cm左右...這表示可以降低非常多畫面遠處畫錯的問題.

Z-buffer提高精確度的好處就是以上那樣.
壞處?16-bit變成24-bit,略為提升記憶體佔用量.
當然就現在的顯示卡而言,解析度*24bit的記憶體用量
少的跟一根腳毛差不多.不過同時讀寫的頻寬也成正比增加.
在繪製3D圖案的時候,Z-buffer是不斷的讀取以及寫入的.

另外一個不用提高Z-buffer精確度的方法則是把Z-buffer改為以
W-buffer實作,Z-buffer儲存的為Z值而W buffer儲存的為W值
(怎麼又是火星話!!),W-buffer的好處就是經過換算,在極遠處
跟很近的地方的可辨別精確度相同.因此也不需要特意提高精確度,
可以繼續沿用16-bit的精確度就夠了.但是缺點就是W-buffer需要
額外換算,因此會佔用硬體的計算資源,或者是硬體實作上會比較複雜等等.


--

All Comments

Kelly avatarKelly2008-11-24
知識推
Belly avatarBelly2008-11-29
專業!
Elvira avatarElvira2008-12-01
受教了 推一個
Queena avatarQueena2008-12-04
厲害厲害 推一下~
George avatarGeorge2008-12-06
厲害
Lucy avatarLucy2008-12-09
真專業!
Lydia avatarLydia2008-12-10
不得不推@@"
Catherine avatarCatherine2008-12-14
推電腦繪圖學 :)
Poppy avatarPoppy2008-12-16
我真的看不懂 但還是要推
Rebecca avatarRebecca2008-12-21
請問原PO談的這些"電腦繪圖學"是什麼系所會開的課,好奇中!
Steve avatarSteve2008-12-24
資工
Isla avatarIsla2008-12-26
感謝!
Isla avatarIsla2008-12-31
看不懂......可是還是要給推^^"
Kelly avatarKelly2009-01-04
你的箱子跟人物圖畫反了吧?
Harry avatarHarry2009-01-05
看顯卡板 長知識
Lydia avatarLydia2009-01-09
不懂推....
Jessica avatarJessica2009-01-11
Damian avatarDamian2009-01-14
所以強制開比較好囉..反正占的記憶體不算什麼y