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

Kama avatar
By Kama
at 2008-11-22T19:13

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需要
額外換算,因此會佔用硬體的計算資源,或者是硬體實作上會比較複雜等等.


--
Tags: 顯卡

All Comments

Kelly avatar
By Kelly
at 2008-11-24T03:17
知識推
Belly avatar
By Belly
at 2008-11-29T01:05
專業!
Elvira avatar
By Elvira
at 2008-12-01T01:11
受教了 推一個
Queena avatar
By Queena
at 2008-12-04T06:06
厲害厲害 推一下~
George avatar
By George
at 2008-12-06T06:52
厲害
Lucy avatar
By Lucy
at 2008-12-09T15:53
真專業!
Lydia avatar
By Lydia
at 2008-12-10T13:42
不得不推@@"
Catherine avatar
By Catherine
at 2008-12-14T04:23
推電腦繪圖學 :)
Poppy avatar
By Poppy
at 2008-12-16T12:15
我真的看不懂 但還是要推
Rebecca avatar
By Rebecca
at 2008-12-21T08:09
請問原PO談的這些"電腦繪圖學"是什麼系所會開的課,好奇中!
Steve avatar
By Steve
at 2008-12-24T04:38
資工
Isla avatar
By Isla
at 2008-12-26T19:38
感謝!
Isla avatar
By Isla
at 2008-12-31T02:49
看不懂......可是還是要給推^^"
Kelly avatar
By Kelly
at 2009-01-04T23:35
你的箱子跟人物圖畫反了吧?
Harry avatar
By Harry
at 2009-01-05T23:58
看顯卡板 長知識
Lydia avatar
By Lydia
at 2009-01-09T05:15
不懂推....
Jessica avatar
By Jessica
at 2009-01-11T11:45
Damian avatar
By Damian
at 2009-01-14T16:39
所以強制開比較好囉..反正占的記憶體不算什麼y

RivaTuner 2.20 is out

Robert avatar
By Robert
at 2008-11-21T06:43
Main Page: http://www.guru3d.com/category/rivatuner/ Download: http://downloads.guru3d.com/RivaTuner-v2.11-download-163.html ...

nVIDIA GeForce Release 180.48 WHQL

Caitlin avatar
By Caitlin
at 2008-11-20T02:41
For XP http://www.nvidia.com.tw/object/winxp_180.48_whql_tw.html For XP 64bit http://www.nvidia.com.tw/object/winxp64_180.48_whql_tw.html For Vista 32bit ...

CUDA 程式設計(11) -- 速成篇(中)

Zanna avatar
By Zanna
at 2008-11-20T02:20
號外~~ BT 牌的國網光碟已經完成了, 感謝 b 君和 c 君幫忙 ^^ 種子下載點 http://www.badongo.com/file/12156676 請大家幫忙傳播~~~ ...

設定ATI24 34系列交火(crossfire)於ma78gm-s2h小觀念

Quintina avatar
By Quintina
at 2008-11-19T22:04
大家都知道 要設定crossfire需要2400或3400系列顯卡於780G主機板 然後在BIOS上面要啟動surround view 但小弟發現 要先使用and#39;內顯and#39;開機 再進去BIOS 啟動surround view 然後再重開機 再設定回顯示卡開機 不然如果一開始在and# ...

8.11 更新內容翻譯

Isla avatar
By Isla
at 2008-11-19T01:27
AMD在上週釋出催化劑8.11版,在產品支援列表中,新增了4550系列,但是並沒有看到4830,從官方網站選擇4830的驅動進行下載時,會跳到8.10的下載頁面,或許要等到8.11 hotfix出來後才會有支援4830。 此次更新增加了四個特點,也修正了許多之前一直存在的小毛病,詳細內容請看以下介紹 1.C ...