• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            游戲引擎基礎(chǔ)(四)(模型與動(dòng)畫,細(xì)節(jié)級(jí)別)

            4部份: 模型與動(dòng)畫,細(xì)節(jié)級(jí)別


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

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

              讓我們定義一個(gè)基于網(wǎng)格的系統(tǒng)和一個(gè)骨骼動(dòng)畫系統(tǒng)作為開始。在基于網(wǎng)格的系統(tǒng),對(duì)于每一個(gè)動(dòng)畫幀,你要定義模型網(wǎng)格的每個(gè)點(diǎn)在世界中的位置。舉例來說,你有一個(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)畫有 10 幀,那么你就需要在內(nèi)存中有300個(gè)頂點(diǎn)位置的數(shù)據(jù)。 總共有300 x 10 = 3000 頂點(diǎn),每個(gè)頂點(diǎn)由xyz和顏色/alpha信息組成。你能看見這個(gè)增長(zhǎng)起來是多么的快。Quake III III 都使用了這種系統(tǒng),這種系統(tǒng)確實(shí)有動(dòng)態(tài)變形網(wǎng)格的能力,比如使裙子擺動(dòng),或者讓頭發(fā)飄動(dòng)。

              相比之下,在骨骼動(dòng)畫系統(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)畫附加的好處
              骨骼動(dòng)畫的另一個(gè)優(yōu)點(diǎn)是能夠根據(jù)影響頂點(diǎn)的一些骨架來分別估價(jià)每個(gè)頂點(diǎn)。例如,雙臂的骨架運(yùn)動(dòng),肩,脖子而且甚至軀干都能在肩中影響網(wǎng)格。當(dāng)你移動(dòng)軀干的時(shí)候,網(wǎng)格就活像一個(gè)角色一樣移動(dòng)。總的效果是3D角色能夠?qū)崿F(xiàn)的動(dòng)畫更加流暢和可信,且需要更少的內(nèi)存。每個(gè)人都贏了。

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

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

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


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

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

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


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

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

              和它現(xiàn)在一樣,盡管很好,它是一個(gè)很大的處理問題,不用它你可以有不同的動(dòng)畫組合而脫身。值得注意的是,真正的 IK 解決辦法需要一個(gè)層次骨骼系統(tǒng)而不是一個(gè)模型空間系統(tǒng) -- 否則它們都耗時(shí)太多以致無法恰當(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)來處理這樣的情況,比如,當(dāng)系統(tǒng)接近極限試圖同時(shí)在屏幕上繪制出12個(gè)角色,每個(gè)角色有3000個(gè)多邊形,并維持現(xiàn)實(shí)的幀速率。 LOD 被設(shè)計(jì)來協(xié)助這樣的情景中。最基本的情況,它是在任何給定時(shí)間動(dòng)態(tài)地改變你在屏幕上繪制的角色的多邊形數(shù)量的能力。面對(duì)現(xiàn)實(shí)吧,當(dāng)一個(gè)角色走遠(yuǎn),也許只有十個(gè)屏幕像素高度,你真的不需要3000個(gè)多邊形來渲染這個(gè)角色 -- 或許300個(gè)就夠了,而且你很難分辨出差別。

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

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

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

            posted on 2007-12-04 13:18 夢(mèng)在天涯 閱讀(2324) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Game/OpenGL

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1811124
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            久久精品亚洲福利| 亚洲女久久久噜噜噜熟女| 无码AV中文字幕久久专区| 色偷偷91久久综合噜噜噜噜| 久久久久久久久久久免费精品| 精品人妻伦一二三区久久 | 久久久久人妻一区精品色| 久久久久久精品久久久久| 久久香蕉超碰97国产精品| 久久国产精品一区二区| 色婷婷狠狠久久综合五月| 久久夜色精品国产噜噜亚洲AV| 国产精品久久网| 99久久做夜夜爱天天做精品| 亚洲国产成人久久精品动漫| 亚洲欧洲久久久精品| 久久久久亚洲爆乳少妇无| 浪潮AV色综合久久天堂| 亚洲va久久久久| 人妻无码精品久久亚瑟影视| 91精品国产高清久久久久久国产嫩草 | 久久国产免费直播| 久久精品无码av| 久久中文字幕视频、最近更新| 久久精品国产91久久麻豆自制 | 99久久国产综合精品女同图片 | 青青草国产97免久久费观看| 久久精品成人影院| 香蕉久久夜色精品国产尤物| 午夜福利91久久福利| 精品多毛少妇人妻AV免费久久| 伊色综合久久之综合久久| 亚洲日韩中文无码久久| 国产精品久久久久影院色| 超级碰久久免费公开视频| 97久久国产综合精品女不卡 | 国产国产成人精品久久| 久久久无码精品亚洲日韩软件| 亚洲国产成人久久综合一| 欧美亚洲国产精品久久高清| 国产V综合V亚洲欧美久久|