免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

游戲引擎全剖析(二)

 太陽(yáng)早 2008-01-15
游戲引擎全剖析(二)
2007/12/12 10:42 P.M.
第4部份: 模型與動(dòng)畫(huà),細(xì)節(jié)級(jí)別


角色建模與動(dòng)畫(huà)
   你的角色模型在屏幕上看起來(lái)怎么樣,怎樣容易創(chuàng)建它們,紋理,以及動(dòng)畫(huà)對(duì)于現(xiàn)代游戲試圖完成的`消除不可信`因素來(lái)說(shuō)至關(guān)重要。角色模型系統(tǒng)逐漸變得復(fù)雜起來(lái), 包括較高的多邊形數(shù)量模型, 和讓模型在屏幕上移動(dòng)的更好方式。

   如今你需要一個(gè)骨骼模型系統(tǒng),有骨架和網(wǎng)格細(xì)節(jié)層次,單個(gè)頂點(diǎn)骨架的評(píng)估,骨架動(dòng)畫(huà)忽略,以及比賽中停留的角度忽略。而這些甚至還沒(méi)有開(kāi)始涉及一些你能做的很好的事情,像動(dòng)畫(huà)混合,骨架反向運(yùn)動(dòng)學(xué)(IK),和單個(gè)骨架限制,以及相片真實(shí)感的紋理。這個(gè)清單還能夠繼續(xù)列下去。但是真的,在用專業(yè)行話說(shuō)了所有這些以后,我們?cè)谶@里真正談?wù)摰氖鞘裁茨??讓我們看看?

   讓我們定義一個(gè)基于網(wǎng)格的系統(tǒng)和一個(gè)骨骼動(dòng)畫(huà)系統(tǒng)作為開(kāi)始。在基于網(wǎng)格的系統(tǒng),對(duì)于每一個(gè)動(dòng)畫(huà)幀,你要定義模型網(wǎng)格的每個(gè)點(diǎn)在世界中的位置。舉例來(lái)說(shuō),你有一個(gè)包含200 個(gè)多邊形的手的模型,有 300 個(gè)頂點(diǎn)(注意,在頂點(diǎn)和多邊形之間通常并不是3個(gè)對(duì)1個(gè)的關(guān)系,因?yàn)榇罅慷噙呅螘r(shí)常共享頂點(diǎn) – 使用條形和扇形,你能大幅減少頂點(diǎn)數(shù)量)。如果動(dòng)畫(huà)有 10 幀,那么你就需要在內(nèi)存中有300個(gè)頂點(diǎn)位置的數(shù)據(jù)。 總共有300 x 10 = 3000 頂點(diǎn),每個(gè)頂點(diǎn)由x,y,z和顏色/alpha信息組成。你能看見(jiàn)這個(gè)增長(zhǎng)起來(lái)是多么的快。Quake I,II和 III 都使用了這種系統(tǒng),這種系統(tǒng)確實(shí)有動(dòng)態(tài)變形網(wǎng)格的能力,比如使裙子擺動(dòng),或者讓頭發(fā)飄動(dòng)。

   相比之下,在骨骼動(dòng)畫(huà)系統(tǒng),網(wǎng)格是由骨架組成的骨骼( 骨架是你運(yùn)動(dòng)的對(duì)象)。 網(wǎng)格頂點(diǎn)和骨架本身相關(guān),所以它們?cè)谀P椭械奈恢枚际窍鄬?duì)于骨架,而不是網(wǎng)格代表每個(gè)頂點(diǎn)在世界中的位置。因此,如果你移動(dòng)骨架,組成多邊形的頂點(diǎn)的位置也相應(yīng)改變。這意謂著你只必須使骨骼運(yùn)動(dòng),典型情況大約有 50 個(gè)左右的骨架—很明顯極大地節(jié)省了內(nèi)存。


骨骼動(dòng)畫(huà)附加的好處
   骨骼動(dòng)畫(huà)的另一個(gè)優(yōu)點(diǎn)是能夠根據(jù)影響頂點(diǎn)的一些骨架來(lái)分別“估價(jià)” 每個(gè)頂點(diǎn)。例如,雙臂的骨架運(yùn)動(dòng),肩,脖子而且甚至軀干都能在肩中影響網(wǎng)格。當(dāng)你移動(dòng)軀干的時(shí)候,網(wǎng)格就活像一個(gè)角色一樣移動(dòng)??偟男Ч?D角色能夠?qū)崿F(xiàn)的動(dòng)畫(huà)更加流暢和可信,且需要更少的內(nèi)存。每個(gè)人都贏了。

   當(dāng)然這里的缺點(diǎn)是,如果你想要使有機(jī)的東西運(yùn)動(dòng)且很好,比如說(shuō)頭發(fā),或者披肩,為了讓它看起來(lái)自然,你最后不得不在里面放置數(shù)量驚人的骨架,這會(huì)抬高一些處理時(shí)間。

   基于骨骼的系統(tǒng)能帶給你的一些其他事情是‘忽略’特定層次骨架的能力 -- 說(shuō),"我不關(guān)心動(dòng)畫(huà)想要對(duì)這塊骨架所做的事情,我想要讓它指向世界中的一個(gè)特定點(diǎn)"。這很棒。你能讓模型著眼于世界中的事件,或者使他們的腳在他們站著的地面保持水平。這一切非常微妙,但它可以幫助帶給場(chǎng)景附加的真實(shí)感。

   在骨骼系統(tǒng),你甚至可以指定"我需要把這個(gè)特別的動(dòng)畫(huà)用於模型的腿,而一個(gè)不同的攜槍或射擊動(dòng)畫(huà)在模型軀干上播放,且那家伙(角色)叫喊的不同動(dòng)畫(huà)效果在模型的頭部播放"。非常妙。Ghoul2 ( 在Soldier of Fortune II: Double Helix and Jedi Knight I: Outcast中使用了Raven的動(dòng)畫(huà)系統(tǒng) ) 擁有所有這些好東西,且特別被設(shè)計(jì)為允許程序員使用所有這些忽略能力。這對(duì)動(dòng)畫(huà)的節(jié)省像你一樣難以相信。像你一樣的動(dòng)畫(huà)上的這次救援不相信. Raven有一個(gè)角色行走的動(dòng)畫(huà)和一個(gè)站立開(kāi)火的動(dòng)畫(huà),并在它同時(shí)行走和開(kāi)火形下把這兩個(gè)動(dòng)畫(huà)合并,而不是需要一個(gè)動(dòng)畫(huà)表示角色行走并開(kāi)火。


More Skeletons in the Closet
   先前描述的效果可以通過(guò)具有層次的骨骼系統(tǒng)來(lái)完成。這是什么意思呢?意思是每塊骨架實(shí)際上的位置相對(duì)于它的父親,而不是每個(gè)骨架直接位于空間中的地方。這意謂著如果你移動(dòng)父親骨架,那么它所有的子孫骨架也跟著移動(dòng),在代碼上不需要任何額外的努力。這是讓你能夠在任何骨架層次改變動(dòng)畫(huà),而且通過(guò)骨骼其余部分向下傳遞的東西。

   創(chuàng)建一個(gè)沒(méi)有層次的骨骼系統(tǒng)是可能的 -- 但那時(shí)你不能忽略一個(gè)骨架并且預(yù)期它工作。你所看到的只是身體上的一個(gè)骨架開(kāi)始了新動(dòng)畫(huà),除非你實(shí)現(xiàn)了某種‘向下傳遞信息’的系統(tǒng),否則在該骨架下面的其它骨架保持原來(lái)的動(dòng)畫(huà)。首先由一個(gè)層次系統(tǒng)開(kāi)始,你就自動(dòng)地獲得這些效果。

   許多今天的動(dòng)畫(huà)系統(tǒng)中正開(kāi)始出現(xiàn)一些比較新的特征,如動(dòng)畫(huà)混合,從一個(gè)正在播放的動(dòng)畫(huà)轉(zhuǎn)變到另外一個(gè)動(dòng)畫(huà)需要經(jīng)過(guò)一小段時(shí)間,而不是立即從一個(gè)動(dòng)畫(huà)突然轉(zhuǎn)變到另外一個(gè)。舉例來(lái)說(shuō),你有個(gè)角色在行走,然后他停了下來(lái)。你不是僅僅突然地轉(zhuǎn)變動(dòng)畫(huà),讓他的腿和腳停在無(wú)效位置,而是一秒鐘混合一半,這樣腳似乎自然地移到了新的動(dòng)畫(huà)。不能夠過(guò)高的評(píng)價(jià)這種效果 -- 混合是一個(gè)微妙的事情,但如果正確的運(yùn)用,它真的有些差別。


反向運(yùn)動(dòng)學(xué)
   反向運(yùn)動(dòng)學(xué) (IK) 是被許多人們丟棄的一個(gè)專業(yè)術(shù)語(yǔ),對(duì)它的真實(shí)含義沒(méi)有多少概念。IK 是如今游戲里面一個(gè)相對(duì)比較新的系統(tǒng)。使用 IK ,程序員能夠移動(dòng)一只手,或一條腿, 模型的其余關(guān)節(jié)自動(dòng)重新定位,因此模型被正確定向。而且有模型的關(guān)節(jié)新位置的其馀者他們自己,因此模型正確的被定向。比如,你將會(huì)說(shuō),"好,手 , 去拾起桌子上的那個(gè)杯子"并指出杯子在世界中的位置。手就會(huì)移動(dòng)到那里,且它后面的身體會(huì)調(diào)節(jié)其自身以便雙臂移動(dòng),身體適當(dāng)彎曲,等等。

   也有和IK相反的事情,叫做前向運(yùn)動(dòng)學(xué),本質(zhì)上與 IK 工作的次序相反。想像一只手,手附著在手臂上,手臂附著在身體上?,F(xiàn)在想像你重重地?fù)糁辛松眢w。通常手臂像連迦般抽動(dòng),且手臂末梢的手隨之振動(dòng)。 IK 能夠移動(dòng)身體,并讓其余的四肢自己以真實(shí)的方式移動(dòng)。基本上它需要?jiǎng)赢?huà)師設(shè)定每種工作的大量信息 -- 像關(guān)節(jié)所能通過(guò)的運(yùn)動(dòng)范圍,如果一塊骨架前面的骨架移動(dòng),那么這塊骨架將移動(dòng)多少百分比,等等。

   和它現(xiàn)在一樣,盡管很好,它是一個(gè)很大的處理問(wèn)題,不用它你可以有不同的動(dòng)畫(huà)組合而脫身。值得注意的是,真正的 IK 解決辦法需要一個(gè)層次骨骼系統(tǒng)而不是一個(gè)模型空間系統(tǒng) -- 否則它們都耗時(shí)太多以致無(wú)法恰當(dāng)?shù)赜?jì)算每個(gè)骨架。


LOD幾何系統(tǒng)
   最后,我們應(yīng)當(dāng)快速討論一下與縮放模型幾何復(fù)雜度相關(guān)的細(xì)節(jié)級(jí)別(LOD)系統(tǒng)(與討論MIP映射時(shí)使用的LOD相對(duì)照)。假定如今絕大多數(shù)PC游戲支持的處理器速度的巨大范圍,以及你可能渲染的任何給定可視場(chǎng)景的動(dòng)態(tài)性質(zhì)(在屏幕上有一個(gè)角色還是12個(gè)?), 你通常需要一些系統(tǒng)來(lái)處理這樣的情況,比如,當(dāng)系統(tǒng)接近極限試圖同時(shí)在屏幕上繪制出12個(gè)角色,每個(gè)角色有3,000個(gè)多邊形,并維持現(xiàn)實(shí)的幀速率。 LOD 被設(shè)計(jì)來(lái)協(xié)助這樣的情景中。最基本的情況,它是在任何給定時(shí)間動(dòng)態(tài)地改變你在屏幕上繪制的角色的多邊形數(shù)量的能力。面對(duì)現(xiàn)實(shí)吧,當(dāng)一個(gè)角色走遠(yuǎn),也許只有十個(gè)屏幕像素高度,你真的不需要3000個(gè)多邊形來(lái)渲染這個(gè)角色 -- 或許300個(gè)就夠了,而且你很難分辨出差別。

   一些 LOD 系統(tǒng)將會(huì)需要你建立模型的多個(gè)版本,而且他們將會(huì)依靠模型離觀察者的接近程度來(lái)改變屏幕上的LOD級(jí)別, 以及多少個(gè)多邊形正被同時(shí)顯示。更加復(fù)雜的系統(tǒng)實(shí)際上將會(huì)動(dòng)態(tài)地減少屏幕上的多邊形數(shù)量,在任何給定時(shí)間,任何給定的角色,動(dòng)態(tài)地 -- Messiah和Sacrifice包括了這種風(fēng)格的技術(shù),盡管在CPU方面并不便宜。你必須確信,與首先簡(jiǎn)單地渲染整個(gè)事物相比,你的 LOD 系統(tǒng)沒(méi)有花較多的時(shí)間計(jì)算出要渲染那些多邊形(或不渲染)。 任一方式都將會(huì)工作,由于如今我們?cè)噲D要在屏幕上繪制的多邊形數(shù)量,這是件非常必要的事情。注意, DX9 將會(huì)支持硬件執(zhí)行的自適應(yīng)幾何縮放(tessellation)。

   歸結(jié)起來(lái)是,得到一個(gè)運(yùn)動(dòng)流暢,其表現(xiàn)和移動(dòng)在視覺(jué)上可信,屏幕上看起來(lái)逼真的模型。流暢的動(dòng)畫(huà)時(shí)常是通過(guò)手工建造動(dòng)畫(huà)和運(yùn)動(dòng)捕捉動(dòng)畫(huà)的組合得到。有時(shí)你僅僅手工建立了一個(gè)給定的動(dòng)畫(huà) -- 當(dāng)你在為一個(gè)模型做一些你在現(xiàn)實(shí)生活中不能做到的事情的動(dòng)畫(huà)時(shí), 你傾向于這樣做 -- 舉例來(lái)說(shuō),你確實(shí)不能向后彎腰,或像Mortal Kombat 4中的Lui Kang那樣在行進(jìn)的腳踏車上踢腿,通常運(yùn)動(dòng)捕捉這時(shí)候就出局了! 通常運(yùn)動(dòng)捕捉動(dòng)畫(huà) -- 實(shí)際上視頻捕捉活生生的演員貫穿于你想在屏幕上所看到的動(dòng)畫(huà) -- 是得到逼真的東西的方式。真實(shí)感的東西能使一款普通游戲看起來(lái)很棒,而且能掩飾許多事情。比如 NFL Blitz,屏幕上的模型大約有 200 個(gè)多邊形。它們?cè)陟o止站立時(shí)看起來(lái)可怕的斑駁,一旦這些模型跑動(dòng)起來(lái)它們就有快速流暢的動(dòng)畫(huà),模型自身的許多丑陋消失了。眼睛容易看見(jiàn)的是 '逼真的' 動(dòng)畫(huà)而不是模型自身的結(jié)構(gòu)。 一個(gè)不錯(cuò)的模型設(shè)計(jì)師能夠掩飾大多數(shù)模型缺陷。

   我希望這些帶給你對(duì)模型和動(dòng)畫(huà)問(wèn)題的洞察力。在第五部份中,我們將會(huì)更加深入3D世界的建造,討論一些物理,運(yùn)動(dòng)和效果系統(tǒng)的東西。











第5部分: 物理,運(yùn)動(dòng),效果


世界建造
   常常在建立一個(gè)含有任何3D成分的游戲時(shí),你最終要試圖建立一個(gè)將會(huì)在里面產(chǎn)生游戲動(dòng)作的3D環(huán)境。 不知怎么的游戲開(kāi)發(fā)者提供了一個(gè)建立這種環(huán)境的方,它容易修改,有效率,有較低的多邊形數(shù)量,對(duì)于游戲既容易渲染又容易運(yùn)用物理學(xué)。很簡(jiǎn)單,對(duì)嗎?當(dāng)做這個(gè)的時(shí)候我用左手在做什么?當(dāng)做這的時(shí)候 , 我對(duì)我的左手做什么? 是的。不錯(cuò)。

   雖然那里有許多3D結(jié)構(gòu)程序,從CAD/CAM程序到3D Studio Max,建造游戲世界是不同于建造內(nèi)部或外部世界的模型的尷尬。你有三角形數(shù)量問(wèn)題 -- 任何給定的渲染器一次只能渲染這么多的多邊形,這對(duì)于天才的關(guān)卡設(shè)計(jì)師來(lái)說(shuō)永遠(yuǎn)都不夠。不知這些,你也只能每個(gè)關(guān)卡存儲(chǔ)預(yù)定數(shù)量的多邊形,所以即使你的渲染器能夠在視野中處理250,000個(gè)多邊形,即使你只能在合理數(shù)量的空間中存儲(chǔ)500,000個(gè)多邊形,那么取決于你怎么處理它,最后你的關(guān)卡價(jià)值像兩個(gè)房間那么小。不好。

   任何方法,開(kāi)發(fā)者需要提出一個(gè)創(chuàng)作工具 -- 最好足夠靈活,允許游戲引擎需要的各種事物 – 比如,在世界中放置對(duì)象,在進(jìn)入游戲以前對(duì)關(guān)卡的適當(dāng)預(yù)覽,以及準(zhǔn)確的光照預(yù)覽。在他們花三個(gè)小時(shí)預(yù)先處理關(guān)卡來(lái)產(chǎn)生一個(gè) '引擎可消化的' 格式之前 , 這些能力允許游戲開(kāi)發(fā)者看到關(guān)卡將在游戲中看起來(lái)怎么樣。 開(kāi)發(fā)者需要關(guān)于關(guān)卡,多邊形數(shù)量,網(wǎng)格數(shù)量等等的相應(yīng)數(shù)據(jù)。 他們需要一個(gè)合宜而友好的方式能夠讓世界有紋理背景圖,容易存取多邊形數(shù)量縮減工具,如此等等。這個(gè)清單可以繼續(xù)列下去。

   在先前已經(jīng)存在的工具中找到這個(gè)功能是可能的。許多開(kāi)發(fā)者使用Max或者M(jìn)aya建造他們的關(guān)卡, 但即使3D Max需要對(duì)它的功能有一些任務(wù)特定的擴(kuò)展來(lái)有效率地完成關(guān)卡建造工作。甚至可能使用關(guān)卡建造工具,像QERadient(見(jiàn)下圖),而且把它的輸出重新處理成你的引擎能夠解釋的格式。


不能看見(jiàn)它? 別煩擾…
   回想一下我們?cè)诘谝徊糠钟懻摰腂SP (二叉空間分割) 樹(shù),你也可能聽(tīng)說(shuō)過(guò)潛在可視集合(PVS)這個(gè)術(shù)語(yǔ)正被四處談?wù)?。兩者都有相同的目?biāo),不去探究涉及到的繁雜的數(shù)學(xué),它是一種把世界分解為你能從世界任何給定位置看見(jiàn)的墻壁的最小子集的方式。在實(shí)現(xiàn)時(shí),它們僅僅返回你能看見(jiàn)的那些,而不是那些隱藏在可能被遮擋的墻壁后面的。你能想象出這給軟件渲染器帶來(lái)的好處,渲染的每個(gè)像素(可能是這樣的情形)極為重要。它們也按從后到前的順序返回那些墻壁,在渲染時(shí)這是很方便的,因?yàn)槟隳軌蛟阡秩敬涡蛑写_定一個(gè)對(duì)象的實(shí)際位置。

   大體而言,BSP 樹(shù)最近正不受歡迎,由于它們的一些古怪,而且因?yàn)槲覀儚漠?dāng)今3D顯示卡獲得的像素吞吐量,再加上Z緩沖像素測(cè)試,BSP 常常成了一個(gè)多余的過(guò)程。它們?cè)谟?jì)算出你在世界的確切位置和正在你周圍的幾何物體方面是便利的,但常常有比BSP樹(shù)更好而且更直觀的方式來(lái)存儲(chǔ)這些信息。

   潛在可視集像它聽(tīng)上去一樣非常好。它是這么一個(gè)方法,在任何給定時(shí)間,給定你在世界的位置,它決定世界的哪些表面,哪些對(duì)象實(shí)際上可以看得見(jiàn)。這時(shí)常用來(lái)在渲染之前剔除對(duì)象,也剔除它們來(lái)減少AI和動(dòng)畫(huà)處理。畢竟,如果你實(shí)際上不能看見(jiàn)它們,為什么還要費(fèi)腦筋處理呢。多半這真的是不重要的,如果一個(gè)非玩家角色(NPC)正在播放動(dòng)畫(huà),或者甚至在運(yùn)行它的AI思考。


游戲物理學(xué)
   既然我們已經(jīng)在內(nèi)存中得到了世界的結(jié)構(gòu),我們必須防止我們的角色從里面掉落出去,并處理地板,斜坡,墻壁,門,以及移動(dòng)平臺(tái)。加之,我們必須正確地處理地心引力,速度變化,慣性,和放置在世界里面的其它對(duì)象的碰撞。這被看作是游戲物理學(xué)。而且在我們進(jìn)一步深入討論之前,我想現(xiàn)在就在這里消除一個(gè)神話。任何時(shí)候你在世界中看見(jiàn)物理,或者任何人在一個(gè)復(fù)雜的游戲環(huán)境中宣稱“真實(shí)的物理”,很好,它是BS。超過(guò)80%的建造一個(gè)有效率游戲物理系統(tǒng)的精力花在簡(jiǎn)化用來(lái)處理世界中對(duì)象的真實(shí)方程式上面。甚至那時(shí),你時(shí)常忽略什么是‘真實(shí)的’,并創(chuàng)造一些‘有趣的’東西,畢竟,這是目標(biāo)所在。

   經(jīng)常地游戲者將會(huì)忽視真實(shí)世界的牛頓物理學(xué),并扮演他們自己的,更有趣的真實(shí)版本。例如,在QuakeII里面,你能夠立即從0加速到35MPH,并快速停下來(lái)。沒(méi)有摩擦力,而且斜坡不提供真實(shí)斜坡提供的相同類型的重力問(wèn)題。身體沒(méi)有它們應(yīng)該的作用在所有關(guān)節(jié)上的地心引力 -- 你看不見(jiàn)身體像真實(shí)生活中那樣倒在桌子上面或者邊緣 -- 而且地心引力它本身甚至可能是可變的。 面對(duì)現(xiàn)實(shí)吧,在真正的世界中,空間中的飛船不像二戰(zhàn)飛行戰(zhàn)斗員在它們的表面操作那樣實(shí)行。在空中,全部是力和反作用力,力在重量點(diǎn)周圍作用,等等。不像 X-Wing中的Luke Skywalker那樣嘯叫。盡管那樣做更加有趣!

   作為游戲開(kāi)發(fā)者來(lái)說(shuō),無(wú)論我們做什么,我們需要能夠檢測(cè)墻壁,檢測(cè)地板,在世界中處理和其他對(duì)象的碰撞。這些是現(xiàn)代游戲引擎的必備 – 我們決定對(duì)它們進(jìn)一步要做的取決于我們和我們的游戲需要。


效果系統(tǒng)
   如今絕大多數(shù)的游戲引擎建造有某種效果產(chǎn)生器,這允許我們表現(xiàn)出有洞察力的游戲者期盼的所有可愛(ài)的吸引眼球的東西。然而,效果系統(tǒng)幕后所進(jìn)行的東西能夠急劇影響幀速率,所以這是我們需要特別關(guān)心的地方。如今我們有很棒的3D顯示卡,我們能夠傳送大量的三角形給它們,而且他們?nèi)匀灰蟾嗟娜切巍2⒉豢偸悄菢印?在Heretic II,使用它的可愛(ài)的軟件渲染模式,由于他們漂亮的符咒效果,Raven遇到了相當(dāng)嚴(yán)重的過(guò)度繪制問(wèn)題。回想當(dāng)你在屏幕上繪制相同的像素超過(guò)一次時(shí),過(guò)度繪制就發(fā)生了。當(dāng)你有許多效果正在進(jìn)行,按其性質(zhì)你有許多三角形,多個(gè)三角形可能相互堆疊在彼此上面。結(jié)果是你有許多重復(fù)繪制的像素。加上Alpha,這意味著在重新繪制之前你必須讀取舊像素并和新的像素混合,這會(huì)消耗更多的CPU時(shí)間。

   Heretic II的一些效果能說(shuō)明這點(diǎn),我們?cè)谝粠飳?duì)整個(gè)屏幕重復(fù)繪制了四十遍。很驚訝,是嗎?因此他們?cè)谛Ч到y(tǒng)里面實(shí)現(xiàn)了一個(gè)系統(tǒng)采樣在過(guò)去30幀的幀速率,如果速度開(kāi)始減慢,它就自動(dòng)地縮減任何給定效果繪制的三角形數(shù)量。這樣使主要工作完成了,幀速率保持住了,但一些效果看上去很丑陋。

   無(wú)論如何,因?yàn)槿缃窠^大多數(shù)效果傾向使用大量很小的粒子模擬火和煙等等,結(jié)果你在效果代碼里面每幀要處理許多的三角形。你必須把它們從一幀移動(dòng)到下一幀,決定它們是否完成了,甚至還要在它們身上運(yùn)用一些物理學(xué)以便讓它們?cè)诘匕迳厦孢m當(dāng)?shù)姆磸?。這在PC上面都是相當(dāng)昂貴的,因此甚至現(xiàn)在你必須對(duì)你所能夠做的有一些實(shí)際限制。舉例來(lái)說(shuō),用一個(gè)像素粒子產(chǎn)生火的效果可能會(huì)很好,但當(dāng)你這么做的時(shí)候就別期望在屏幕上做更多別的事情。

   粒子被定義為擁有它們自己的世界位置和速度的非常小的可繪制的物體。它們不同于有方向的精靈,大的粒子使用這些精靈 -- 比如噴出的一團(tuán)團(tuán)煙霧。它們面向照相機(jī)自動(dòng)而典型地旋轉(zhuǎn),縮放,改變它們的透明級(jí)別,因此它們能夠隨著時(shí)間淡出。我們?nèi)菀卓吹酱罅康牧W?,但我們卻限制精靈的數(shù)量—盡管兩者之間的真正不同如今正在模糊。將來(lái),特別是在 DX9 和更加高級(jí)的圖形硬件表面以后,我們可能看到更多的人們使用過(guò)程shader來(lái)產(chǎn)生跟粒子系統(tǒng)相似或者更好的效果,創(chuàng)造非常棒的動(dòng)畫(huà)效果。

   當(dāng)談?wù)撔Ч到y(tǒng)時(shí),你可能聽(tīng)說(shuō)過(guò)‘圖原’這個(gè)詞。一個(gè)圖原是你的效果系統(tǒng)將處理的效果的最低級(jí)別的物理表現(xiàn)。更進(jìn)一步解釋,一個(gè)三角形是一個(gè)圖原。那是絕大多數(shù)引擎最終在底層繪制的 -- 大量的三角形。當(dāng)你沿著系統(tǒng)向上時(shí),你對(duì)圖原的定義隨著變化。比如說(shuō),頂層的游戲程序員不想考慮處理個(gè)別的三角形。他僅僅想說(shuō),"這個(gè)效果在這里發(fā)生" 并讓系統(tǒng)以一種黑盒方式處理它。因此對(duì)于他來(lái)說(shuō),一個(gè)效果圖原就是‘讓我們?cè)谑澜绲倪@點(diǎn)持續(xù)這么長(zhǎng)時(shí)間用這樣的引力產(chǎn)生一束粒子’。在效果系統(tǒng)內(nèi)部,它可能認(rèn)為一個(gè)效果圖原是它那時(shí)正在產(chǎn)生的每個(gè)單獨(dú)的效果,像一組遵循同樣的物理學(xué)規(guī)則的三角形—然后它傳送所有這些單獨(dú)的三角形到渲染器進(jìn)行渲染,因此在渲染器層次,圖原就是一個(gè)單獨(dú)的三角形。有一點(diǎn)困惑,但你知道總的思想了。

   以上就是第五部分,下一個(gè)部分是關(guān)于聲音系統(tǒng),和各種不同的音頻APIs,3D音頻效果,處理閉塞和障礙,各種不同材料對(duì)聲音的影響,音頻混合等等。












第6部分: 聲音系統(tǒng),音頻APIs


聲音系統(tǒng)
   由于人們玩的游戲在種類和技術(shù)上的進(jìn)步,聲音和音樂(lè)近幾年來(lái)在游戲中正逐漸變得重要起來(lái)(聲音是一個(gè)實(shí)際游戲的可玩特點(diǎn),比如在Thief和其它同類游戲中的聽(tīng)覺(jué)提示)?,F(xiàn)在四聲道環(huán)繞系統(tǒng)在游戲玩家的寶庫(kù)中是負(fù)擔(dān)得起的和平常的事。給定空間的聲音,噪音的障礙和閉塞,和動(dòng)態(tài)的音樂(lè),如今許多游戲使用這些提高玩家情緒上的反應(yīng),更多的關(guān)注投入到這個(gè)領(lǐng)域就不足為奇了。

   現(xiàn)在在PC競(jìng)技場(chǎng)中,游戲玩家實(shí)際上只有一種聲音卡可以選擇 -- PC聲卡制造商創(chuàng)新公司(Creative Labs)的Sound Blaster Live! 從舊的時(shí)間個(gè)人計(jì)算機(jī)聲音卡片制造業(yè)者有創(chuàng)造力的中心. 多年來(lái)創(chuàng)新公司已經(jīng)為DirectX提供了他們的EAX聲音擴(kuò)展,并且他們是發(fā)起新的OpenAL(開(kāi)放音頻庫(kù)Open Audio Library)的創(chuàng)立者。就如同OpenGL是一個(gè)圖形API一樣,OpenAL,像它起來(lái)聽(tīng)一樣,是一個(gè)聲音系統(tǒng)的API。OpenAL 被設(shè)計(jì)為支持大多數(shù)通常聲卡的許多特征,而且在一個(gè)特定的硬件特征不可得時(shí)提供一個(gè)軟件替代。

   為了更好的定義 OpenAL,我向創(chuàng)新公司的Garin Hiebert詢問(wèn)了其定義:

   "這里借用我們的 " OpenAL 規(guī)格和叁考" 的一個(gè)定義:

   OpenAL 是對(duì)音頻硬件的一個(gè)軟件接口,給程序員提供一個(gè)產(chǎn)生高質(zhì)量多通道輸出的能力。OpenAL 是在模擬的三維環(huán)境里產(chǎn)生聲音的一種重要方法。它想要跨平臺(tái)并容易使用,在風(fēng)格和規(guī)范上與OpenGL相似。任何已經(jīng)熟悉OpenGL的程序員將發(fā)現(xiàn)OpenAL非常熟悉。

   OpenAL API能容易地被擴(kuò)展適應(yīng)插件技術(shù).創(chuàng)新公司已經(jīng)把EAX支持加入到這套API了,程序員可以用來(lái)給他們的聲音環(huán)境增加復(fù)雜的反響,比賽和障礙效果。

   如同Jedi Knight II: Outcast 一樣,連同Eagle 世界/聲音特征編輯器,Soldier of Fortune II 以這個(gè)新系統(tǒng)為特征。什么是Eagle? 在介紹這個(gè)以前,讓我們討論一些其他的系統(tǒng),并定義一些聲音術(shù)語(yǔ)。


   另外的一個(gè)系統(tǒng)是Miles聲音系統(tǒng)。Miles是一家公司,它為你的代碼生產(chǎn)插件,在充分利用每塊聲卡時(shí)處理所有必須的到特定聲音卡的說(shuō)話(比如Sound Blaster Live!系列,或者老的A3D聲卡)。它非常像一個(gè)API前端,捆綁了一些額外的特征在里面。 在其他事物當(dāng)中Miles讓你存取一些事物像MP3解壓縮。 它是很好的解決方案,但像任何事一樣,它花費(fèi)金錢并是你的代碼和硬件之間的額外一層。雖然對(duì)於快速的聲音系統(tǒng)制造,它非常有用,而且他們有段時(shí)間了,因此他們的確精通自己的業(yè)務(wù)。


聲音術(shù)語(yǔ)
   讓我們開(kāi)始障礙和閉塞。它們聽(tīng)起來(lái)一樣,但不是這樣。閉塞基本上意謂著一個(gè)聲音在播放時(shí)聽(tīng)者在他們之間有一些閉合的障礙物。

   比如說(shuō),在NOLF2的一個(gè)屏幕鏡頭上你聽(tīng)到房子里面壞蛋的聲音。你能聽(tīng)到他們,但是他們的聲音相當(dāng)?shù)统炼硢 U系K是相似的,但是你和聲音之間的障礙物并不是閉合的。一個(gè)好的例子就是在你和聲源之間有一根柱子。由于房間中的回聲你仍然聽(tīng)得到這個(gè)聲音,但是它和聲音直接傳遞到你的耳朵里是不同的。當(dāng)然這確實(shí)依賴于知道在你的耳朵和聲源之間的直線上是什么。而且根據(jù)房間的大小,聲源到你的距離等等,需要的處理能變得相當(dāng)耗時(shí)。后面我們將會(huì)談到跟蹤--足可以說(shuō)它時(shí)常是比較慢的幀速率的原因。Quake III 里面的A3D 代碼做了這些事情,關(guān)閉這些選項(xiàng)通常能夠提高幀速率。Tribe 2 是這種弊病的另外一個(gè)受害者。關(guān)閉3D聲音選項(xiàng)則你的幀速率立即好轉(zhuǎn),這在你考慮Tribes世界有多大和你能看見(jiàn)多遠(yuǎn)時(shí)有意義。

   接著是聲音物質(zhì)的特征。大部分聲卡可以讓你能夠用可定義的過(guò)濾器作用于聲音從而修正播放的聲音。例如,在水下,或者在一個(gè)布料遮蓋的房間中,或者在一個(gè)長(zhǎng)的走廊中,或者在歌劇院,聽(tīng)到的聲音有著很大的不同。能夠根據(jù)你所處的環(huán)境改變你聽(tīng)到聲音的方式是相當(dāng)不錯(cuò)的。

   我們回到Eagle… 這是一個(gè)編輯器,允許多數(shù)第一人稱射擊游戲地圖設(shè)計(jì)者將他們的地圖導(dǎo)入到這個(gè)工具,然后構(gòu)造簡(jiǎn)化的幾何形體來(lái)為實(shí)際游戲引擎中的EAX代碼產(chǎn)生一個(gè)聲音地圖。其思想是你不需要一個(gè)真實(shí)的圖形地圖的復(fù)雜幾何形體來(lái)模擬聲音環(huán)境。你也能夠給產(chǎn)生的簡(jiǎn)化地圖分配聲音物質(zhì),這樣聲音環(huán)境就能夠動(dòng)態(tài)地改變。我親眼目睹了這在Soldier of Fortune和Unreal Tournament上的示范,確實(shí)相當(dāng)引人注目。 我這在財(cái)富和 Unreal 巡回賽和它的軍人上真的對(duì)示范是證人相當(dāng)醒目. 當(dāng)你跳入水中時(shí),聽(tīng)到所有的聲音改變,這是一個(gè)非常令人沉浸的經(jīng)歷。

   好,讓我們繼續(xù)吧。

   對(duì)于游戲機(jī),由于靜態(tài)的硬件,你的各種可能性會(huì)更受限制 — 盡管在PlayStation 2和Xbox上,硬件相當(dāng)不錯(cuò)。我說(shuō)的限制,僅僅是指擴(kuò)展,而不是它所能夠做的。我一點(diǎn)也不會(huì)感到驚訝看到這些游戲機(jī)上的游戲很快支持杜比數(shù)字5.1(Dolby Digital 5.1)輸出。Xbox ,由于它的 MCP 音頻處理器,能夠?qū)⑷魏斡螒蛞纛l編碼為5.1,并且游戲不需要特別編碼就能利用這個(gè)特征。杜比(Dolby)把ProLogic II 帶到了 PS2 上,并與Factor 5合作為GameCube游戲?qū)崿F(xiàn)了ProLogic II。在 Xbox 之上,Halo, Madden 2002 和 Project Gotham Racing等游戲都有5.1杜比數(shù)字音頻內(nèi)容。DTS最近也為 PS2 游戲開(kāi)發(fā)者發(fā)布了SDK,為這個(gè)平臺(tái)上的游戲帶來(lái)了降低了比特率的DTS音頻版本。


位置的聲音--一個(gè)復(fù)雜的世界
   現(xiàn)在有一些很少有處理的聲音空間化問(wèn)題。我說(shuō)的是把聲音放在一個(gè)真實(shí)的3D世界中。有四個(gè)揚(yáng)聲器在你周圍是一個(gè)很棒的開(kāi)始,但這仍然只是在二維方向。在你的上方和下方?jīng)]有揚(yáng)聲器,你沒(méi)有真正獲得3D聲音。有一些聲音調(diào)制過(guò)濾器試圖解決這個(gè)問(wèn)題,但實(shí)際上沒(méi)有真實(shí)東西的代替物。當(dāng)然真實(shí)地大多數(shù)游戲多半只是在二維方向上,因此這仍然不是太大的問(wèn)題。

   實(shí)際上任何聲音系統(tǒng)最重要的特征之一是把聲音混合在一起。根據(jù)你所處的位置,空間中聲音的位置,每個(gè)聲音的音量大小,一旦你決定了實(shí)際上你能夠聽(tīng)到的聲音,然后你必須混合這些聲音。通常聲音卡自己處理這些,這首先是聲音卡存在的主要原因。然而,外面有一些引擎決定首先用軟件做一次‘預(yù)混合’。直到你著眼于一點(diǎn)點(diǎn)歷史以前,這并沒(méi)有真正地帶來(lái)多大的意義。

   當(dāng)聲音卡最初問(wèn)世的時(shí)候,有許多不同的混合方法。一些聲卡可以混合8種聲音,一些單位16種,一些32種,等等。 如果你總想聽(tīng)到16種可能的聲音,但你不知道聲音卡是否能夠處理,那么你回到了嘗試和試驗(yàn)的道路上 — 就是你自己用軟件混合。這實(shí)際上是Quake III聲音系統(tǒng)的工作方式,但提一個(gè)問(wèn)題:"Quake III是為A3D和Sound Blaster Live!聲卡世界發(fā)布的,這比以前更加標(biāo)準(zhǔn)化,為什么還這樣做?" 這是個(gè)好問(wèn)題。實(shí)際上Quake III的聲音系統(tǒng)幾乎每行代碼都和Quake II中的聲音系統(tǒng)一樣。而且Quake I,甚至Doom也是這樣。你想一想,向上直到 A3D 聲卡和 SB Live! 聲卡,許多年來(lái)聲音系統(tǒng)的需求沒(méi)有真正地改變過(guò)。兩個(gè)揚(yáng)聲器,二維方向,音量簡(jiǎn)單地隨著距離減小。從Doom一直到Quake III沒(méi)有發(fā)生太大變化。而且在游戲行業(yè)中,如果不是迫不得已,別理會(huì)它。

   通常你會(huì)僅僅使用DirectSound為你做聲音混合,因?yàn)樗鼤?huì)可以使用的聲音硬件,或者轉(zhuǎn)而依靠軟件,很多地方就像DirectX為3D顯示卡所做的一樣。在 90% 的聲音情形中,依靠軟件混合對(duì)你的幀速率沒(méi)有真正發(fā)生太多不同。當(dāng)DirectSound在一些狂熱的編碼者眼中甚至還不是一絲光線時(shí),Doom引擎就已經(jīng)產(chǎn)生了。它從來(lái)沒(méi)有得到更新過(guò),因?yàn)樗鼜膩?lái)就沒(méi)有真的需要更新。

   當(dāng)然,你可以使用 SoundBlaster Live!聲卡的一些聰明特征,例如房間的回聲特性: 一塊石窟,或一個(gè)禮堂,一個(gè)巨穴, 一個(gè)足球體育館等。而且你真的應(yīng)該使用由硬件提供的混合器,畢竟,那是它存在的目的。這種方法的一個(gè)不足之處是程序本身時(shí)常無(wú)法獲得混合結(jié)果,因?yàn)榛旌鲜窃诼暱▋?nèi)部完成而不是在主存。如果由于某種原因你需要看到產(chǎn)生的音量,你是運(yùn)氣不好。


Music Tracks in Games(游戲中的音軌)
   我們沒(méi)有過(guò)多的談到游戲中的音樂(lè)生成。傳統(tǒng)的有兩種方法,一種是簡(jiǎn)單的音樂(lè) .wav 文件(或同等物)。它被預(yù)先制作做好,準(zhǔn)備運(yùn)行,和最小忙亂。然而,這些在內(nèi)存和回放時(shí)間方面很昂貴。第二種方式用預(yù)設(shè)的樣本編碼MIDI音軌。這時(shí)常比較節(jié)省內(nèi)存,但缺點(diǎn)是必須同時(shí)把一些聲音混合在一起,因而會(huì)把聲音通道用光。

   動(dòng)態(tài)音樂(lè)就是根據(jù)在游戲中目睹的行動(dòng)改變你的音樂(lè)的能力,比如探險(xiǎn)用慢節(jié)奏的音樂(lè),戰(zhàn)斗用快節(jié)奏的音樂(lè)。預(yù)先制作的音樂(lè)的一個(gè)困難之處是要合拍,因此你可以從一段音樂(lè)漸弱到另一段音樂(lè),這對(duì)于MIDI音軌比較容易。盡管時(shí)常你足夠快速地淡出,或者一段音樂(lè)在播放另一段音樂(lè)之前已經(jīng)消失了,你能僥幸不被察覺(jué)。

   在我們離開(kāi)這個(gè)主題之前,順便說(shuō)一下,值得一提的是存在一些公司專門為你的游戲創(chuàng)作特定意義的音樂(lè)。FatMan(www.fatman.com) 就是一家這樣的公司。音樂(lè)可能比其他別的東西更加容易外包,這是他們存在的方式。

   最后,游戲現(xiàn)在的事情自然是MP3格式,允許巨大的11 :1的聲音樣本壓縮,然而在送到聲音卡之前只花費(fèi)CPU很少的時(shí)間解壓縮。當(dāng)我在Rave Software工作時(shí),在Star Trek Voyager: Elite Force 中,我們?cè)O(shè)法用MP3在一張CD上面完全支持三種語(yǔ)言,仍然為較多的圖形留有空間。主要地,我們 MP3 只用于非玩家角色(NPC)的語(yǔ)音,由于游戲的全部音頻效果MP3流和動(dòng)態(tài)解壓縮超出了硬件的處理能力,雖然在將來(lái)這是肯定可能的。比較新的格式,如來(lái)自 Dolby 的 AAC 和來(lái)自微軟的WMA,以將近兩倍MP3的壓縮率提供了相等或者更高的音頻質(zhì)量(實(shí)際上一半的比特率),可能應(yīng)用到將來(lái)的游戲中。

  以上是這一章節(jié)的內(nèi)容,下面將是網(wǎng)絡(luò)和連線游戲環(huán)境的開(kāi)發(fā)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多