三維圖像
三維圖像
立體圖視覺上層次分明色彩鮮艷,具有很強的視覺衝擊力,讓觀看的人駐景時間長,留下深刻的印象。立體圖給人以真實、栩栩如生,人物呼之欲出,有身臨其境的感覺,有很高的藝術欣賞價值。利用立體圖像包裝企業,使企業形象更加鮮明,突出企業實力和檔次,增加影響力!更能突出產品的高品質和高檔次。也可以做出色彩艷麗、層次分明的立體婚紗、照片,是當前影像業最新的賣點之一。
(圖)三維圖像
那麼,計算機是如何欺騙您的眼睛,讓它們以為平面屏幕可以深深地延伸到一系列房間中的呢?遊戲程序員又是如何讓您相信,您看到的是真實的人物在真正的場景中走動?在本篇的博聞網文章中,我們將向您介紹三維圖形設計師們採用的一些視覺小訣竅,以及硬體設計師們是如何迅速實現這些小訣竅,使三維圖形看起來就像是一部對您的每個舉動都能做出反應的電影。
(圖)三維圖像
(圖)三維圖像
數百年以來,藝術家們已經掌握了一些訣竅,能夠讓二維平面圖看起來像是進入真正三維世界的窗口。您掃描到計算機上並在顯示器上瀏覽的那些照片可能就運用到了這類訣竅。物體越遠,看起來就越小;當焦點位於靠近相機的物體上時,較遠的物體就變得模糊;物體離得越遠,其色彩的鮮明度就越差。在談到當今計算機上的三維圖形時,我們指的不是靜止的照片,而是移動的圖像。
如果將二維圖畫做成三維圖像需要添加大量信息,那麼將三維靜態圖像做成能夠逼真移動的圖像,所需信息量就更大了。問題的一部分在於,我們的要求越來越高了。我們希望自己看到的所有東西都具有高度的真實性。二十世紀七十年代中期,像Pong這樣的遊戲的屏幕圖形就能給人們留下深刻的印象。如今,我們將遊戲屏幕與DVD電影進行比較,希望遊戲的畫面可以像影院的電影一樣流暢、清晰。這是對PC、Macintosh以及日益增多的遊戲機(如Dreamcast和PlaystationII)上的三維圖形一次很大的挑戰。
對於我們大多數人而言,計算機或高級遊戲系統上的遊戲畫面是最常見的三維圖形。這些遊戲(或採用計算機生成的圖像製作而成的電影)必須經歷三大主要步驟,才能創建並呈現逼真的三維場景:
創建虛擬的三維世界。
確定屏幕上顯示的將是哪一部分的虛擬世界。
確定屏幕上每個像素的外觀,從而使整個圖像看起來盡量逼真。
創建虛擬的三維世界
虛擬三維世界並不等同於一幅虛擬三維世界的圖片。這個道理同樣適用於我們的現實世界。就拿現實世界的極小一部分——您的手以及手下的桌面來打個比方吧。手的本質決定著手的移動方式和外觀。手指關節向手掌方向彎曲,而不會向反方向彎曲。如果用手拍桌面,桌面不會四處飛濺,因為桌面總是那麼牢固、堅硬。您的手不能穿過桌面。上述內容是您無法通過任何一張照片來證實的。但無論您拍多少張照片,您看到的始終是:手指關節只能向手掌方向彎曲;桌面始終是固體,而非液體,並且是硬的,不是軟的。這是因為在現實世界中,手就是如此,並且將始終具有這樣的屬性。而虛擬三維世界中的物體卻並非像您的手那樣自然存在。它們完全是合成的。它們只具有軟體賦予它們的特性。程序員必須使用專門工具,並且非常仔細地定義虛擬三維世界,從而使其中的一切始終以特定的方式表現。
屏幕上顯示的是哪一部分的虛擬世界?
在任何時候,屏幕上都只會顯示計算機遊戲創建的虛擬三維世界的某個微小部分。屏幕上顯示的內容由以下幾方面綜合決定:定義虛擬世界的方式、選擇前往的目的地以及視線的方向。無論您去哪裡(向前或向後、向上或向下、向左或向右),您周圍的虛擬三維世界決定著您從所處的位置朝要前往的方向觀看時所能看到的一切。您在各個場景中看到的東西必須是有意義的。如果從相同的距離看一個物體,那麼無論方向如何,物體看起來應該是等高的。所有物體的外形和移動方式都應該能讓您相信:這個物體的質量始終保持不變,它的硬度不變,柔韌度不變,等等。
編寫計算機遊戲的程序員花了巨大的心思來定義三維世界,這樣您就可以在其中漫步,不會因為遇到什麼而產生這樣的想法:“在這個世界上不可能發生那樣的事!”您最不想見到的莫過於兩個能夠直接穿過對方的固體。因為那等於是在無情地提醒您,您所看到的一切都是虛構的。
(圖)三維圖像
要讓物體的形象逼真,圖像的許多要素都發揮著重要作用。其中最重要的部分包括:形狀、表面特性、光照、透視、景深和抗鋸齒。
形狀
(圖)三維圖像
表面紋理
(圖)三維圖像
顏色:它是什麼顏色?整個圖像是同一種顏色嗎?
紋理:表面看起來是平滑的,還是有划痕、突起、凹陷或其他不規則現象?
反射率:它能反射多少光線?表面上其他物件的倒影是清晰還是模糊?
要讓圖像看起來“真實”,辦法之一就是在圖像的各個不同
(圖)三維圖像
照明
(圖)三維圖像
光照在產生以下兩種效果方面發揮著重要作用,正是這兩種效果讓物體看起來具有重量和硬度:明暗和陰影。如果光線
(圖)三維圖像
透視
(圖)三維圖像
(圖)三維圖像
Z緩衝區根據包含多邊形的物體與場景前端之間的距離來為各個多邊形分配一個數字。通常,較小的數字分配給距離屏幕較近的物件,較大的數字分配給距離地平線較近的物件。例如,一個16位的Z緩衝區會將數字32,768分配給距離屏幕最近的物體,而將32,767分配給距離屏幕最遠的物體。
在現實世界中,我們的眼睛看不見其他物體之後的物體,因此我們不用去猜想自己應該看到什麼。但計算機會不斷遇到這個問題,並將以直接的方式來解決問題。每個物體創建出來后,其Z值就會被拿來與擁有相同X值和Y值的其他物體的Z值進行比較。具有最小Z值的物體將被完全渲染,而對於具有較大Z值的物體而言,它與具有較小Z值的物體相交的部分將不被渲染。這樣做可確保我們不會看到背景物件透過前景人物,在前景人物中出現。由於物體被完全渲染之前就已採用了Z緩衝區,因此根本無須對隱藏在人物或物體之後的場景部分進行渲染。這就改善了圖形的效果。
景深
可成功用於創建三維圖形的另一個光學效果就是景深。讓我們以路邊的樹木為例。當樹木行列變得越來越小時,就會出現另一個有趣的現象。如果看離自己較近的樹,較遠的樹似乎就變模糊了。當您看有樹的照片或電影時,這種現象特別明顯。電影導演和計算機動畫師利用這種景深效果來達成兩個目的。第一個目的是增強所見場景中的縱深錯覺。計算機完全可以保證場景中的每個物件不論距離遠近都完全清晰。但因為我們習慣於看到景深效果,所以如果無視距離遠近,一律確保物件清晰就會讓人覺得不尋常,並將妨礙產生所見的是真實場景這個錯覺。
導演採用景深效果的第二個原因就是要將人們的注意力集中到他們認為最重要的物件或演員身上。例如,一方面,為了將注意力集中到影片的女主角身上,導演可能會採用“淺景深”效果。採用這種效果時,只有演員清晰可見;另一方面,如果場景旨在讓觀眾對壯觀的自然景象產生深刻印象,那麼就可能採用“深景深”,使場景盡量清晰,引人注目。抗鋸齒
另一種欺騙人們雙眼的技巧就是抗鋸齒效果。數字圖形系統非常擅長於創建貫穿屏幕上下或左右的直線。但如果遇到曲線或對角線(這種類型的線條在現實世界中隨處可見),計算機就可能生成像樓梯一樣的線條,而不能生成圓滑流暢的線條。為欺騙觀眾的眼睛,讓他們相信自己看到的是圓滑的曲線或線條,計算機將把線條顏色的漸變陰影添加到線條周圍的像素上。這些“灰顯”的像素會欺騙觀眾的眼睛,讓他們相信鋸齒狀樓梯已經消失。添加其他有顏色像素以欺騙眼睛的過程就叫做抗鋸齒,它是區分計算機生成的三維圖形和手工繪製三維圖形的技巧之一。跟蹤穿過顏色區域的各種線條,並添加適量的“抗鋸齒”顏色,是計算機在顯示器上創建三維動畫時要執行的另一項複雜任務。
到目前為止,我們已了解了讓數字圖像(不論圖像是單個靜態照片,還是動畫序列的一部分)看起來更真實的各種技巧。但在動畫序列中,程序員和設計師會採用更多訣竅,讓圖像看起來像是“實景拍攝”,而不是由電腦生成的。
每秒多少幀?
如果您去當地影院看電影,被稱為幀的圖像序列將以每秒24幀的速度在您眼前掠過。由於視網膜保留圖像的時間略長於1/24秒,因此大多數人的眼睛會將各幀連成一幅持續的運動的映像。
換個角度來看,這意味著電影的每一幀都是一張曝光時間為1/24秒的照片。這要比“靜止動作”攝影的曝光時間長得多;在“靜止動作”攝影中,奔跑著的人和其他運動物體就像在空中凍結了一樣。因此,如果仔細看與賽車相關的電影中的某一幀,您會發現有些汽車“變得模糊”,那是因為在相機快門打開時它們是運動的。我們已習慣於見到快速移動物體發生模糊的情景,之所以覺得屏幕上的圖像看起來是真實的,部分原因就在於這種模糊。
但是,因為數字三維圖像根本就不是照片,所以當物體在一幀中移動時不會出現模糊現象。為了使圖像看起來更真實,程序員必須特意添加模糊效果。有些設計師覺得,若要製作出這種效果,則每秒需顯示30多幀,因此他們將遊戲顯示速度提高為每秒60幀。儘管這使得每個圖像都能被極細緻地渲染,動作能夠以更小的增量顯示,但它極大地增加了必須針對給定動作序列進行渲染的幀的數量。舉個例子,您想像一個持續6.5分鐘的追逐動作。如果是電影,這個動作需要24(幀/秒)x60(秒)x6.5(分鐘)個幀,或者說9,360幀。如果是每秒60幀的數字三維圖像,則同樣時長的追逐畫面需要60x60x6.5個幀,或者說23,400幀。
創造性模糊
由程序員添加、以增進動態圖像真實性的模糊稱為“動態模糊”或“空間抗鋸齒”。如果您曾啟用過Windows的“滑鼠蹤跡”功能,那麼可以說您已經用過了該技術中部分最基本的功能。移動物體的副本會遺留在其尾跡中,隨著物體漸漸遠去,副本的清晰度和密度將越來越低。物體軌跡的長度、副本逐漸消失的速度以及其他細節將根據下列因素髮生變化:物體應具有的移動速度、物體與觀眾之間的距離以及物體成為關注焦點的程度。正如您所看到的那樣,要讓物體看起來像是在真實移動,需要做出許多決定,編排許多細節。
在圖像的其他部分中,為做到真實,必須捨棄計算機的精確渲染。這個規則既適用於靜態圖像,也適用於動態圖像。倒影就是很好的例子。您一定見過這樣的畫面:以鉻合金刨光的車輛和太空飛船極好地反射出場景中的所有東西。雖然鉻反射的影像能夠精彩地展示對光線的跟蹤,但我們大多數人並非生活在覆蓋著鉻的世界中。雖然木製傢具、大理石地板和拋光金屬的反射效果不能與光滑的鏡面相提並論,但它們都能反射出影像。這些表面上的倒影必須經過模糊處理(不同的表面將接受不同的模糊處理),以便數字畫面里中心角色周圍的表面能提供一個真實的表演舞台。
至今為止,我們討論過的所有因素都使得將三維圖像放到屏幕上這一過程變得更為複雜。首先,定義和創建一個物體就很不容易,而要生成顯示圖像所需的所有像素,從而將物體渲染出來就更加困難。為此必須先對由線框組成的三角形和多邊形、表面特性、來自各光源的光線以及多個表面的反射光線進行計算和組合,然後軟體才能告訴計算機該如何繪製屏幕上的像素。您可能會認為繪製像素即意味著計算這項艱巨的工作大功告成,但其實正是在繪製(或渲染)階段,工作量才開始攀升。
如今,1024x768的屏幕解析度只是“高解析度”的最低要求。這意味著要在屏幕上繪製786,432個圖像元素(或稱為像素)。如果有32位顏色可用,那麼乘以32就意味著製作一幅圖像要處理25,165,824個位。如果顯示速度為60幀/秒,計算機就必須每秒處理1,509,949,440位信息,只有這樣才能使圖像出現在屏幕上。除此之外,計算機還必須執行其他任務來決定圖像的內容、顏色、形狀、光照和其他所有一切,從而使屏幕上的像素能夠真正展示出正確的圖像。想想繪製出圖像所需的整套流程,您就不難理解為什麼圖形顯示卡會將越來越多的圖形處理工作從計算機的中央處理器(CPU)中轉移出來了。CPU需要獲得儘可能多的幫助。
(圖)三維圖像
(圖)三維圖像
這個過程的第一部分包含幾個重要變數:
X=758——這是我們所見“世界”的高度
Y=1024——這是我們所見“世界”的寬度
(圖)三維圖像
Sx=這是我們的窗口在這個世界中的高度
Sy=這是我們的窗口在這個世界中的寬度
Sz=這是深度變數,它決定了哪些物體是可見的,並位於其他被隱藏物體的前方
D=0.75——這是我們的雙眼與這個虛擬世界窗口之間的距離
首先,我們要計算窗口在虛擬世界中的大小。
既然窗口大小已經計算出來了,那麼就採用透視變換來執行下一步驟,將這個世界投射到顯示器屏幕上。在這一步驟中,我們將添加更多的變數。然後,通過下列等式,我們可計算出三維虛擬世界中的點(X、Y、Z、1.0)將變換到位置(X'、Y'、Z'、W'):
這時,在將圖像投射到顯示器屏幕上之前,必須進行另一個變換,但您已經開始意識到所涉及的計算量之大了,而這一切只是為了在圖像中創建一個矢量(線)!您可以想像一下包含眾多人和物的複雜場景所涉及的計算,然後想像一下在1秒鐘內完成60次這樣的計算會是怎樣的情形。難道您不為有人發明了計算機而高興嗎?
在下列示例中,您將看到一個動畫序列,顯示的是在辦公室中的一段行走過程。首先,請注意這個序列比三維遊戲中的大多數場景簡單得多。沒有敵人從桌子後面竄出來;沒有導彈或長矛在空中劃過;沒有咬牙切齒的魔鬼在小屋中現形。從“場景中將出現什麼”這個觀點來看,這是個簡單的動畫。但即便是這樣簡單的序列,也要涉及到我們至今為止所討論過的許多問題。牆壁和傢具的紋理覆蓋著它們的線框結構。代表光線的射線為形成陰影提供了基礎。另外,穿過辦公室時,隨著視點的改變,請注意角落處的某些物體是如何變得清晰可見,某些物體又是如何從牆后出現的——您所看到的正是Z緩衝區計算的結果。在圖像真正呈現到顯示器上之前,所有這些元素都將發揮作用;因此,即便是功能強大的新式CPU也需要獲得一些幫助,以便執行製作三維遊戲和圖形需要的所有處理。這就是該圖形協處理器出場的時候了。
(圖)三維圖像
正如我們已經了解到的那樣,構建三維數字圖像的第一步是要創建一個由三角形和多邊形構成的線框世界。線框世界接著從三維數學世界變換成在二維屏幕上顯示的一組圖案。接著,變換后的圖像將被表面覆蓋(或者說被渲染),一些光源將照亮這些圖像,並最終將圖像變換成在顯示器屏幕上顯示的圖案。但是,現代圖形顯示卡中最常見的圖形協作處理器在線框創建好並將轉換成一組二維多邊形后,將從CPU處接管渲染任務。在這個階段,VooDoo3和TNT2 Ultra這樣的圖形顯示卡上的圖形協處理器將接管CPU的工作。這是重要的一步,但採用尖端技術的圖形處理器能在更早的階段減輕CPU的負擔。
英偉達出品的GeForce 256能夠更多地減輕CPU的負擔。較早出品的GeForce 256能夠執行渲染操作,除此之外,GeForce 256還添加了將線框模型從三維數學空間轉換到二維顯示空間的功能,並能執行顯示光照所需的工作。這大大減輕了CPU的處理壓力,因為變換和光線跟蹤都需要用到大量的浮點數學(涉及分數的數學,之所以稱為“浮點”,是因為可以根據需要移動小數點,以提供高精度)。又由於圖形處理器不必處理CPU的許多任務,所以可以將其設計為能夠極快地處理那些數學任務。
3dfx出品的新款Voodoo 5接管了CPU的另一組任務。3dfx稱這種技術為T緩衝。此技術側重於改進渲染過程,而不是向處理器添加額外任務。T緩衝技術旨在提高抗鋸齒效果。它能夠渲染同一圖像的四個副本,並使每幅圖像都稍稍偏離其他圖像,然後將這些圖像組合起來,從而使物體的邊緣變得稍微模糊,消除了可能對計算機生成圖像造成破壞的“鋸齒狀圖形”。這種技術還可用來生成動態模糊、模糊陰影和景深焦點模糊。運用這些效果可以生成外觀更圓滑、更真實的圖像,也就是圖形設計師所希望得到的圖像。Voodoo 5的設計目標是:在保持較高幀速率的同時實現全屏抗鋸齒效果。
在我們看到逼真的動態圖像穩定、連貫地生成和呈現之前,計算機圖形技術仍然有一些路要走。與使用80列、25行的單色文本的日子相比,圖形效果已經有了極大的改進。數百萬人得益於今天的技術在享受遊戲和模擬的樂趣。新的三維處理器將更讓我們相信自己是在真正地探索另一個世界,體驗我們在現實生活中絕對不敢嘗試的事情。每隔六個月,PC圖形硬體便會經歷一次重大進步,但軟體的改進相對較慢。顯然,像網際網路一樣,計算機圖形的魅力與日俱增,並越來越有可能成為電視的替代品。
[1] 博聞網 http://computer.bowenwang.com.cn/3dgraphics.htm
[2] 博聞網 http://computer.bowenwang.com.cn/3dgraphics1.htm
[3] 博聞網 http://computer.bowenwang.com.cn/3dgraphics5.htm
[4] 博聞網 http://computer.bowenwang.com.cn/3dgraphics6.htm