|
色彩深度(Colors and Depths)
近來玩家們爭論得最厲害的莫過于游戲中究竟要不要采用更高位數(shù)的顏色這一問題。其 中之一就是Voodoo 3與TNT 2孰優(yōu)孰劣的爭論(前者支持16位色渲染,后者支持32位色渲 染),那么是否就能立刻斷定TNT2的畫面質(zhì)量會(huì)比Voodoo 3要好呢?為了回答這個(gè)問題 ,我們必須先了解什么是顏色深度。 上面的這幅圖就是采用16位色進(jìn)行渲染的,我們可以注意到,在光環(huán)處有一層層明顯的 紅色向黃色過渡的色帶。這是什么呢? 我們知道,16位色能表現(xiàn)的最大顏色數(shù)為216次方=65 536種,在上面這幅圖中,因?yàn)樵?br>顏色過渡的地方使用的顏色超出了16位色所提供的范圍,因此在顏色過渡的地方就出現(xiàn) 了明顯的色階。為了避免這些情況的出現(xiàn),人們提出了更高的色彩深度標(biāo)準(zhǔn),24位色, 24位色能提供224=16 700 000種顏色。可以說,人眼能看到的顏色種類也就是那么多了 ,所以有人把24位色稱之為全彩色。更高的顏色深度能使圖像色彩還原更為準(zhǔn)確。因此 ,我們可以肯定的是,更高的色彩深度的確能提高圖像質(zhì)量。但問題是,24位色或更高 的32位色有一個(gè)明顯的缺點(diǎn),它所占用的存儲(chǔ)空間比16位色的要大--為了描述更多的色 彩,必須使用更多位數(shù)的調(diào)色盤,占用的存儲(chǔ)空間自然就增加了。因此,16位色也并不 是一無事處,至少在現(xiàn)今顯卡性能不高的情況下能大幅度提高渲染的速度。當(dāng)需要的時(shí) 候,你還可以進(jìn)行適當(dāng)?shù)奶幚韥慝@得更好的過渡效果,我們把這種處理稱為抖動(dòng)。 那么,這個(gè)16位、24位或更高的顏色深度是怎樣生成的呢?當(dāng)我們向一個(gè)像素填上色彩 的時(shí)候,我們使用的是通過按一定比例混合紅(R)、綠(G)、藍(lán)(B)三種顏色(RGB 三基色)來獲得所需的色素。應(yīng)該注意到,我們只能使用僅有的3種顏色來獲得其它的色 素,并且因?yàn)?6位中的每一位都僅對(duì)應(yīng)一種特定的顏色。當(dāng)我們使用的是第16位顏色, 也就是最后一位顏色的時(shí)候,我們發(fā)現(xiàn)并不能很清楚地把這種顏色劃分成三種顏色混合 的色素。16/3會(huì)出現(xiàn)小數(shù)位啊,因此,在實(shí)際中,色盤里是這樣劃分的。紅色占了5位的 空間,綠色占了6位的空間,而藍(lán)色占了5位空間。因此,如果我們認(rèn)真看看調(diào)色盤就能 發(fā)現(xiàn),綠色部分占的位置要稍大。 采用了32位色的渲染后,我們發(fā)現(xiàn)色階現(xiàn)象完全消失了,色彩過渡得非常平滑,因此, 我們可以確定,使用更高的顏色深度肯定能提升畫面品質(zhì)。但為什么在玩游戲時(shí)發(fā)現(xiàn)兩 者之間的差別沒有那么大呢?這是因?yàn)楝F(xiàn)有的游戲在制作時(shí)多是用16位色的原圖,因此 你在玩(重放)的時(shí)候,無論是使用16位還是32位色的渲染方式,得到的效果都差不多 ,但某些游戲已經(jīng)為了32位色做了充分的優(yōu)化,如果你有機(jī)會(huì)玩玩Motorhead這個(gè)游戲, 你就能很清楚的分辨出16位色和32位色的不同了。 阿爾法Alpha 32位色似乎讓人有點(diǎn)難以理解。照理說,32位色表示的應(yīng)該是2^32次方種顏色吧。但實(shí) 際上,32位色卻只和24位色一樣擁有同等數(shù)量級(jí)的色素。什么,它只擁有2^24次方種不 同的顏色?那么還有的8位顏色跑那里去了? 對(duì)于32位色來說,多出來的8位不是用來表示RGB顏色值,而是用來反映一個(gè)像素的alph a值,也可以稱為alpha通道值。通過對(duì)像素alpha值的確定,我們能夠表示一個(gè)像素的透 明、半透明、不透明或者在它們之間的那種隱隱約約的效果。也可以這樣說,alpha值是 用來反映像素透明度的一個(gè)指標(biāo)。使用alpha值能夠展現(xiàn)一些特殊的畫面效果,好像玻璃 ,水和爆炸效果。 如果一個(gè)像素被給定一個(gè)較低的alpha值,那么這個(gè)像素我們看起來就好像是透明的。反 過來,如果給它一個(gè)相當(dāng)高的alpha值,那么這個(gè)像素看上去就完全是不透明的了。在使 用中間值alpha通道的時(shí)候,就可以制作出好像有色玻璃的那種效果,如果你有用photo shop的話,應(yīng)該會(huì)經(jīng)常使用到這種效果的。 上圖是3D Mark99 Max Pro中的第二個(gè)游戲測(cè)試場(chǎng)景,看到圖中綠色的那部分嗎?這就是 用中間值的alpha效果做的??瓷先ゾ秃孟癖痪G色光照一樣。 alpha效果被廣泛應(yīng)用到光影效果十足的游戲兵人中,許多爆炸的光影效果就是這樣實(shí)現(xiàn) 的。但前提是,必須使用32位色渲染,否則驚人的alpha光影效果就不會(huì)出現(xiàn)。 抖動(dòng)Dithering 抖動(dòng),是一種用來"欺騙"人眼的著色法。它通過隨意地向色彩過渡地區(qū)添加模仿周圍像 素顏色的像素,從而掩飾低位數(shù)圖像因色彩深度不足造成的過渡色區(qū)一條條的色階現(xiàn)象 。 為了講得更清楚點(diǎn),我們假設(shè)你現(xiàn)在有兩個(gè)調(diào)開的水彩顏色,放在色盤上。兩種顏色中 間空出些位置?,F(xiàn)在,你要把兩種顏色混合起來,為了使兩種顏色不要區(qū)分得那么明顯 ,你大力抖動(dòng)色盤,這下好了,A顏色向B顏色靠了過來,B顏色也有點(diǎn)向A顏色端混過來 ,結(jié)果就在它們中間的地區(qū)混合起來形成一些由原來兩種顏色混合起來的過渡色,看起 來有一種很平滑的過渡過程,沒有了那種突變的感覺。 你看了下面的這幅圖就會(huì)明白了。 這幅圖,遠(yuǎn)處看,我們發(fā)現(xiàn)墻壁上的顏色渲染得很好,過渡得非常平滑?,F(xiàn)在我們把它 放大來看看。 我們可以發(fā)現(xiàn),渲染得很平滑的墻壁原來是由許多不規(guī)則顏色變化的小點(diǎn)組成的,如果 不是放得那么大,還以為是使用一幅高位色紋理的貼圖呢。通過抖動(dòng)處理,16位色的圖 像也能表現(xiàn)出不錯(cuò)的畫質(zhì)。我們發(fā)現(xiàn),Voodoo3這塊標(biāo)準(zhǔn)的16位色顯示芯片代表它采用特 別的抖動(dòng)算法,這個(gè)算法集成在新版本的驅(qū)動(dòng)程序中,通過設(shè)置Smooth選項(xiàng),Voodoo 3 幾乎能獲得與TNT 2在32位色渲染下的平滑圖像。 紋理過濾 在實(shí)際應(yīng)用中,對(duì)紋理進(jìn)行處理是很吃力的。雖然對(duì)固定大小的紋理,比如256*256紋理 來說處理起來很簡單,然而要把它貼到各種各樣的多邊型上,卻不是那么容易的事。有 沒有想過,當(dāng)經(jīng)過計(jì)算后,texel(特塞爾)要被放置到一個(gè)不能定位的地方,又或者是 計(jì)算出來的X或Y軸的值不是整數(shù)?你不能把texel放置在計(jì)算好的地方,因?yàn)槟阒荒芾L制 完整的點(diǎn)(這是最小的繪制單位了)。 Point Sampling(點(diǎn)取樣) 這時(shí)你不得不把texel繪制到離計(jì)算值最近的完整點(diǎn)上,這就叫做點(diǎn)取樣。由于使用了點(diǎn) 取樣,因此特塞爾只能取以計(jì)算值為中心最近的一些像素。然后,這個(gè)帶有相同特性的 紋理就會(huì)映射到像素上。不管怎么樣,這樣就導(dǎo)致一些超出范圍的像素明顯凸了出來, 畫面就出現(xiàn)了一個(gè)個(gè)"小格子"組成的情況。如果沒有采用一些特別的過濾方法,一條界 乎于兩個(gè)不同紋理之間的斜線邊緣就會(huì)出現(xiàn)鋸齒的現(xiàn)象,就是因?yàn)樵谶吘壣系南袼貨]有 被正確放置在原來計(jì)算好的位置上。 當(dāng)像素稍微超出自己原定位置的時(shí)候,雖然它們?nèi)匀徊捎谜_的顏色值,但我們假設(shè)它 超出的位置剛好是一片深深的藍(lán)色,而這一點(diǎn)超出的像素剛好是白色,那么它就很容易 被注意到了。另外,點(diǎn)取樣還有一個(gè)缺點(diǎn)就是像素會(huì)出現(xiàn)"微微發(fā)光"現(xiàn)象。下面是一幅 3D Mark99 Max的截圖,我們可以留意到圖片遠(yuǎn)處的像素點(diǎn)有些發(fā)光的現(xiàn)象,這是由于該 像素的值是僅從一個(gè)特塞爾上取值造成的。這種現(xiàn)象在運(yùn)動(dòng)的3D環(huán)境中更是明顯。 很明顯,在實(shí)際使用中單純使用點(diǎn)取樣不是辦法。想一想在DF的大混戰(zhàn)中,明明我是躲 在一棟建筑物后的,本應(yīng)該看不到我,但我腳的一個(gè)像素卻超出了范圍,露了出來,從 而把我隱藏的位置給暴露了(這樣打法不賠機(jī)時(shí)才怪)。所以,我們需要一些特別的方 法來處理這些錯(cuò)誤。 Bilinear Filtering(雙線性過濾) 雙線性過濾要比點(diǎn)取樣做的多一點(diǎn)。它以需要貼紋理的那個(gè)像素點(diǎn)為中心,而在相對(duì)應(yīng) 紋理中該點(diǎn)附近2*2范圍內(nèi)(即4個(gè))特塞爾的顏色值求一個(gè)平均值,然后使用這個(gè)"平均 的"顏色值做為需要貼圖像素的色值。通過使用雙線性過濾,兩個(gè)不同特塞爾之間的過渡 就可以更圓滑,不會(huì)出現(xiàn)在點(diǎn)取樣中出現(xiàn)的"格子"現(xiàn)象,但它同時(shí)帶來一個(gè)新的問題, 那就是經(jīng)過雙線性處理后的圖像會(huì)顯得有些模糊。如果你使用過photoshop就應(yīng)該知道了 。其中的blur濾鏡效果就和雙線性過濾差不多。 雙線性過濾是最基本的3D技術(shù),通常3D顯示卡都會(huì)提供這種過濾效果,并且都能在一個(gè) 時(shí)鐘周期內(nèi)實(shí)現(xiàn)。下圖就是雙線性過濾和點(diǎn)取樣的對(duì)比圖 從圖中可以看到,圖像經(jīng)過雙線性過濾后,點(diǎn)取樣中"格子"的現(xiàn)象都消失了,整幅圖中 像素過渡都很平滑,沒有發(fā)現(xiàn)明顯的越界點(diǎn)。然而,雙線性過濾也帶來了一個(gè)新的問題 ,那就是"深度變化"錯(cuò)誤。設(shè)想一下,按照正常的透視,當(dāng)圖像離我們?cè)竭h(yuǎn),那么圖像 看起來就越小。而貼到該圖像(像素)中的紋理也越小。造成紋理被壓縮了。結(jié)果造成 雙線性過濾中,離視點(diǎn)較遠(yuǎn)位置出現(xiàn)了貼圖錯(cuò)誤。很可惜,對(duì)于雙線性過濾來說,這是 固有的錯(cuò)誤,不可能避免和解決。 MIP mapping(組合式處理映射) 那么我們?nèi)绾蝸硇拚疃茸兓e(cuò)誤呢?答案是引入組合式處理映射技術(shù)。組合式處理映射 其實(shí)是用一組同一物品不同大小的紋理來提供給不同深度(大小)像素貼圖取值時(shí)使用 的。當(dāng)視點(diǎn)比較近的時(shí)候,像素點(diǎn)填充的顏色采用大塊紋理中的采樣值。當(dāng)視點(diǎn)越來越 遠(yuǎn)的時(shí)候,就選用越來越小的紋理來進(jìn)行取值。這樣我們就能獲得沒有因視點(diǎn)距離變化 而變形的圖像。 Level of Detail(LOD,深度等級(jí)) 深度等級(jí)的計(jì)算是用來確定哪種大小的Mipmaps(組合式位圖-紋理)要被貼到對(duì)象上。 深度等級(jí)能夠控制一個(gè)像素由幾個(gè)特塞爾映射而成的。還記得我們前面說的嗎?特塞爾 是組成紋理的最基本單位,當(dāng)一個(gè)紋理被用來做貼圖使用的時(shí)候,它甚至可以縮小為一個(gè) 點(diǎn)貼在像素中,換而言知,一個(gè)像素能夠是幾個(gè)甚至無限多個(gè)特塞爾映射而成的。如果 特塞爾映射到像素上的比例為1:1。那么LOD的值就為0。表示沒有等級(jí),這時(shí)就會(huì)采用最 大的紋理來進(jìn)行貼圖處理。而當(dāng)4個(gè)特塞爾映射到一個(gè)像素上的時(shí)候,比率為4:1。LOD此 時(shí)的值為1。系統(tǒng)就會(huì)采用小一號(hào)的紋理來進(jìn)行貼圖。當(dāng)比例不斷上升,用來貼圖的紋理 就越小,從而保證遠(yuǎn)近貼圖的變化成比例。消除了由雙線性過濾造成的深度變化這一錯(cuò) 誤。 可見,雙線性過濾,Mip mapping和LOD是一起使用的。 Trilinear Filtering (三線性過濾) Mip mapping雖然解決了雙線性過濾造成的深度變化錯(cuò)誤,但它又帶來了一個(gè)新的錯(cuò)誤, 那就是"組合交疊"現(xiàn)象。組合交疊現(xiàn)象發(fā)生在當(dāng)相臨的兩個(gè)地方使用了LOD級(jí)別不同的同 一塊紋理來進(jìn)行貼圖。兩塊不同大小的同一塊紋理接合的地方顯得非常不平滑以至于人 們很容易就能注意到這一區(qū)別。組合交疊錯(cuò)誤經(jīng)常出現(xiàn)在地板或墻壁上,因?yàn)樗鼈兺ǔ?br>是采用許多組大小不同的同一紋理貼圖而成的,看起來就會(huì)出現(xiàn)有的地方很清晰,但有 的地方很模糊的現(xiàn)象。 三線性過濾就是用來減輕或消除不同組合等級(jí)紋理過渡時(shí)出現(xiàn)的組合交疊現(xiàn)象。它必須 結(jié)合雙線性過濾和組合式處理映射一并使用。三線性過濾通過使用雙線性過濾從兩個(gè)最 為相近的LOD等級(jí)紋理中取樣來獲得新的像素值,從而使兩個(gè)不同深度等級(jí)的紋理過渡能 夠更為平滑。也因?yàn)槿绱?,三線性過濾必須使用兩次的雙線性過濾,也就是必須計(jì)算2× 4=8個(gè)像素的值。對(duì)于許多3D加速開來說,這會(huì)需要它們兩個(gè)時(shí)鐘周期的計(jì)算時(shí)間。也就 是說,對(duì)于某些3D加速卡來說,使用三線性過濾幾乎會(huì)使性能下降一半! 各向異性過濾Anisotropic Filtering 各向異性過濾是近來才提出的新型過濾方法。各向異性過濾的實(shí)現(xiàn)方法有點(diǎn)"變態(tài)",它 需要對(duì)映射點(diǎn)周圍方形8個(gè)特塞爾甚至更多的特塞爾進(jìn)行取樣,然后獲得平均值映射到像 素點(diǎn)上。對(duì)于許多3D加速卡來說,采用8個(gè)以上特塞爾取樣的各向異性過濾簡直是要了它 們的命。因?yàn)樗鼈兏静荒芴峁┳銐虻南袼靥畛渎使┙o各向異性過濾使用。對(duì)于3D應(yīng)用 ,特別是3D游戲來說,各向異性過濾是很重要的一個(gè)功能。這是因?yàn)椋螒蛑械奈矬w有 大部分的時(shí)間不是與我們平行的。 各向異性過濾到底是做什么的呢?如果有一個(gè)多邊型,它的一個(gè)面剛好與我們的視線垂 直,那么根本就不用各向異性過濾。當(dāng)視點(diǎn)漸遠(yuǎn)的時(shí)候,Mip mapping就會(huì)使用更小的紋 理來進(jìn)行貼圖。但在大多數(shù)情況下,我們的視線卻與多邊型有一定的角度。這些有角度的 多邊型就會(huì)出現(xiàn)型變,從而引起畫面失真,各向異性過濾就提供了解決方案。 每一輪的3D顯卡大戰(zhàn)的征兆都大同小異:在這段時(shí)期內(nèi)各家顯卡芯片研發(fā)大廠通常都保 持神秘姿態(tài),半遮半掩地發(fā)布一些連名字也沒有確定的圖形芯片規(guī)格。很感謝這次的游 戲開發(fā)者年會(huì),我們得以掌握這些次世代顯示芯片的詳細(xì)規(guī)格:表1 規(guī)格終究是規(guī)格,在實(shí)際發(fā)布的時(shí)候,通常會(huì)使我們大失所望,不是規(guī)格縮了水,就是 性能沒有達(dá)到期望的等級(jí)。我們上表中的G450現(xiàn)在還不能確定它的真實(shí)運(yùn)行頻率,而是 根據(jù)Matorx早前公布的G450將會(huì)使用G400 MAX核心,再加上使用.18微米工藝生產(chǎn)而成, 因此估算其將會(huì)運(yùn)行在200MHz。而S3&Diamond的GX4-C我們是按它沒有在Savage2000(V iper II)上增加渲染通道估算出來的性能值。另外我們還預(yù)計(jì),在這些新一代的顯示卡 中,一種新式的顯存即將被廣泛采用,例如DDR FCDRAM,但到目前為止它究竟是什么東 西我們還沒弄清楚,但我相信在將來的顯示卡中它將會(huì)被大量采用。 那么現(xiàn)在讓我們來詳細(xì)看一下這些次世代顯示卡帶來了什么新的東西,3D性能和表現(xiàn)力 將會(huì)被提升到一個(gè)什么樣的新臺(tái)階。 |
|
|