完美DX10!ATI新王者HD2900XT權(quán)威評測
● 第三章 第七節(jié) 其他改進
● 第三章 第七節(jié) 第一小節(jié) alpha to coverage
在游戲中,經(jīng)常使用帶有半透明信息紋理的多邊形模型來模擬復(fù)雜的物體,例如,草、樹葉、鐵絲網(wǎng)等。如果使用真正的模型,一顆邊緣參差不齊的小草可能就要消耗掉幾百個多邊形;然而采用透明紋理,可以只用2~3個多邊形就解決了。

半透明紋理示意——一片樹葉
然而,當(dāng)使用這種有半透明信息的紋理時候,它的不透明和透明部分的邊界線上,常常會出現(xiàn)難看的鋸齒。采用半透明混合技術(shù)可以解決這個問題,但是它需要把場景中所有這類物體按照由遠到近的順序來繪制,才能保證它們的遮擋關(guān)系是正確的——這是十分消耗CPU時間的,所以很不可取。在以前,alpha測試和混合簡直就是圖形程序員的噩夢。
在DirectX 10中,使用了一種新的技術(shù)叫做Alpha to coverage。使用這種技術(shù),在透明和不透明交界處的紋理像素會被進行多極取樣(Multi-sample),達到抗鋸齒的效果。這就在不引入大的性能開銷的情況下華麗的解決了這個問題^_^ 室外場景的游戲?qū)⒋蟠笫芤嬗谶@種技術(shù)。樹葉、鐵絲網(wǎng)、草的邊緣將會更加柔和、圓滑。
使用Alpha to coverage技術(shù),葉片的邊緣更加平滑。
● 第三章 第七節(jié) 第二小節(jié) shadow map filtering
陰影圖(Shadow map)技術(shù)已經(jīng)逐漸成為了渲染真實感陰影的流行技術(shù)。在包括《戰(zhàn)爭機器》、《分裂細胞:雙重特工》、《Ghost Recon》、《刺客信條》等的各大次世代游戲中都能看到它的身影。然而,由于shadow map的尺寸限制,用它實現(xiàn)的陰影邊緣往往有明顯的鋸齒。在DirectX 10中,提供了對shadow map進行過濾的功能的正式支持。經(jīng)過過濾后,陰影的邊緣將會變得更加柔和。
● 第三章 第八節(jié) 游戲效果
DirectX 10為游戲開發(fā)者提供了很多新的特性,采用這些特性可以用來開發(fā)大量的次世代圖形效果。然而,由于這是基于強大、靈活的可編程特性基礎(chǔ)上的,所以很難簡單的指出這些特性都帶來了哪些效果。實際上,很多圖形效果都是對這些特性進行綜合運用的結(jié)果。在這一部分,讓我們來仔細的看一下幾種次世代特效技術(shù),感受一下新的DirectX 10特性在其中起到的作用。
● 第三章 第八節(jié) 第一小節(jié) 次世代Instancing技術(shù)
在上文中,我們已經(jīng)用這張圖來說明DirectX 10的常量緩沖器特性。其實,這里采用的技術(shù)有一個學(xué)名叫做Instancing,大意就是通過一個或幾個模型來復(fù)制出它們的很多實例,實現(xiàn)滿山遍野的樹木、敵兵那樣的效果。這種技術(shù)在DirectX 9時代就已經(jīng)出現(xiàn)了,但是有很多的限制,例如模型不能有動畫,所有的模型實例必須使用同一張紋理貼圖和同一種材質(zhì)效果,等等。這就給這項技術(shù)帶來很多遺憾的地方——玩家肯定不喜歡看見游戲里滿山遍野的敵人或樹木都長成一個模樣,或者只有那么幾種模樣。
在DirectX 10中,通過常量緩沖器、紋理陣列、動態(tài)shader執(zhí)行分支等特性,將Instancing技術(shù)從這些局限中解放了出來。模型的實例沒必要使用同一張紋理貼圖;它們可以通過自己本身的紋理來從紋理陣列中取出各自的紋理;它們甚至可以有不同的特效——程序員可以寫一個包含很多特效的“超級”shader,然后為每個模型實例運用這個shader程序的不同執(zhí)行分支部分,從而給不同的模型賦以不同的材質(zhì)特效。甚至連為每個模型實例使用骨骼蒙皮動畫這種需要大量變換矩陣操作的問題,在16×4096常量寄存器的強大攻勢下都可以迎刃而解。
“克隆人”的時代已經(jīng)結(jié)束了^_^ 通過DirectX 10的高級特性,Instancing將允許每個模型實例擁有它的個性:紋理貼圖,pixel和vertex shader,以及動作動畫。每個實例都將會有它自己的生命。
● 第三章 第八節(jié) 第二小節(jié) 基于象素級別的位移貼圖技術(shù)
在介紹這項技術(shù)之前,首先請允許我對工作在坐落于北京海淀區(qū)知春路的微軟亞洲研究院/工程院的工程師們致以崇高的敬意\\ ^ ^ /。因為這項技術(shù)的實現(xiàn)方法,是由這些中國的工程師們研究、創(chuàng)造出來的。
實時每像素位移貼圖。圖象來源:Microsoft DirectX SDK。
位移貼圖技術(shù),用過3DS MAX的讀者可能不會感到陌生。在3DS MAX中,這種技術(shù)有時也被翻譯成“置換貼圖”,其核心思想就是在制作三維模型時采用比較低的細節(jié),然后給這個模型賦上一張表面高度圖;在渲染時,會根據(jù)這張高度圖來修改模型的表面,使它們隆起或凹陷——這樣,就可以十分省力的給模型表面加上真正的凹凸不平的效果。畢竟,在3DS MAX里一個點一個點的修改模型表面來添加凹凸細節(jié),要比直接拿Photoshop繪制一張高度圖麻煩的多。
位移貼圖要比單純的normal map技術(shù)的凹凸貼圖逼真——因為它是真正的將模型的表面進行修改,抬高或降低它們。然而,由于它需要在渲染時將模型表面進行細分,即將原來的一個多邊形分成大量的小多邊形,這樣才能有足夠多的頂點來進行移動。這在原來的DirectX中是不能實現(xiàn)的,因為那時沒有g(shù)eometry shader,不能動態(tài)生成多邊形圖元,也就不能實現(xiàn)動態(tài)的多邊形細分。即使在有了geometry shader以后,將多邊形細分也是一個消耗性能很大的操作。
然而,微軟亞洲工程院/研究院的工程師們另辟蹊徑,創(chuàng)造了一種新的每像素位移貼圖技術(shù)。它的大致過程是,將簡單模型表面的三角形向上拉伸,成為一個三棱臺,這樣它就具有了一定的體積;而它的高度,就是模型表面根據(jù)高度圖進行位移后能達到的最大高度。然后在填充三角形的每個像素時,通過將觀察者的視線和這個三棱臺進行求交,得到一個相對于這個三棱臺的交線段。
由于高度圖是相對于這個三棱臺的,只有同樣使用相對于這個三棱臺的交線段,才能正確的求出線段和高度圖所代表的表面高度的交點。然后再通過這個交點來計算應(yīng)該把顏色紋理中的哪個點繪制到屏幕上。在這里只是簡單介紹了一下這種技術(shù)的大體原理,實際的實現(xiàn)算法比這個要復(fù)雜,因為需要克服各種各樣的問題。
每像素位移貼圖原理示意。圖片來源:Microsoft DirectX SDK
關(guān)注我們


