入門基本概念-摘錄

converse
HeavenPR MM 原創作品集(Elfin整理)

HeavenPR(簡稱HPR),一個來自新西蘭的1x歲中國留學MM(據傳上有天堂下有蘇杭纔會出產此等PLMM ^^/)爲GZeasy.com論壇寫的"圖形加速技術基本原理雜錦”。此外,HeavenPR還爲Gzeasy編寫了兩個圖形卡測試軟件——FillrateBenchmark 2004 和Virtual Shading Studio。

BTW:此人身份極之神祕,以上其個人資料尚未得到證實。。。另此人專業知識及灌水之強實在令本人汗顏(55555555)

-------------------------

圖形加速卡技術論壇:1.入門篇--圖形加速之 圖形

(發表於GZeasy.com: Jul 20 2003, 04:14 PM)

來了這麼久,也對這裏的朋友有了一個大概的瞭解。

恕我羅索一兩句,這裏的名字是“圖形加速卡技術論壇”,可是情景完全不是這樣啊。選購,改卡,甚至遊戲也是技術,我倒不說什麼,可是n 多人在這裏說些完全沒有關係的話題,或者讓人看了完全摸不着頭腦的東西,給我們留下不好的印象。

總的來說論壇裏的朋友也有幾個對軟件,硬件和編成比較在行的人,從他們的一言一行中我們也能察覺出來。可是絕大多數用戶,雖說是電腦愛好者,可是可能由於對電腦的各個方面接觸不很多,不很廣,所以總是來問一些重複的,基本的問題。有的朋友甚至連顯卡是幹什麼用的也不很清楚。鑑於此,我抽了一些時間,來寫這篇文章,稍後可能還有什麼 中級篇,高級篇,xx 級篇(!) 啦等等的推出,主要的目的是給廣大的硬件愛好者指點一下迷津,也考驗一下我 8 年的電腦知識經驗。如果有說的不妥當的地方,大家可以指正出來,我肯定虛心接受。

還有,這篇文章是我自己寫出來的,其中的部分可能會參考一些有意義的文獻,不過我會標明的。我平時說話,回貼都懶懶散散的,不過這個學術說明之類的東西,我會盡量謹慎用詞。在這裏呢,我不想把大家帶回到古代,從頭開始溫習電腦的發展史,因爲我對電腦發展史,不好意思地說,也學的很差。還有,謝謝大家捧場來看嘍!

正題:入門篇 ---- 圖形加速 之 圖形

首先,我們先來咬文嚼字:圖形加速卡。就是用來加速圖形處理的一張擴展卡。所謂的圖形處理是什麼呢?純文本時代的電腦,那一行一行的命令和文字,不叫圖形處理。:-P 圖形和文本是電腦輸出給人們“看”的兩樣東西。

一、文本,被遺忘的時代

真正的文本處理呢,很不幸在 DOS 之後已經被完全淘汰了。所以沒有什麼“文本加速卡”之流的東西,是因爲現在的顯卡,即使完全沒有文本處理的功能,也能在 Windows 下正常的工作。到這裏,也許有人要問了:Windows 裏的文字,不是“文本”嗎?答案是:對你來說,它是。可是對電腦來說,它就不是文本了。Windows 裏的文本,也是圖形。那些文字是被 Windows “畫”出來的。打開控制面板裏的“字體”,你看到了什麼?種類繁多的字體是吧。這些都不是存放在顯卡里的,而是在硬盤上。當 Windows 接收到在窗口上打印一行字的命令的時候,它會調度“畫”字程序,從硬盤裏讀出字體,然後畫到屏幕上來。現在就明瞭了:Windows 的界面是完全基於圖形的。所以圖形加速卡對於 Windows 來說是十分重要的。好了,現在,讓我們忘掉“文本”吧!

二、圖形的定義,像素及其他

再來看圖形的定義。圖形在 電腦裏有兩種截然不同的定義。第一種叫 光柵圖形(Raster Graphics),第二種叫 矢量圖形(Vector Graphics)。所謂的“光柵圖形”,每個電腦玩家都有廣泛的接觸。你現在打開 Windows 的“畫筆”程序,隨便畫幾個圓,幾條線,圖幾塊色,然後把你得圖放大 8 倍(這個不用我指導你做吧?!) 你看到了什麼?是不是由一個一個的小方塊組成了你的圖形?每一個小方塊,被稱作一個像素“Pixel”。也就是說,你的圖形是有小小的像素們組成的。

盯着一個像素,你發現了什麼?對了!一個像素只有一種顏色!( #%@#%^@)。而懂一點色彩學的人,都應該知道,光是由 紅(Red) 綠(Green) 和 藍(Blue) 三種基色以任意比例組合而成的。這圖形裏的一個像素,也是由 紅,綠 和 藍 組成的。在最爲廣泛的電腦圖形之中,每一個原色,由 八個 0 或 1 的二進制數,也就是 8 位組成,也就是每種顏色的表現能力爲 2^8 = 256 種,稱之爲“色階”。學過統計嗎?每個原色 256 種色階,那麼 R/G/B 三種原色的表現能力爲多少種顏色?……… 你在翻高中數學書?咳,算了,還是我告訴你吧。要把它們乘起來。結果是 256 x 256 x 256 = …. 16777216 種。哇?!這麼多?好,讓我們用電腦習慣的千進制來吧它分開:16,777,216 = 16M。這就是人們常說的什麼 16兆色啦,真彩色啦等等。

這裏來一點插曲。如果一種染色佔 8 位的話,那麼 R/G/B 總共佔 8 + 8 + 8 = 24 位。可是 24 位對現在的 32 位的電腦系統來說,是一個很不舒服的長度。應爲 24 位對於電腦一次處理的 32 位來說,太小,可是一次處理兩個 24 位,又超出了 32 位的處理能力。怎麼辦?只能在 24 位的顏色後面,再補上 8 位的空數據。這樣一來,一個像素的顏色將佔用 32 位,正好和 32 位系統的處理能力相應。這樣處理起來就舒服多了。“空數據?你的意思是說每一個像素要浪費 8 位數據?”答案並不是肯定的。最後的 8 位雖然在圖形的顯示上沒有作用,可是由於這裏多了 8 位,人們總要想辦法充分利用現有的資源的。所以另一個概念被加入到了像素裏:透明度。也就是大家耳渲目染的像素Alpha 值。用原本沒用的 8 位來保存 Alpha,不錯的創意吧。這樣,我們就可以根據像素的透明度,來把一個像素和另一個像素混合,做出重疊的效果。這就人傳說中的 Alpha 混合 特效 呵呵。挺簡單的吧。到這裏,我們用比較專業的格式來表達一下最常用的像素:R8G8B8A8。 哇,什麼?好,拆開看:R8, G8, B8, A8 也就是 紅 8 位,綠 8 位,藍 8 位,透明度 8 位。用來唬人蠻不錯的啊~

光柵圖形就介紹到這裏的。接下來該另一個英雄登場:矢量圖形。別小看了它,現在的 3D 圖像基礎可是有很大一部分是基於它的。

光柵圖形是一個一個的點,而矢量圖形是什麼呢?其實也是一個一個的點,不過還有數學公式。這樣講:如果說光柵圖形是告訴電腦在每個點畫什麼顏色的話,那麼矢量圖形就是教給電腦該怎麼樣畫一個圖形。比如一個圓。如果用光柵圖形來表示,那麼就要有一大堆的像素,來描速在圓所在的區域裏,每個點的顏色。而用矢量圖形來表示:它是一個圓,圓的圓心,圓的半徑(可能還有圓的顏色)。就這麼簡單。在電腦畫這兩張圖的時候,做的就是截然不同的工作了。畫光柵圖的時候,電腦把所有的像素數據讀出來,然後原模原樣的 Copy 到顯示緩存,這樣我們就在屏幕上看到這個圓了。而畫矢量的圓,完全不同了:首先,電腦要確定圓的圓心,半徑,然後找到這個圓將落在屏幕的哪一片區域。這個很重要的一步,叫做 設定(Setup)。找到了圓所在的屏幕區域之後,就可以用指定的顏色來填充這個區域了。這一步叫 光柵化(Rasterize)。圓所在的區域被填充了出來,我們就自然而然的看到這個圓了。

這個呢,就是電腦圖形的初步基礎。要牢記 光柵圖形,矢量圖形的定義,以及矢量圖形的畫法。籠統地說有兩步,就是 設定 和 光柵化。這在以後的 3D 圖形知識部分很重要。

好了,一口氣寫了這麼多,我先歇會兒。大家慢慢消化消化啊。還有哪裏不對一定要說出來。

(原文出處:http://bbs.gzeasy.com/index.php?showtopic=35024&view=findpost&p=413893

-------------------------

圖形加速卡技術論壇:2.原理篇--圖形加速之 加速

(發表於GZeasy.com: Jul 20 2003, 06:38 PM)

回顧:上一篇,我給大家簡單的介紹了一下什麼是圖形,圖形有幾種類型,以及它們的畫法,大家能記的起來嗎?

正題:原理篇 ---- 圖形加速 之 加速

很久以前,繪圖工作全部是由我們偉大而神聖的 CPU 來完成的,那時候的顯卡,就是真正意義上用來“顯示東西的卡”。它的工作就是把 CPU 處理好的數據“搬”到顯示器上來。那時候 CPU 的工作可真是辛苦。現在好了,CPU 越來越快,可是做的工作卻越來越少了。我先來說說圖形加速的幾個階段。2D 圖像加速,Windows 加速 和 3D 圖像加速。

一、簡單死板的 2D 加速

2D 加速,是早就有的產物了。它的作用是用 顯示芯片 來代替 CPU,整塊整塊的移動顯存裏的數據。比如,你要移動一個窗口,在沒有 2D 加速的時代,CPU 所作的工作:1、找到窗口在顯存中的地址,2、把一行數據拷貝到目的地址,3、重複 2 直到拷貝完所有的行。完成。這樣一來,當窗口很大的時候,CPU 要處理的數據量就會成倍的增長,導致窗口的移動比蝸牛爬還慢…. 想體驗一下嗎?好,進入設備管理器,把你的顯卡驅動刪掉,然後重起…. 好好享受啊!呵呵

有了 2D 加速呢,CPU 所做的事,減輕了很多,不過還是要指導 顯示芯片 來幹這搬運工的活。CPU 的工作:1、找到窗口在顯存中的地址,2、給 顯卡發送 “拷貝這一行到目的地”的命令。3、重複 2 直到拷貝完所有的行。初看起來好像和沒有加速以前差不多,可是第 2 步就是關鍵所在哦。

現在讓我們把第二步分解來看:沒有 2D 加速:1、讀 32 Bit 數據(入門篇裏的哦!),把這 32 Bit 數據寫入目的地。2、重複 1 直到一行所有的像素被處理完。而有了 2D 加速後的工作只有:1、發送命令讓顯卡去拷貝這一行。這樣看來,2D 加速確實能很大程度的釋放 CPU 的負擔。所以大家現在隨便提起一個窗口移動一下,很平滑不是嗎?顯卡負責了窗口的移動。

二、詭異的 Windows 加速

Windows 對於每位 PC 程序員來說,都可以用“詭異”二字來形容。Windows 有太多專有的東西,以至於顯卡也要爲 Windows 本身制定一套加速計劃。擁有全部的 Windows 加速功能的顯卡幾乎沒有,而且現在的 CPU 的速度足以彌補 Windows 沒有全部硬件加速的缺陷。總的來說,包括 鼠標光標的加速,圖標的加速 和 特別的窗口加速等等。

鼠標加速就是用顯卡的硬件來處理 Windows 的鼠標光標。大家現在看到的鼠標光標 和桌面上的其他內容其實不屬於同一個層。是畫在顯卡單獨劃分出來的“頂層”裏的。具體的內容也就不用太詳細的介紹的,總之我告訴大家一個辨別的方法。打開一個動畫窗口,也就是內容一直在變動的窗口,然後把鼠標光標移動上去。如果光標不斷的閃動,那麼顯卡沒有給鼠標光標加速。反之如果鼠標光標紋絲不動,那麼顯卡給鼠標光標加速了。

圖標的加速,就是顯卡來畫 Windows 圖標的功能。這個功能真是少只又少,不過對於目前 Windows xp 慣用的 32Bit 透明圖表,現代的圖形加速卡能起到一定程度的加速功能。

特別的窗口加速:窗口加速不是用 2D 加速功能來處理嗎?有什麼特別的?當然有。移動一個窗口,嘿嘿,現在你知道電腦在做什麼。可是,當一個頂端窗口擋在你移動的窗口上面的時候,也就是一個“總在最前面”的窗口(Windows 定的稱呼) 擋在桌面,而你在它的下面移動一個窗口….. 怎麼樣,解釋不了了吧!? 這個時候,Windows 要做的事就稍有不同了。它首先找到窗口露在外面的部分,然後這樣把整個窗口分割成一個一個的小塊,再一個一個移動它們到目標位置。是不是比較麻煩?而如果用有 Windows 加速功能的顯卡來做,顯卡自己就可以處理這一切了。Windows加速就講這麼一點吧,因爲它太龐大了,我都沒有全部弄清楚。那麼接下來,該我們的主角出場了 ------

三、複雜龐大的 3D 加速

人人都喜歡渲染 3D 動畫(一看就頭暈的除外)。看到虛擬的主角在屏幕上跳來跳去,殺來殺去,拯救世界,誰不激動啊!說起 3D 加速,由於它太複雜了,我準備分 5 個部分來講,涵蓋從簡到繁,從過去到未來的 3D 加速基礎知識,好讓大家能多瞭解一點我們默默無聞的 3D 加速卡們的工作。

3.1: 彩色三角形

世界就是這樣開始的。人們想到了用三角形來表示 3D 的物體。其實很簡單,學過高中幾何的同學都知道,三點確定一個平面。所以三角形永遠都是平面的。這樣一來,複雜的曲面物體被近似的用小的平面來表示,在繪畫上面會方便很多。來看畫一個三角形的過程:前面的文章我已經講了繪製矢量圖的過程。其實一個三角形也相當於一個矢量圖。它由三個頂點組成。而繪製的過程一樣有兩步:1、找到三角形將會坐落在屏幕的哪個地方。2、用顏色填充這個地方。也就是我提到的 設定(Setup) 和 光柵化(Rasterize) 的過程。而由於對象是三角形,我們給這兩個過程另起名字叫做:三角形設定(Triangle Setup) 和 三角形光柵化(Triangle Rasterize) 過程。呵呵,有點兒現代圖形學的意思了吧!一開始的 3D 圖形,只有顏色,沒有現在人們所說的貼圖啦,紋理啦等等,所以生成的圖像都是光突突的感覺。那個時候根本還沒有出現 3D 遊戲的概念,而專業人士是不會在乎這些的……

3.2: 貼圖?皮膚… + 顏色混合

人們顯然不會滿足永遠看着光禿禿的三角形組成的東西在屏幕上亂跳。於是慢慢的有人想到:我們給三角形貼上紋理貼紙怎麼樣?說起紋理,看看你家裏的傢俱,它們表面的木紋啦什麼的,還真的和三角形用的紋理貼圖有點相似之處呢!紋理貼圖在 3D 圖形領域所扮演的角色,和現實家居里的牆紙,貼紙確實功能差不多。而當時在紋理貼圖發明的初始時間,還有人強烈的反對它呢!有人認爲紋理貼圖是沒有用的東西,以至於那段時間有公司竟然出品過不支持紋理貼圖的顯卡(沒有 TMU 的顯卡,你能想象的出來嗎?公司的名字我忘了)!不過紋理貼圖還是顯示出了它強大的魅力。現在的 3D 圖形技術裏,紋理貼圖也算是單獨的一門學問了。

有人會問,紋理貼圖怎麼貼到三角形上去的?這個過程的解釋比較複雜,你可以試着想象:紋理貼圖需要座標來指定,就像你在剛剛做好的桌子上畫上定點,讓貼紙對齊定點貼上去一樣。也就是說,每個三角形的頂點都包含有貼圖座標,這樣處理的時候就能按照貼圖座標把紋理貼圖貼在對應的位置。怎麼貼?!我還沒有講?哦,對啊,呵呵,怎麼貼呢?是這樣的:在三角形設定的階段,貼圖座標也被應用到了每一個像素上。具體的說,知道了頂點的貼圖座標,那麼三角形內任一一個點的貼圖座標也應該能計算出來吧?!對了,是插值。利用插值,我們可以得出要畫的三角形所在像素的每一個點所對應的貼圖座標,不是嗎?有了這個貼圖座標,就簡單多了。我們利用座標,到貼圖裏去取對應座標顏色來,不就把圖貼上來了嗎?呵呵,這段有點繞,也怪我的文字表達能力欠佳,大家仔細多看幾遍吧,不好意思啊!

還有,伴隨着紋理貼圖而來的顏色混合,也應該歸到這一節。顏色混合…. 我知道!不就是用像素的 Alpha 值來把兩個像素運算混合成爲一個像素嗎?對了!不過顏色的混合不是僅限於 Alpha 混合。還有很多種混合方式。比如把三角形像素的顏色 和 屏幕上原有像素的顏色 加起來,這樣看起來,三角形所在的地方像是被“加亮”了一樣。遊戲中的火焰啦,光環啦,等等,就是用了加法來完成的。同樣,把兩個像素的顏色相減、相乘 或 相除 也未嘗不可,這一切就是 – 顏色混合。正因爲有了顏色混合,各種酷炫的遊戲特效才能實現。

3.3: 顯卡的革命

上面所說的功能,人們早就把它們做到一些顯卡芯片裏了。這樣一來,這些所有的工作,都被從 CPU 裏解放了出來。好啊!可是 CPU 還是不知足:I want more freedom! 人們想盡方法把 CPU 的負擔減輕。所以,最後,就連 三角形設定,三角形光柵化 過程之前的 潘多拉盒,也被解放了出來。這就是:幾何變換 和 光照運算(Transform & Lighting, T&L)。

說到這裏,就不得不講一下這兩個純數學的過程。幾何變換:大家都知道,我們在屏幕上看到的 3D 圖形,是以某一個視點爲觀察點繪製的。這是怎麼完成的?還有,3D 物體如何在整個場景裏移動?這就牽扯到了圖形處理之前的話題:3D 空間幾何。每一個 3D 物體都有一個說明其位置,方向的數據陣列,我們把它叫做 矩陣(Matrix)。這個矩陣儲存了物體在場景裏的位置,旋轉方向,縮放大小等等的信息。所以在物體移動的時候,我們不細要更改所有三角形的位置,僅僅修改 矩陣 裏的信息,整個物體就一動了。而 矩陣的應用不僅如此。最後要把整個場景變換成一攝像機爲中心的 3D 空間,這個過程也和 矩陣有關。

光照,另一個數學過程,就是用來通過三角形的頂點相對於場景中光源的位置,距離,夾角等等來計算這個三角形接受到光照的強度的過程。

以前,這兩個純數學的過程,需要 CPU 來完成。CPU 計算完所有的三角形數據後,把這些數據發送給顯卡進行 設定 和 光柵化的過程。可是後來,人們發現,這些運算是如此的死板,以至於可以把它也集成到 顯示芯片裏來做!這就是硬件幾何變換的由來。

所以,到此,CPU 需要做的已經沒有什麼了。修改一下物體的 矩陣,設置好需要的參數,然後給 顯示芯片 發送命令:畫吧!剩下的全不用操心……

3.4: 新 CPU 的誕生:GPU

那麼到此顯示芯片就可以稱作 Graphics Processing Unit 了嗎?nVidia 是這麼說的,可是作爲一個真正的處理器,沒有可編程性的話,也是殘缺的。在用膩了顯卡設好的層層套套之後,程序員們大聲疾呼:還我自由!他們迫切需要一種打破現在硬件死板功能的設計。因爲一切都由硬件完成了,所以靈活性完全喪失了。顯示芯片只能按照電路設計來處理三角形,成了一個呆板的“三角形處理機”。這個時候人們開始反省了,人們覺得給程序員最大的自由度讓他們發揮纔是寫好的 3D 程序的關鍵。所以 – 可編程圖形芯片 被設計了出來。這種芯片和以前的 T&L 芯片的最大不同之處在於:它的所有行爲都是可以被編成的。使得它的功能被提升到了無限的高度。

反過來想想,當時沒有硬件 3D 加速的時候,一切都是 CPU 完成的,雖然慢,但是很靈活。然後,全部硬件化了,靈活性也一降再降。到最後,可編程圖形芯片 把速度和靈活性一起實現了。這時程序員所做的事,似乎回到了原始時代:自己寫程序對三角形做 光照,辦換,和光柵化。不過這又怎樣呢?他們喜歡自由!

一切都很好,我們很高興的說:這纔是我想要的。很滿足不是嗎?可是事實並不像你想象的那樣完美,上帝愛捉弄人……..

3.5: 真理?謬論?

發展了這麼多年,光柵化的 3D 圖形可以說是技術很成熟了。不過它所生成的圖形,好像永遠都不那麼真實。即使人們盡再大的努力,它的畫面始終還是動畫,和人們心目中的“電影級別的畫質”總是差那麼一點……

究竟哪裏錯了?與此同時,3D 圖形學的另一門分支:光線追蹤圖形學(Ray-Tracing) 也在快速的發展着。光線追蹤圖形學 與 光柵化圖形學 是建立在完全不同的理論基礎上的,它們的研究成果也是格格不入。而 光線追蹤圖形學 的理論基礎是以眼睛爲出發點,追蹤每一條光線,精確的計算這些光線經過反射、折射和散射等等隨後的顏色。這門學問由於原理及其複雜,所以研究的人力物力都比光柵化圖形學要少,以至於到現在它的優勢剛剛慢慢顯現出來。而它真正的投入到民用、實時處理的階段,恐怕還要十年左右的發展。而如果它成功了,現在一切的 光柵化圖形學 理論,就會被全部推翻。

究竟誰會得到最後的殊榮?我們拭目以待….

後記:寫完這篇,我才驚奇的發現,原來人類的每一方面的發展史,都是那麼的神奇,充滿神話與機遇。作爲一個圖形學的研究者,我在看到了未來的喜悅的同時,也對人類的進步發出了深深的感慨….

(原文出處:http://bbs.gzeasy.com/index.php?showtopic=35063&view=findpost&p=414520

-------------------------

圖形加速卡技術論壇:3.進階篇--顯卡的職責

(發表於GZeasy.com: Jul 21 2003, 03:20 PM)

圖形加速卡技術論壇:進階篇 ---- 顯卡的職責

回顧:原理篇裏,我簡要的講了一下圖形加速是什麼,顯卡是怎麼給圖形處理加速的,以及長長的 3D 加速發展史。其中 3D 加速的 5 個階段都是里程碑式的,希望每個圖形愛好者都能瞭解一下。另外,網友們在後面提到了“輻射度”(Radiosity) 渲染的概念,這個概念也是 3D 圖形學裏的另外一個分支。它的原理與 Ray-Tracing 又有很大的不同之處。這樣最後的技術競爭將會更加的激烈…

正題:進階篇---- 顯卡的職責

如果要從頭開始講光柵化圖形學的一切,不僅我寫不完,也不可能寫完。因爲我的知識也是有限的,我只能把我認爲現階段主流,有用的知識寫出來。學習呢,要抱着開放的心態,即使明天你所學的知識被判死刑,也不要覺得自己沒有用了,因爲學習的過程中所得到的經驗,將使你更快的學到新的知識。今天,我們來講 3D 加速卡的圖形處理過程。

在前面的“原理篇”中,大家也應該知道 3D 圖形處理需要經過的 4 個階段了吧,快想!看你能不能在我之前把它們說出來 …… 對了,它們是:

一、幾何變換(Transform)

大家知道,3D 物體是由三角形組成的。每個三角形呢,有三個頂點。而只要把這三個頂點的位置移動了,那麼這個三角形也就自然跟着移動了(%$%$$#&%$#)。所以,幾何變換所對應的處理對象就是頂點(Vertex)。大家想一想,一個物體在 3D 空間能做哪些動作呢?最基本的應該有:平移,旋轉,縮放,扭曲,投影 等等… 具體的過程以及運算呢,我想學過大學的線性代數的朋友應該很清楚,我不想在這篇裏談的太深,所以,大家只需要把幾何變換看成一個黑盒子,左面輸入未經處理的頂點,右邊輸出處理好的頂點。具體的過程,大家可以在網上查找一下 矩陣(Matrix) 的操作。

矩陣具有特殊的性質,它可以把通過相乘把所有的變換組合成一個單一的矩陣。也就是說,比如 T1 是平移,T2 是旋轉,T3 是縮放,那麼 T’ = T3 * T2 * T1。這樣,T’ 就是把一個物體先平移,然後旋轉,最後縮放的矩陣。這個特性非常的重要,它爲計算機圖形處理節省了大量的工作。

在幾何變換之後,還有一個工作要做,那就是 裁剪。簡單的說,裁剪就是把物體落在屏幕外面的部分去掉,這樣就不需要處理看不到的東西,從而節省了處理量。

二、光照(Lighting)

說起光照,這裏就必須提一下頂點的另外一個元素:法線。法線就是垂直於平面的一條線。當頂點要被光照處理的時候,頂點的法線參與了很重要的過程。有人會問:要法線幹什麼?既然法線是簡單的面的垂線,那麼我們根據面來計算不就可以了麼?答案是:這樣做太慢了,而且一個頂點在很多時候會被很多不同的三角形所共用,這樣處理的過程就會更加複雜。所以每個 3D 模型,都應該有預先計算好的法線。到這裏,我們認識到了頂點所擁有的 3 個特性:位置,法線 和 – 貼圖座標。什麼?不知道貼圖座標是什麼?回去溫習我的第二篇文章!呵呵

光照的數學模型可謂變換萬千。在利用了新的 GPU 的可編程處理特性之後,人們儘可以寫出無窮的光照效果。這裏我將舉最最簡單的一個光照模型爲例子。要是大家覺得不夠,可以到網上搜索以下“3D圖形學 光照”,我保證你能被光照知識餵飽。首先,我們要得到光源的方向。假設場景裏有一個太陽,那麼它的方向爲 L。頂點呢,有法線 N。我們要得到光照的強度,只需要做點乘:C = L ? N。這麼簡單?!就是這麼簡單。點乘的結果就是光照的強度。試試看……可是當你試過之後,你會發現,當法線面向光的方向的時候,計算的結果卻是負的… 看來一定出錯了。是這樣的,應爲我們要根據法線和光線的夾角來近似計算光照的強度,所以光的方向要被反一下,這樣的點乘,得到的纔是夾角的關係。所以,我們來改正它:C = -L ? N,而且當運算結果爲負的時候,表明方向背向光源,這個時候,用全黑來表示吧!好了,最簡單的方向光模型已經誕生了!恭喜 恭喜 呵呵

以上兩個過程(幾何變換和光照啦!) 在第一、二代的顯卡里,是由 CPU 來完成的,在第三代的顯卡里呢,則是由固定的硬件完成的,我們稱之爲 Hardware T&L 顯卡。而在第四代的顯卡里,就是由可編程的幾何流水線來完成了。也就是現在流行的 Vertex Shader 單元。

三、設定(Setup)

這個過程比較簡單,而且很死板。所以即使最新的 GPU 也不把這個功能開放給程序員,而是固定的完成的。就是,給了三角形的三個頂點,我是說經過 幾何變換,裁剪和光照 的三個點,把它們落在屏幕上的位置給找出來,當找到位置時候,就可以進行下一步 ---- 填充這個三角形了。這下一個過程,就是傳說中的 Pixel Shader 的重頭戲:

四、光柵化(Rasterize)

找到了三角形在屏幕上的位置,也就是像素羣,我們就可以開始把它畫出來了。基本的工作有三個:一個就是按照貼圖座標(Again…) 去紋理貼圖裏讀到顏色數據(Texture Reading)。第二個是把讀到的數據和前面算好的光照強度進行一系列的運算,得到這個像素的顏色(Texture Blending)。而第三個,就是把它和屏幕上當前像素的顏色進行一定的處理,然後畫到這個像素上(Alpha Blending)。

在以往的顯卡里,這三個過程是固定而順序進行的,也就是說,顯卡先用前面的週期讀取紋理貼圖數據,在以預先設定好的方法之一進行貼圖的混合,最後同樣用預先設定好的方法把新的顏色和屏幕當前像素的顏色混合起來,最後寫到屏幕上。而按照這種方法,給顯卡的像素渲染管線配備一個以上的貼圖單元,就可以成倍的提高第一個過程的速度。比如著名的 GeForce 4 Ti 系列顯卡,它的每條像素渲染管線配備了兩個貼圖單元,這樣,當三角形要用到兩層貼圖的話,GeForce 4 Ti 在一個週期內就可以把兩張紋理貼圖的數據都讀取到,而相反 Radeon 9000 系列顯卡因爲只有一個貼圖單元,所以要花兩個時鐘週期才能讀到兩層紋理貼圖數據。事實也是這樣的,GeForce 4 Ti 系列顯卡在運行現有的多貼圖的遊戲時,速度非常的快。

而自從 GPU 誕生以來,可編程的流水線的靈活性就被完美的顯現了出來。用來處理像素的單元,在 DirectX 裏叫做 Pixel Shader 單元。但是爲了兼顧以前的顯卡架構,Pixel Shader 的第一個版本 1.x 在制定的時候,需要 Shader 代碼還是按照傳統的流程執行,也就是貼圖讀取在先,貼圖混合在後,最後顏色混合。這樣靈活度還是很低的。在 Pixel Shader 第二個版本,也就是 2.0 的制定過程中,人們意識到了靈活的重要性,所以第二版本的 Shader 將可以把貼圖讀取和顏色混合過程混起來執行。其中的一個例子就是:環境反射貼圖。它的計算過程是這樣的:從第一張貼圖裏讀取頂點法線的偏移量,對當前的法線進行偏移,然後用偏移後的法線來讀取第二張貼圖。大家都能看出來,在兩次貼圖讀取之間,有運算的過程。這樣用 Pixel Shader 2.0 寫起來很方面,可是 Pixel Shader 1.1 就是很困難的事情了,即使能實現,整個過程也顯得很不透明。

在上面的情況下,流水線的第二個貼圖單元會被浪費,因爲讀取這兩張貼圖,同樣花了兩個週期,第二個貼圖單元沒能起到加速處理的功能。在這個前提下,例如Radeon 9700 的設計就體現出了靈活的方式,它只用一個貼圖單元,卻有兩倍於上代顯卡的像素處理流水線,能在保持性能的前提下,儘量減少不必要的晶體管浪費。

好了,四個過程就到這裏了,我們來總結一下:

頂點 進入顯卡的處理管道 => 幾何變換 => 光照 => (裁剪 =>) 設定 => 光柵化 => 屏幕上的像素

怎麼樣,是不是直觀明瞭?大體地說 光柵化圖形 的處理方法就是這樣的。其實每一步又都有很多詳細的內容,我將在後面的章節裏慢慢的講嘍

下次再見~~

(原文出處:http://bbs.gzeasy.com/index.php?showtopic=35274&view=findpost&p=417598

-------------------------

圖形加速卡技術論壇:4.拓展知識—顯卡的接口和功能

(發表於GZeasy.com: Jul 22 2003, 05:06 PM)

圖形加速卡技術論壇:4.拓展知識—顯卡的接口和功能

回顧:“顯卡的職責”裏,我重點的給大家介紹了一下顯卡作爲 3D 加速卡時的工作流程,與每個流程的大概功能。我們再來回顧一下有哪四個過程:幾何變換,光照,設定 和 光柵化。對了,在幾何變換後面,還附加有裁剪。這就是光柵圖形的基本生成步驟了。可是呢,顯卡也不光是爲了玩遊戲的,否則就該叫“遊戲卡”了。好,讓我們來看…

還有,感謝網友們的支持和厚愛,正是有你們的支持,我纔有信心一直寫下來,希望大家都能學到有用的知識

正題:拓展知識 ---- 顯卡的接口和功能

其實除了 3D 處理,顯卡還有很多的功能,尤其是具有視頻相關的一些功能。不過,這些功能有些是做爲擴展功能被製造商附加在顯卡上的,所以我下面說的,並不是每個人的顯卡都有這些功能哦!我們先來看最簡單的:

一、VGA 輸出接口

呵呵,你一定在笑我吧,VGA 接口,這個也說?我想所有用電腦的朋友都知道 VGA 這個縮寫吧,可是既然要介紹顯卡,當然要全面一點嘍。VGA 接口是很早以前就制定出來的接口規範了,最早的 VGA 標準分辨率爲 640x480, 16 色。VGA 的輸出信號呢,是模擬信號,也就是說它通過輸出不同的電壓強度來達到表示不同色彩的目的,R,G,B 分別用 3 條信號線來傳輸。

大家都應該知道 CRT(陰極射線管) 顯示器是怎樣工作的吧,通過電子槍從左到右,從上到下的掃描,一幅圖像就呈現在了顯示器上。關於顯示器的詳細原理呢,由於不涉及到顯卡的範疇,我就不詳談了,具體的資料也有很多。我介紹 CRT 的主要目的,是因爲 VGA 接口的信號本身就是爲 CRT 顯示器量身制定的(Oh, 我的 LCD 怎麼會是 VGA 接口…. faint)。顯示器不斷的掃描,而電子槍的電壓強度也要隨之而變化,這個變化的信號就是顯卡的 VGA 接口提供的。

這裏我要提醒大家,既然是模擬信號,那麼必然存在信號衰減的問題。所以這時候模擬信號的傳輸質量,就和顯卡的模擬輸出電路,VGA 接口 和 線纜,以及顯示器內的電路設計息息相關了。好,讓我們來看看 VGA 接口部分有什麼東東:

1.1 模擬輸出電路

模擬輸出電路,主要有 RAMDAC 和 低通濾波電路(Low-Pass Filter) 組成。RAMDAC 的全稱是:RAM Digital/Analog Converter。也就是內存數字/模擬轉換器。它的職責是把顯卡內存(也就是顯存啦!)裏儲存的屏幕數據 (也被稱作幀緩存 Framebuffer) 轉換成高低變化的電信號,然後輸出給顯示器用的。要顯示圖像,顯卡輸出信號的速度和顯示器接受信號的速度必須是完全一致的,也就是要做到同步。這麼一來,RAMDAC 也要搭載一定的頻率來給顯示器提供模擬信號了。以前的顯卡,RAMDAC 都是獨立的芯片,所以我們拿一張老的顯卡,可以看到卡上有一個(或多個) 芯片,上面赫赫寫着 RAMDAC 的,就是這個了。而新型的顯卡,它們的圖形核心都有很高的集成度,所以 RAMDAC 也被集成到了圖形核心裏了。

低通濾波電路的作用,我想看名字大家也能猜得差不多,就是濾掉高頻雜訊,讓低頻信號通過… 其實這個低通濾波電路也不簡單呢!凡是模擬信號電路,都存在一個信號保真度的問題。濾波電路也一樣,存在一個信號截止頻率範圍的設定。也就是說,模擬信號不可能從一個頻率一刀切下,總會存在還原度不佳的可能,所以在低通濾波電路的設計上,較好的顯卡往往採用 4 層,甚至 5 層電路來逼近,也就是儘量做到能把高/低頻信號分割的乾淨,這對於模擬信號輸出質量的提高很有幫助。比如 Matrox Parhelia-512 的模擬輸出部分就採用了 5 層低通濾波電路來保證信號的純淨。

1.2 EMI 電磁屏蔽電路

拿起一張顯卡,大家都能看到,在藍色的 VGA 接口後面,有着密密麻麻的元件位置,可是你仔細看的話,可以發現有好多的元件位都是空着的。這是怎麼回事呢?其實在 VGA 的輸出端前面的很多元件,是爲了降低顯卡輸出信號的電磁輻射而設計的。這個電路的元件的使用尤其挑剔,如果元件不好的話將嚴重的降低信號的質量。所以只有很少數的高檔顯卡真正的使用了這部分的設計。而其他的顯卡,在電磁輻射量允許的情況下,會省略這部分的電路,所以有很多的顯卡 VGA 端口處都空很多元件,那些就是給 EMI 電磁屏蔽電路預留的位置(預留?它會回來嗎?呵呵)…

二、TV 輸出功能 (TV-OUT)

這個是現在民用級顯卡上很常用的功能,很多中/高檔的顯卡已經把它當作標準配置了。TV-OUT 的功能當然就是輸出顯示信號到電視咯,而 TV-OUT的接口一般有兩種,即 TV 上常用的 同軸信號端口 和 S-Video 信號端口,而信號的格式,也有 NTSC 和 PAL 兩種國際標準。爲了支持 TV-OUT 功能,顯卡上也必然要有負責處理這部分信號轉換的電路。同樣的,以前的顯卡會有外置的 TV-OUT 芯片,而新型的圖形處理核心也把它集成到了裏面 ( 哇噻,好厲害!什麼都能集成?)

TV-OUT 功能對於民用級的顯卡來說,是非常實用的,因爲它可以把電腦的屏幕輸出到電視上,從而讓播放視頻,玩遊戲的功能可以在大屏幕電視的幫助下變得更有趣。

三、VIVO:我們是視頻採集卡

很多朋友都問:VIVO 是什麼?顧名思義,VIVO – Video In Video Out,即 視頻輸入輸出。相對於 TV-OUT 來說,VIVO 最大的不同就在於它的視頻輸入上。這種顯卡可以通過同軸信號接口 或 S-Video 接口把 NTSC/PAL 圖像信號接收進來,也就是說,它可以完成視頻信號的採集功能。大家都知道,把顯存裏的數字信號輸出到模擬信號接口,需要 DAC(數字/模擬轉換器)的幫助,而 NTSC/PAL 信號也屬於模擬信號,那麼採集它們的時候,就要進行互逆的過程了:ADC(Analog/Digital Converter 模擬/數字轉換器)。VIVO 功能一般都通過外置的芯片來支持,因爲需要 ADC 的過程。而一些最新的圖形核心,把 VIVO 功能也集成到了裏面(…) 如 GeForce FX 5900 系列。

擁有 VIVO 功能的顯卡數量就沒有隻擁有 TV-OUT 功能的顯卡那麼多了。有少數的廠商纔給某些型號的顯卡配備 VIVO 功能。這樣的功能對於需要錄製影片節目,或擁有攝像機的朋友來說,比較實用。因爲它可以把影片或攝像機的信號輸入電腦,保存在硬盤上。可是要想通過顯卡看電視,VIVO 功能是不行的。因爲它缺少了接受電視信號所特有的部分:高頻頭。

四、TV 接收功能

擁有TV 接收功能的顯卡,屬於真正的多功能複合卡。它的種類就更加少了。如果大家見過 TV 卡(就是單純用來接收電視信號的擴展卡) 的話,一定見過它上面那個用金屬包着的,大大的,方方的,怪怪的盒子。這個就是高頻頭。高頻頭所起的作用就是把從空中,或有線電視網絡接受到的調製好的電視高頻信號,轉換成可供採集的視頻信號。正因爲是高頻信號,所以很容易受到干擾。所以優質的高頻頭用料,做工都非常的棒,而價格也很昂貴。我們最常見的帶 TV 接收功能的顯卡有 ATI 的 AllInWonder 系列顯卡 等等。

有了 TV 接收功能,你的電腦就變成電視機了 呵呵。很多 TV 接收卡還附贈了遙控器,以使你的電腦看起來更像個電視(1萬多元買個小電視……)。最重要的是,你不僅能看電視,還可以把好看的節目錄下來,以後慢慢回味,或留作紀念。

五、數字時代的開始:DVI

顯卡上配 DVI 接口,大概在近兩年裏纔開始興起。DVI 的全稱是 Digital Visual Interface。即:數字視頻界面。相比 VGA 接口的模擬信號,DVI 輸出的則是數字信號。這樣,顯示信號將 100% 的被完好的傳輸到顯示器裏。DVI 所對應的是數字顯示設備,即 LCD 液晶顯示器,Plasma 等離子顯示器 等等的顯示裝置。原因是液晶顯示器和等離子顯示器的顯示原理都是基於數字信號的,這樣當接受到 DVI 所輸出的數字信號後,就可以方便的直接將它顯示出來了。

關於 DVI 的詳細信息,我給大家一個網址,這是 DVI 的制定組織 DDWG 的網站,大家可以到這裏找自己想要得信息:http://www.ddwg.org/
這裏我想解釋兩個大家常見的問題:

5.1 DVI 轉 VGA 的接頭是怎麼回事?

其實 DVI 接口在制定的時候,保留了模擬信號輸出的通道。DVI 一共有兩種接口:DVI-D (Digital only) 和 DVI-I(Integerated)。DVI-D 的信號就是單純的數字信號,而 DVI-I 則是保留模擬信號通道的 DVI 接口,大家可以找一個 DVI 接口的顯卡來看 (怎麼不貼圖?哦,你自己找找看實物,印象比較深嘛!),它的左邊有一個十字形的接口,這個呢,就是模擬信號的通道,而右邊則是三排規則的接口,這個就是 數字信號通道啦!

所以,可以利用 DVI-I 的模擬信號通道,來輸出模擬信號。到這裏,大家就別再問 DVI 能轉 VGA,VGA 怎麼就不能轉 DVI 的傻傻問題了哦 呵呵

5.2 液晶顯示器的 VGA 接口又怎麼解釋?

這個問題,是不太好解釋(#%@#%#@%#@)。按道理說,LCD 液晶顯示器都應該配備 DVI 接口來接受純淨的數字信號,這樣現實效果會好很多。VGA 信號輸入到液晶顯示器後,還要進行 ADC 的轉換,才能被顯示出來。這樣看:如果用 DVI 接口來接液晶顯示器的話,路徑是這樣的:

顯存的數字信號 => 編碼 => DVI => 顯示器 => 解碼 => 顯示

其中的“編碼”和“解碼”過程,是 DVI 標準所制定的,不過因爲是純數字無損編碼,所以沒有任何損失的

而用 VGA 接口,則變成了這樣:

顯存的數字信號 => DAC => VGA 傳輸(損耗) => 顯示器 => ADC => 顯示….

大家都能看出來後面的做法是多麼的可笑啊!從數字到模擬,然後把模擬信號傳輸過去,加上損耗和干擾,再還原成數字信號……可是爲什麼家用級的顯示其都只有 VGA 接口呢?我想可能是出於兼容性的考慮。由於現階段 VGA 接口的顯卡佔絕大多數,所以商家怕出現“買到顯示器插不上”的尷尬情況,決定用 VGA 接口。另一方面的原因,則是商業原因。DVI 作爲後來才發展起來的接口技術,雖然對於數字顯示有着先天的優勢,而且成本並不高昂,可是廠商出於利益考慮,就只能通過這種手段來提高 DVI 製品的收入了。一旦數字顯示技術普及,DVI 接口一定會受到更廣泛的應用。

六、3D 立體眼鏡

好玩吧,3D 立體眼鏡。我想絕大多數人都沒有體驗過戴上它玩 3D 遊戲是什麼感覺。

其實它的原理是這樣的:人的眼睛判斷物體的遠近,其實是由物體在兩個眼睛裏成像的細微差別來判斷的。你可以做一個試驗,伸出雙手,兩手各握一支筆,一上一下的順着視線對成一條直線。用兩隻眼睛的話,你一定可以輕而易舉的把兩隻筆對成一條豎線(做不到?%#$%$#%快去找眼科醫生檢查…)。好了,現在閉上一隻眼,再試着把它們對成一條直線… 是不是很困難了 呵呵。就是這樣,要看到真正的立體物體,兩眼的圖像是不同的。

3D 立體眼鏡的原理,就是通過讓左/右 眼看到不同的圖像,來讓大腦認爲你看到的東西是“立體”的。怎麼能看到不同的圖像?!是這樣的:當 3D 立體眼鏡被激活的時候,遊戲的 3D 場景渲染過程會發生一些變化。這時候顯示器將以換頁交替的方式,輪流的顯示出左/右眼的畫面(怎麼做的?就是移動遊戲裏攝像機的位置啊!)。而此時,3D 眼鏡便偷偷的輪流擋住你的右眼和左眼(通過液晶片的變色),這樣顯示器顯示左眼畫面的時候,你用左眼看;顯示器顯示右眼畫面的時候,你用右眼看…你看到立體畫面了!呵呵 基本的原理就是這樣的。

這篇寫了這麼多有關顯卡功能的東西,有的地方可能比較難理解,不好意思咯… 大家慢慢的看,一定能看懂的!呵呵 我們總結了顯卡的 六大功能/接口:VGA, TV-OUT, VIVO, TV-IN, DVI, 3D Glasses。其他一些奇異的功能,我就不說了,我們只講潮流嘛 呵呵

就到這裏了,再見哦~~

(原文出處:http://bbs.gzeasy.com/index.php?showtopic=35634&view=findpost&p=422104

-------------------------

圖形加速卡技術論壇:5.解惑篇--遊戲的東西,專業的東西

(發表於GZeasy.com: Jul 28 2003, 04:39 PM)

回顧:“顯卡的接口和功能”篇中,我給大家大概的介紹了一下顯卡擁有的各種接口,以及這些接口的基本原理和功能。其中 VGA 和 DVI 是使用最廣泛的接口,我也做了相對較詳細的介紹。讀完前四章,大家應該對顯卡的功能有了一定的瞭解了吧。可是我看到有很多朋友對於 3D 加速卡除了遊戲的另外一個領域非常的陌生,所以,今天我來介紹:

正題:解惑篇--遊戲的東西,專業的東西

說起專業繪圖卡,大家有什麼感覺呢?是不是“哇,好神聖!買不起!和我沒關係!...”的敬而遠之的態度呢?呵呵,其實 3D 加速卡最初是在專業領域發展起來的。我們現在用到的遊戲卡,只不過是一種“軍轉民”的產品罷了。所以,在瞭解到 3D 遊戲卡的同時呢,我們大家也因該對它的前身—專業 3D 繪圖卡有所瞭解。好了,讓我們來看專業繪圖卡的職責。

大家來想象一下,如果遊戲中所有的三角形,都不去填充,而只用直線把它們的三個邊畫出來… 你會看到什麼??哇,亂死了!是亂七八糟的一堆… 呵呵,這就是 3D 繪圖人員每天所面對的東西。

一、線筐的世界

在專業領域,圖形設計者往往要求不單看到物體的表面顏色和材質,更要求看到物體內部的結構和精確的形狀輪廓。這樣呢,花裏胡哨的紋理貼圖和材質不僅不能起到應有的作用,反而還會干擾設計者對形狀的掌握。所以,快速,精確,大量的繪製線條就成了專業繪圖卡的“基本功”了 呵呵。

兩點確定一條直線,所以在專業領域,物體不一定要用三角形來表示也一樣可以被編輯和顯示出來。所以專業繪圖更偏向於使用四邊形來繪製物體。這樣一來看起來整齊,二來容易和外部的一些採集設備,比如 3D 掃描儀的數據接口。

在繪製遊戲的過程中,要用少量的三角形,加上大量的紋理貼圖來繪製場景。由於紋理貼圖的讀取和顏色運算佔絕大多數處理時間,所以遊戲卡的顯存帶寬和像素處理能力就顯得非常重要,導致現在出現了 4 條 乃至 8 條 像素管線並行運作的顯卡,和高達 256bits, 20GB/s 的顯存帶寬。

而在只繪製線筐這種情況下,專業繪圖卡的工作模式以及瓶頸分佈也和遊戲卡有所不同了:在專業軟件的編輯窗口裏,線條填充了所有空間。專業繪圖卡需要可以接受的速度處理數量巨大的頂點數據,而這些數據量,通常都在遊戲場景的成千上萬倍。而畫線的過程相比頂點的處理過程,就顯得比較輕鬆了。這種工作方法,使得專業繪圖卡需要有非常強勁的頂點處理能力。這點,在頂點處理能力相似的顯卡專業性能也相近的表現中也能看得出來。

既然畫線條是主要任務,人們當然想讓專業卡把它的主要任務完成的更好。所以,人們想到了用一種方法來讓畫出來的線更漂亮:

二、線筐反鋸齒 (Anti-Aliased Lines)

現在打開 Windows 的 畫筆 畫一條斜線,你看到了什麼?(當然是線啦!@#%@#%$#^$)你看到的是鋸齒!其實斜線也是由很短的水平或豎直的線段組成的。這個就是線段光柵化的缺點。怎麼才能讓畫出來的線更平滑,更漂亮呢?這就要用到光柵化的高級技巧了:浮點座標光柵化法則(Floating Point Coordinate Rasterization: 具體的名字可能不是這樣的,不過這個名字絕對能說明問題!)。以往,在畫線的時候,都要把線段頂點的座標先轉換成整數,再畫在屏幕上,比如( 124.5, 11.2 ) => ( 125, 11 )。因爲屏幕上像素的座標都是整數的,所以這種方法簡單快速,可是畫出來的線就是那樣的充滿鋸齒…

而浮點光柵化法則呢,就是把浮點數表示的座標直接映射到屏幕上,而取該點鄰近的四個像素做顏色的權重分配(最複雜的地方哦,別急,我來慢慢講):比如線上有一個點,它的座標是 ( 124.5, 11.2 )。那麼我們來取這鄰近四個點:( 124, 11 ), ( 125, 11 ), ( 124, 12 ), ( 125, 12 )。而用座標的小數部分表示該點的權重的話,四個點的顏色濃度分別是這樣的:

( 124(0.5), 11(0.2) ) : 50% * 20% = 10%, ( 125(-0.5), 11(0.2) ) : 50% * 20% = 10%;
( 124(0.5), 12(-0.8) ) : 50% * 80% = 40%, ( 125(-0.5), 12(-0.8) ) : 50% * 80% = 40%;

這樣,就把一個浮點座標映射到了四個整數座標上,由於色彩的濃度是隨浮點座標在整數座標映射的權重來計算的,所以整個線就變得非常的平滑了。

我上面介紹的只是反鋸齒光柵化的方法之一,有很多種更快速的方法已經被廣泛的使用了。由於這些方法涉及到的知識太專業了,所以我就不再多做引申了(其實有的我也不很清楚…)。線筐反鋸齒在新型專業繪圖卡里做了良好的優化,所以使用專業繪圖卡時,可以通過使用線筐反鋸齒而得到更清晰精確美觀的線筐效果圖。

三、專業 OpenGL 和後起之秀 D3D8/9

說到專業繪圖卡,我就不能不提起 OpenGL。OpenGL 是什麼?你首先想到的一定是 Quake!, Doom! @%#%#@%@^#$^% 拜託,我們在講專業知識哦!Open Graphics Library 是由 Silicon Graphics Inc. 於 1992 年提出的專業繪圖接口。它被廣泛的應用在了幾乎所有的計算機繪圖領域。包括 SGI, DEC, IBM, PC 和MAC 等等,都提供了對它的支持,所以說 OpenGL 是一個跨平臺的專業繪圖接口。大家平常玩的遊戲裏使用的 OpenGL,只是整個 OpenGL 繪圖庫函數的很小很小一部分,而這一部分足以讓我們的廣大玩家體驗驚心動魄的 3D 世界了!呵呵。

既然這麼神,那麼支持它的軟件肯定不少嘍!對了。像 3dsmax, Maya, SoftImage 這PC 3D 製作工具的“三巨頭”就提供了對 OpenGL 圖形接口的支持。既然是接口,也就代表了“與硬件無關的隔離層”。所以專業繪圖卡只需要專心做好對 OpenGL 接口的支持,也就是支持了所有主流的 3D 製作軟件。大家看到目前的專業繪圖卡價格如此的高昂,其實除掉優秀的硬件,它的驅動研發也佔了很大一部分的成本。

也許有不少朋友還在納悶:OpenGL 到底是幹什麼用的?每天聽你們說呀說,我怎麼沒有看見!其實,OpenGL 的常用功能說起來讓你嚇一跳:畫點,畫線,畫多邊形,就是這些。作爲遊戲,使用OpenGL 提供的這三個功能就足夠了。而在專業領域,它提供了曲線,曲面繪畫的支持,三角形分割,頂點變形以及其他一些專業人士津津樂道的功能(別說我糊弄你,我瞭解的真的不多!)而在最新版本的 OpenGL 之中,也引入了可編程圖形流水線的概念(比 D3D8 晚了半拍)這樣一來,也可以通過對顯卡編程來靈活的實現個性的圖像效果。

也許大家從我的話裏能看出來,OpenGL 在後來的發展中,正如大家所料的,掉到了 D3D 的後面。說起 D3D,就要提一下 Microsoft 的 DirectX 娛樂多媒體引擎了。DirectX 對廣大玩家一定如雷貫耳吧。事實上,現在市面上的遊戲,有 80% 的都採用了 DirectX 的 D3D 圖形引擎,而不是 OpenGL。這也是受 OpenGL 和 D3D 開發使得定位不同所影響。D3D 更偏向於爲遊戲設計者提供直接的,功能強大的與遊戲繪圖直接相關的功能,所以對於遊戲設計者來說更具親和力。

而 D3D 的快速發展也得益於它是獨家技術:由 Microsoft 親自制定,親自研發,提供詳細強大的技術支持。以往的 D3D 總是給人小氣的感覺,而 D3D 也把 OpenGL 作爲競爭目標而努力的發展;而在 DirectX 8.0 推出的時候,D3D8 從功能和易用性上一舉超越了 OpenGL。它首先提出了可編程幾何/像素處理流水線的概念。配合當時上市的 nVidia GeForce 3 系列顯卡的完美硬件支持,從視覺上給了人們全新的震撼。題歸正傳:當 D3D8 在遊戲接口方面超越了 OpenGL 之後,貪婪的 Microsoft (!) 更開始讓 D3D 在專業功能上也發展起來。時至今日,D3D 得到了衆多專業繪圖軟件的支持,比如 3dsmax 從 4.0 起加入了對 DirectX 8.0 的支持,使得近似最終渲染效果的材質/燈光在可編程GPU 的支持下,在預覽窗口裏顯示了出來。

DirectX 9.0 的繪圖組件 D3D9,又是一個里程碑。它重新定義了可編程圖形流水線的概念,使全浮點精度,無失真的圖像在 PC 遊戲裏成爲可能。而且 D3D9 引入了另一個新的概念,就是在繼承了 D3D8的彙編語言給顯卡編程的同時,提供了用高級語言來撰寫顯卡的程序的功能,這個語言被命名爲 HLSL(High Level Shader Language)。到此,D3D 超越了 OpenGL,也使的 OpenGL 新版本的制定開始向 D3D 靠攏。OpenGL 所支持的 Vertex Program / Fragment Shader 就是在 D3D 的 VertexShader / PixelShader 的基礎上發展起來的。

D3D 的功能已經足夠強勁,也在遊戲領域得到了完全的支持。可是要想在專業繪圖領域真正的擁有一席之地,還需要各大專業繪圖軟件開發商對其表示肯定和投入支持。讓我們衷心的祝 D3D 和 OpenGL 一路走好...

四、預覽 vs. 渲染

有很多專業繪圖的初學者,常常分不清兩個概念:預覽和渲染的區別,以及圖形加速卡是給哪裏加速的。下面我就來講一下這些到底是什麼東西

使用過專業繪圖軟件的朋友,一定見過它的交互式編輯窗口吧。不同的軟件和設置,開有不同數量的交互式編輯窗口,也被稱爲預覽窗口。這些窗口裏的內容呢,就是由圖形加速卡繪製的(如果啓用硬件加速的話)。一般除了有一個窗口裏的物體是由顏色和紋理貼圖填充的以外,其它的窗口裏的圖像都是線筐。呵呵 說道這裏,大家應該明白專業繪圖卡對線筐加速的意義了吧。其實,在專業繪圖軟件裏,有且只有這部分的繪圖工作是由圖形加速卡來完成的。另一部分繪圖功能,則超越了圖形加速卡的功能:

這就是成品渲染。當你調整好所有參數,包括攝像機的位置和燈光以後,按動“渲染”( Render )按鈕,電腦在做的就是這一步。稍微複雜的場景,這一步通常要花費數小時的時間,有的甚至於要好幾天才能完成。爲什麼這麼慢呢?!你如果打開預覽窗口的圖像,和渲染好的成品對比一下,馬上就能發現區別所在:成品比預覽圖細膩真實的多。其實這一步是完全由 CPU 來完成的。而它們所使用的算法的複雜度,也遠在顯卡的光柵圖形之上。有的是用了 Ray-Tracing 光線追蹤來計算物體的材質和光線的反射/折射,有的甚至利用到了輻射度( Radiosity ) 來計算物體表面接受光線照射的強度。這些真實的算法異常的複雜,而且靈活度很高。所以目前的 GPU 的可編程特性根本不能“代勞”,唯有我們可憐的 CPU 孤軍奮戰了。

到這裏,大家應該明白,專業繪圖卡在繪圖軟件的使用過程中充當了預覽視口加速的功能。別認爲只能加速預覽視口沒有什麼大用處,其實繪圖工作者們有 90% 的時間是用來繪製圖形的,也就是圖形加速卡在 90% 的時間裏,都在爲系統起着重要的加速作用。好了,看着激動人心的 Hollywood 特效大片,欣賞着美輪美奐的 3D 動畫片的時候,讓我們爲默默無聞的專業繪圖卡門致敬…


後記:這篇文章寫的亂七八糟的,連我自己都不知道在寫些什麼 總的來說,我是想給初步涉及專業繪圖領域的朋友做個引路人,讓他們對自己的工作環境有一些淺顯的瞭解。其實,我本人對專業繪圖應用領域,也只是稍知一二,真的是書到用時方恨少啊!希望大家一起努力學習新的圖像技術,來爲我們建築 3D 世界的夢想添一份力氣!

(原文出處:http://bbs.gzeasy.com/index.php?showtopic=37426&view=findpost&p=446913

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章