• <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>
            清源游民 gameogre@gmail.com
            概述
            動畫,總的來講,在計算機發(fā)展的各個階段,與藝術家們快速瀏覽一系列彼此稍微不同的圖片從而產(chǎn)生運動的幻覺的行為沒有什么不同。1872年,Eadweard Muybridge給奔跑的馬拍了一組連續(xù)的照片,從而證明了馬在奔跑時會四腳同時離地。這是一系列的圖片流可以產(chǎn)生運動幻覺的最早的文檔化的記錄。
            現(xiàn)在在Ogre中,不必小題大作地裝配一些設備來創(chuàng)造這種運動幻覺了。只需要每幀少量地移動或變形場景中的數(shù)據(jù),幻覺就產(chǎn)生了。它確實只是幻覺。ogre不跟蹤對象的速度,加速度,或是角色的胳膊是在抬起
            或是叉著腰。ogre逐幀來處理位置與朝向。ogre能為你做的是幫你重新播放這些動畫。這些動畫可以是用離線工具制作的,或是運行時產(chǎn)生的,或僅是為了實現(xiàn)相機漫游而填充了一系列位置的曲線。
            場景的每幀都會被重畫,兩幀之間沒有什么會被保存下來。ogre中的動畫僅僅是根據(jù)關于任意變量(通常
            是時間)的函數(shù),來定位與定向角色。每一幀,在ogre動畫系統(tǒng)的控制之下,場景中的實體與動畫被稍稍
            移動或產(chǎn)生變形,然后場景被重畫。這種產(chǎn)生動畫的方式,與華納兄弟的動畫團隊做卡通動畫沒什么同。
            一行畫24個卡通兔,彼此稍微不同,然后在1秒鐘的時間連續(xù)播放。
            Ogre中的動畫類型
            根據(jù)控制物體的不同方式分為兩種:基于關鍵幀的動畫,控制器。
            抽象地來看,ogre中的動畫是相關tracks的集合。track是作為時間函數(shù)存儲的一組數(shù)據(jù)值。一對“track值”與"時間點“,構成了關鍵幀(keyframe),更好的一種說法是,在時間軸線上對對象全部或部分的位置,朝向,縮放,進行采樣。根據(jù)動畫的類型,ogre支持好幾種關鍵幀。"關鍵幀”這個名稱來源于手工制作動畫的時代(像上面提到的制作卡通兔動畫),首席藝術家會給他的下級提供一組關鍵的幀。這些幀給出了場景中角色的位置,然后下級藝術家們根據(jù)這些畫出幀之間角色的位置。在ogre中,你就是首席藝術家,需要提供這些關鍵幀,ogre是你的下級,它幫你完成幀之間的過渡。
            ogre中支持的track有下面這幾種類型(一個track中的所有關鍵幀必須有一致的類型):
            NumericAnimaitonTrack(NumericKeyFrame):
            關鍵幀包含一個AnyNumeric類型的標量值。Any是ogre中定義的結構,和COM中的variant 類型一樣,允許數(shù)據(jù)類型的多態(tài)化。AnyNumeric限定了可能的數(shù)據(jù)類型只能是數(shù)字的(實數(shù),整數(shù))。
            NodeAnimationTrack(TransformKeyFrame):
            關鍵幀包含兩個3維向量,一個四元數(shù),分別表示結點的位置,縮放與朝向。
            VertexAnimationTrack(VertexMorphKeyFrame,VertexPoseKeyFrame):
            關鍵幀包含或是引用在一個特定時間點上(在pose 動畫中)頂點位置和混合權重(VertexPoseKeyFrame)。
            動畫狀態(tài)
            程序與ogre中的動畫主要的交互是通過動畫狀態(tài)來完成的(animation state)。在建模工具中,可以為骨骼或頂點網(wǎng)格沿時間軸線定義多個動畫,導出時每個動畫都可以定義一個名字,通過這個名字來定位Entity中同的動畫。通過動畫狀態(tài)可以訪問動畫的許多屬性:長度,當前位置,動畫名,是否循環(huán),有否有效,權重(用于混合動畫)。權重根據(jù)混合動畫的類型進行不同的處理。
            混合權平均:
            告訴ogre做這種混合時,所有權重之和為1。如果不是1,ogre會進行正規(guī)化處理,使得它們的總和為1。這種方式只對骨骼動畫有效,它也是默認的混合方式。
            混合權累積:
            ogre只是簡單地把所有引用權重的效果進行累加,不會再平衡。這種方式只對頂點動畫有效(pose, morph),用到骨骼動畫時也可以。
            動畫狀態(tài)也是也給動畫“加時間”推動它向前變化的地方?;旧峡偸墙o一個時間增量,意味著從上次調用到現(xiàn)在增長了的時間。本質上,加一個時間增量與直接設定時間位置沒有什么不同。
            骨骼動畫
            骨骼動畫是最常用的動畫類型。網(wǎng)格(mesh)中的頂點被綁定到骨骼上,如同我們身體的肌肉綁定到骨上。
            不同的是,計算機動畫中的“骨頭”不是真實存在的。它們用一些(無對應實體)變換來表示骨頭的位置,朝向與縮放,經(jīng)常是用矩陣來表示。骨骼動畫的關鍵幀,僅是相對于骨骼恢復位置的偏移。它們被組合起來形成了沿著時間軸線上某一給定點的骨骼。
            Ogre中的骨骼是有層次關系的,如腳骨與脛骨相連,脛骨又與膝蓋骨相連。在這種層次關系下,除了root外,每個骨頭都有父親。但并不限于只有一個root,這種層次關系僅僅是用來傳遞轉換(自上而下)。改變一根骨頭會影響它所有孩子的位置。反向的運動ogre不支持:當一個骨頭運動時,它不會影響父輩。
            頂點綁定
            頂點被綁定到骨骼時會指定一個權重,權重說明了骨頭運動對頂點的影響效果。典型的是把一個頂點綁
            定到多個骨頭,賦于不同的權重。ogre僅支持每頂點四個骨頭,但每個骨頭可以與任意多個頂點關聯(lián)。
            頂點動畫
            與通過計算動畫骨骼,再根據(jù)骨骼位置計算頂點位置的動畫方式不同。頂點動畫直接對頂點進行動畫操作。它是資源密集型的解決方案,對于每個動畫位置都要轉送完整的頂點數(shù)據(jù)的拷貝。有時這種方式是維一的辦法,例如實現(xiàn)逼真的面部表情動畫。
            頂點動畫在動畫track這個層次上被管理、操縱。這意味著我們可以對角色的頭,臉部分使用復雜的pose動畫,而角色的剩余部分使用相對簡單的morph動畫。但是不能對相同的頂點使用不同的動畫類型。頂點動畫在引用一組頂點集時,要么全部引用,要么一個也不引用。這意味著,在網(wǎng)格級別上來看,所有的共享幾何(shared geometry)構成了頂點動畫的頂點數(shù)據(jù)。在子網(wǎng)格級別上來看,所有子網(wǎng)格的頂點構成了頂點動畫的頂點數(shù)據(jù)。舉例來講,一個子網(wǎng)格的某些頂點參與morph動畫,而剩余頂點參與pose動畫,這種情況是不允許的。
            變形動畫(Morph Animation)
            變形動畫是兩種頂點動畫技術中最簡單最直觀的一種。實際的頂點位置做為"快照"被保存。這與前面說到
            的卡通兔動畫的過程是一樣的。這種方法比較消耗資源,但是計算效率最高。關鍵之間數(shù)據(jù)通過插值得。
            主要的缺點是不能混合多個變形動畫,因為他們保存的是頂點的絕對位置。當然,如果有兩個動畫,它們
            影響的頂點沒有交集,那么確實可以對這兩個動畫進行混合。
            姿勢動畫(Pose Animation)
            模型的各種姿勢被保存在動畫tracks中。這些姿勢可以被混合來創(chuàng)建更復雜的動畫。頂點的位置是相對于
            復原位置的偏移量,而不是頂點的絕對位置。而且只有變化的數(shù)據(jù)才被保存。因此,它不僅更靈活,而且
            對資源使用也更高效。
            pose動畫的關鍵幀引用一個或多個pose tracks,每個引用對姿勢有一個影響權重。權重決定了當pose被混合時每個頂點偏移對最終的頂點位置產(chǎn)生多大的影響。不必在每一幀都引用一個pose。在實踐中,pose混合會碰到一些限制:每個附加的pose需要更多的處理時間。
            混合動畫
            不能混合pose與morph動畫到一起,也不能混合多個morph動畫。
            當混合骨骼動畫與頂點動畫時,ogre將首先計算/混合頂點動畫,然后應用骨骼變形到混合頂點上。
            規(guī)范的pose與骨骼動畫混合的程序,會混合全身體的骨骼動畫與復雜的面部表情。例如,可以對角色的面部頂點使用pose動畫,而角色的剩余部分(包括頭)使用相對簡單的骨骼動畫。
            混合兩個骨骼動畫對于動畫之間的切換是最有用的。例如角色可能在循環(huán)地執(zhí)行"跑步"這個動畫,一會兒
            他可能要停下來(執(zhí)行"idle"動畫),那么這時需要對兩個動畫進行混合。
            Morph與骨骼動畫的混合,對于給骨骼動畫的角色增加"外皮"網(wǎng)格變形是很合適的。例如,將一個衣服動畫與角色實際的骨骼運動動畫混合,這樣就避免了對衣服進行實時模擬的高額代價。
            硬件vs軟件
            應用硬件加速時最應該記住的是:硬件動畫網(wǎng)格數(shù)據(jù)不能被CPU使用。這相當重要!假如你依賴網(wǎng)格數(shù)據(jù)
            進行別的計算(體積陰影計算,物理模擬),一旦頂點變形計算被移到GPU中,頂點就永遠消失了,不在代碼中使用了,假如需要變形之后的頂點數(shù)據(jù),那么你還得用CPU進行與GPU同樣的計算!這確實也可以做到,告訴ogre做吧: Entity::addSoftwareAnimationRequest()。
            硬件加速的骨骼動畫與頂點動畫混合,會在頂點程序中執(zhí)行混合。假如你剛才還沒有注意到上面曾經(jīng)提到
            過的執(zhí)行順序的話,現(xiàn)在又有機會讓你意識到這點:先頂點,然后骨骼。這同樣也意味著,所有的動畫技術都應該是基于硬件加速的,不能讓硬件加速的骨骼動畫與基于軟件的頂點動畫混合。
            使用GPU加速骨骼動畫時,應該考慮到:骨骼動畫算法的本質上要求,在計算每個頂點時,骨架中所有骨頭的數(shù)據(jù)必須都被提供。老舊的硬件僅僅支持24 bones或更少的skinning通道。這時應把mesh分為幾段,在多個通道中skin它們。ogre只會把submesh引用到的bones發(fā)送到skinning shader,而不是骨骼中所有的bones,這使得多個skinnig pass成為可能。
            在CPU中對morph動畫頂點進行插值的主要優(yōu)點是利用了GPU并行計算的本質。morph計算起來也不復雜,
            主要的輸入是兩個頂點位置與一個插值因子,頂點程序產(chǎn)生插值后的頂點位置做為輸出。
            pose動畫與morph類似,而且有與骨骼動畫類似的限制:它提供給程序的pose數(shù)目如何進行傳遞。
            標簽點
            標簽本身不是動畫的一部分,但它們常被用于聯(lián)結任意對象(例如武器)到存在的動畫模型上。標簽點
            的概念比較簡單:它是骨架中一塊特殊的骨頭,它能在運行時,控制綁定對象的位置與朝向。不必事先
            創(chuàng)建標簽點,可以在運動期attched一個可移動對象到骨架中一個命名的骨頭上。Entity有這樣一個方法:
            attachObjectToBone();一旦物體被綁到骨頭上,它就會隨著標簽點移動。需要知道的是,對象并不是真正
            地被attched到標簽點上。它被attched到用那個骨骼的Entity上。
            動畫與控制器
            兩者都是基于一個一維的變量來控制對象的狀態(tài),把變量輸入一個函數(shù)產(chǎn)生輸出。對于動畫來說,輸入變量是時間,而對于控制器來說,輸入變量是任何你想要的東西。
            動畫的特點:
            通過插值函數(shù)計算給定時間點上track值來產(chǎn)生輸出,從而改變頂點位置。
            動畫被認為是個封閉的系統(tǒng):你設置輸入值,ogre 使用它來更新相關對象的屬性。
            插值函數(shù)較為固定:要么線值,要么三次樣條插值。
            動畫有ogre提供的許多工具的支持。
            控制器的特點
            對于輸出的計算更為靈活,工作函數(shù)需要提供,因此有更多選擇。
            控制器可以形成一個鏈,一個輸出可作為另一個輸入。
            控制器自己不移動任何東西,對于輸出可以不做任何事情。ogre用控制器來驅動紋理動畫。
            控制器自動逐幀更新,然而必須手工添加代碼使每幀的動畫向前變化。
            posted on 2007-03-16 17:33 清源游民 閱讀(2651) 評論(0)  編輯 收藏 引用 所屬分類: OGRE
            <2006年12月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            留言簿(35)

            隨筆分類(78)

            隨筆檔案(74)

            文章檔案(5)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品国产免费观看| 欧美久久天天综合香蕉伊| 亚洲va国产va天堂va久久| 久久久久久九九99精品| 久久99热精品| 久久久久久亚洲精品无码| 亚洲精品国产美女久久久| 久久精品国产99国产精品澳门 | 无码人妻久久一区二区三区免费 | 亚洲va国产va天堂va久久| 国产精品国色综合久久| 久久久久亚洲av成人无码电影| 欧美日韩久久中文字幕| 国产精品久久久久久福利69堂| 国产精品无码久久四虎| 久久久久久人妻无码| 久久久久久久综合日本| 国产国产成人精品久久| 97精品国产97久久久久久免费| 久久久久久综合一区中文字幕| 久久乐国产综合亚洲精品| 国产精品久久久天天影视香蕉 | 久久久久免费视频| 精品久久香蕉国产线看观看亚洲| 思思久久精品在热线热| 久久毛片免费看一区二区三区| 精品久久777| 久久精品国产亚洲AV大全| 国产偷久久久精品专区 | 国产AV影片久久久久久| 91精品国产乱码久久久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 久久国产精品无码网站| 91精品观看91久久久久久| 精品久久久久久| 伊人久久综在合线亚洲2019 | 人妻少妇精品久久| 久久噜噜久久久精品66| 一97日本道伊人久久综合影院| 久久精品一区二区影院| 午夜福利91久久福利|