西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程其它教程 → Away3D骨骼動畫處理方法、Away3D骨骼優(yōu)化的多種嘗試及結(jié)果

Away3D骨骼動畫處理方法、Away3D骨骼優(yōu)化的多種嘗試及結(jié)果

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/11/13 15:37:37字體大。A-A+

作者:西西點(diǎn)擊:81次評論:0次標(biāo)簽: Away3D

  • 類型:濾鏡插件大。7.6M語言:中文 評分:6.6
  • 標(biāo)簽:
立即下載

用過Away3D的朋友估計(jì)都會發(fā)現(xiàn),在Away3D里面使用超過一定骨骼數(shù)量的角色,當(dāng)場景里面角色的數(shù)量稍微多一點(diǎn),整個場景就會很卡。

對于這個現(xiàn)象,我之前得出的結(jié)論是。Stage3D的VC緩存器數(shù)量的限制,造成了對需要占用VC的骨骼信息有限制。對于超過了限制數(shù)量的骨骼部分,Stage3D會把數(shù)據(jù)退回CPU計(jì)算。

這里存在幾個誤區(qū):

1、退回CPU的處理不是Stage3D做的,而是away3D本身做的。

原生的Stage3D對于超過能允許數(shù)量的骨骼,因?yàn)槌隽?28個vc,不會做其他處理,只會直接報錯:

ArgumentError: Error #3615: AGAL 驗(yàn)證失敗: 程序大小小于  程序的最小長度。

2、不是部分的退回,是通過一個開關(guān)判斷是否需要退回,全部退回。

開關(guān)是變量usesCPU。一開始給材質(zhì)賦值的時候,會判斷該模型是否需要退回cpu計(jì)算。假如不需要,就全部推到GPU計(jì)算,即使沒有動畫信息的時候,頂點(diǎn)著色器也會使用蒙皮計(jì)算的一套。假如需要退回cpu計(jì)算,那么就不會再使用蒙皮動畫的頂點(diǎn)程序,而直接用最基礎(chǔ)的頂點(diǎn)程序計(jì)算。

在明白了這兩點(diǎn)之后,看看Away3D對這個是否超出長度的功能做了什么處理:

1、通過對AnimationSetBase.cancelGPUCompatibility斷點(diǎn),發(fā)現(xiàn)了在SkeletonAnimator.testGPUCompatibility方法里面有檢查是否需要退回CPU的判斷。其判斷的條件是:

if (!_useCondensedIndices && (_forceCPU || _jointsPerVertex > 4 || pass.numUsedVertexConstants + _numJoints * 3 > 128)) 

可以看出:

除了_useCondensedIndices ==false,還需要

1._forceCPU == true

2.一個頂點(diǎn)受到大于4個骨骼的影響。

因?yàn)槊總va只能存xyzw四個數(shù),按照Away3D的頂點(diǎn)著色器的處理,就只能最多一個頂點(diǎn)受到4根骨骼的影響。

3.已經(jīng)使用的Vc,加上骨骼占用的VC,要少于128個。

由于Away對于骨骼 Transform推入GPU的計(jì)算是三個基向量,也就是占用3個緩存器,所以需要 骨骼數(shù)*3

后兩個條件,出現(xiàn)了優(yōu)化的空間:

首先,一般頂點(diǎn)最多受到3根骨骼影響已經(jīng)很足夠了。超過4根的信息可以考慮判斷其影響大小,將超出的而且權(quán)重小的部分排除掉。

然后,可以考慮一下怎樣減少輸入的vc數(shù)量,把三個基向量看有沒有辦法變成2個四維向量分別傳入位移和旋轉(zhuǎn)信息。由于Away3D使用的md5動畫格式本身就沒有導(dǎo)出縮放的,所以在沒有自己再寫解析器的情況下,沒有必要處理縮放的信息。

2、對于沒有超出允許范圍的情況,Away3D會通過代碼解析器組成頂點(diǎn)程序,然后每幀推入骨骼的三個基向量給agal計(jì)算。

在SkeletonAnimator.setRenderState方法里面,把計(jì)算出的所有骨骼的信息(_globalMatrices)傳入GPU,_numJoints是骨骼的數(shù)量。vertexConstantOffset是VC偏移量。也就是說,在vertexConstantOffset之前是其他頂點(diǎn)程序需要的VC,從vertexConstantOffset開始往后的所有VC都是骨骼信息使用的。由于每根骨骼有三個基向量,所以是_numJoints*3。

所以最終推入GPU的數(shù)據(jù)是這樣的:

stage3DProxy._context3D.setProgramConstantsFromVector(Context3DProgramType.VERTEX, vertexConstantOffset, _globalMatrices, _numJoints*3);

3、對于返回cpu的情況,頂點(diǎn)程序是最簡單的m44 op,va0,vc0,不需要推送骨骼信息進(jìn)入vc,

而是在SkeletonAnimator.setRenderState方法里面判斷了if (_animationSet.usesCPU),

然后在SkeletonAnimator.morphGeometry方法里面在CPU模擬了一次GPU里面逐個頂點(diǎn)分別乘以受到影響的骨骼的基向量再乘以權(quán)重最后相加的過程,求出了每個頂點(diǎn)在每一幀實(shí)際的位置坐標(biāo),然后返回。

如果角色多、頂點(diǎn)多的情況下,這個過程在CPU算明顯是超級大的負(fù)荷,難怪幾個人物就卡死了。

這里又出現(xiàn)了優(yōu)化點(diǎn)了,寧愿對美術(shù)資源進(jìn)行限制,也不要用CPU來渲染。Away3D這個功能明顯是雞肋,只是為了做得全面,適應(yīng)各種沒有限制的模型,沒有項(xiàng)目可行性。

Away3D骨骼優(yōu)化的多種嘗試及結(jié)果

之前針對stage3d支持骨骼數(shù)量的優(yōu)化方案,做出過2個可能性的分析:
1、減少vc的推送,把transform拆分成一個四元數(shù)和一個三維向量。
2、拆分模型網(wǎng)格,把超出的部分拆分后分別推送。
之后的這段時間,我對這兩種方法都做出了嘗試。接下來談一下結(jié)論:

第一種方法:
通過向VC推送四元數(shù)和三維向量,結(jié)合骨骼的bindpose矩陣,是可以算出頂點(diǎn)在動畫之后的位置。之前有位朋友評論說在agal里面不能用四元數(shù)計(jì)算。這個說法不能算錯,因?yàn)閍gal的確沒有提供直接的四元數(shù)計(jì)算。但假如對3d圖形數(shù)學(xué)熟悉的朋友,就可以直接把運(yùn)算的公式在agal里面重現(xiàn)一下,就可以了。
這種做法的優(yōu)點(diǎn)是cpu計(jì)算實(shí)在很少,比如在解析動畫之后可以直接把動畫關(guān)鍵幀保存成四元數(shù)和三維向量。然后需要計(jì)算動畫的時候,直接獲取然后推送就行了。但缺點(diǎn)是公式在agal里面運(yùn)算會比較麻煩,一條點(diǎn)積的公式,在agal里面就需要拆分成好幾行。而agal是有限制的,不能超過200行。我嘗試的每個點(diǎn)受4根骨骼影響的情況,生成的agal代碼已經(jīng)有192行了。這是比較危險的情況了。假如我們的代碼還需要做其他的處理,那么行數(shù)可能就不夠了。

第二種方法:
我進(jìn)行的嘗試是把各個蒙皮模型的子模型的信息進(jìn)行提取,獲取到該網(wǎng)格實(shí)際受到哪些骨骼的影響,然后推送vc的時候,只推受到影響的骨骼。
這樣做是從一個側(cè)面的解決這個問題。我們做人物模型的時候就不能整個模型合并完再一起蒙皮,必須單獨(dú)逐個部分的做,然后每個部分只蒙受到影響的骨骼。
這樣做的結(jié)果是只要每個部位蒙皮的骨骼不超過一定量,整個人物就可以支持很多很多的骨骼。
不過這樣做也是有缺點(diǎn)的。由于是把模型拆分了,所以本來每個人物每一幀只需要獲取一次的骨骼信息,就變成要獲取多次了。這樣就變成加大了cpu的運(yùn)算量。而且由于模型數(shù)量多了,渲染的實(shí)際次數(shù)也多了。
對于這種情況,我稍微優(yōu)化了一下提取信息的方法,讓他還是同一個角色同一幀只獲取一次骨骼信息。

在沒優(yōu)化之前,由于超出骨骼數(shù)量會退回cpu運(yùn)算,一個2000多面的角色帶有40多根骨骼,away3d只能同屏運(yùn)算10個左右就掉幀了,F(xiàn)在同樣的面數(shù)和骨骼的人物,可以支持同屏80-90個左右而保持在30幀。
對于這個優(yōu)化結(jié)果,我覺得還是不能實(shí)際的應(yīng)用在項(xiàng)目中;蛘呶疫是需要在很多地方找一下優(yōu)化的可能性。因?yàn)樵跊]有優(yōu)化之前,對于2000多面的角色,但骨骼減少到20多根的情況下,同屏是可以跑100個而保持30幀的。如果是湊合著來做項(xiàng)目的情況下,其實(shí)直接讓美工減少骨骼數(shù)量會是更快的解決方法。不過這樣做,游戲的效果就被限制得很厲害了,很多好看的效果和服裝就表現(xiàn)不出來了。

    3d模型
    (13)3d模型
    如今電子商務(wù)發(fā)展勢頭迅猛,各種商品廣告在網(wǎng)絡(luò)上鋪天蓋地,怎樣讓自己的商品能更全面更顯眼的展現(xiàn)給消費(fèi)者成了所有商家宣傳展示自己商品的重中之重。傳統(tǒng)的二維照片顯然已經(jīng)無法滿足這一要求,于是商品展示技術(shù)便開始步入人們的視野。模型的展示,用戶不僅僅可以更為清晰直觀地瀏覽廣告內(nèi)容,其互動性以用戶為核心,任意視角全方位瀏覽欣賞,同時根據(jù)要求制作用戶可直觀地參與內(nèi)容,其廣告效果可想而知。這里給大家收集整理了很多...更多>>
    • 人體穴位3D模型軟件V2011 中文版

      07-05 / 8.0M

      推薦理由: 一款人|體穴位3D模型軟件,這是一款顯示三維人|體的穴位軟件,其中包括12正經(jīng)全部309個穴位,傻瓜操作
    • (常春藤模型生成插件)Guruware Ivy

      10-19 / 7.6M

      推薦理由:常春藤生成插件,3ds max 藤類植物模型生成插件,非常棒的插件。 結(jié)合 MAX 的動畫工具可以制作藤條生長動畫
    • pcb 3D電子元件模型庫

      04-24 / 12.5M

      推薦理由:網(wǎng)上收集的模型庫,很多哦~希望多童鞋們有幫助!
    • 3d max游戲人物模型

      03-25 / 412KB

      推薦理由:3d max游戲人物模型 包含一個人物模型。用于幫助初學(xué)者自學(xué)。 要從最基本建模開始學(xué),建議大家去看網(wǎng)絡(luò)教程
    • 3D人體模型(EasyAnatomy3D)V4.0 已

      10-26 / 20.5M

      推薦理由:如果有學(xué)3D人體建模的可能會有點(diǎn)用,親,你學(xué)了沒,啥,沒有?沒有還不趕緊去學(xué)— —!額,這個這個嘛,自己
    • 3d人物模型合集包西西整理

      01-25 / 92.9M

      推薦理由:西西小編整理的一些3D人物模型的素材包,如果大家有興趣的話可以下載來看看,都是一些美女帥哥的模型哦~ 女
    3dmax插件大全
    (19)3dmax插件大全
    除了能夠制作出精細(xì)的模型外,其中最大的一個亮點(diǎn)就是它的插件功能強(qiáng)大,只要你能夠想到的效果,都有相應(yīng)的插件可以替你實(shí)現(xiàn)。這里西西給大家收集了很多非常實(shí)用的插件。插件后綴名介紹.位于建立命令面板中,可創(chuàng)建包括建模增加輔助物等的新對象。.位于變動命令面板中,增加新的修改命令,可在中找到。.屬于大氣效果燈或渲染類插件,位于的環(huán)境編輯器中,也可在菜單的面板中找到。.屬于特殊用途的插件,位于程序命令面板。.屬于后期...更多>>
    • 3dmax2010中文路徑貼圖補(bǔ)丁

      10-20 / 85.5M

      推薦理由:3dmax2010是我目前用的3dmax軟件中比較好的版本了,剛開始用這個軟件的童鞋,就會發(fā)現(xiàn)不能貼圖,你們想想國
    • 3dsmax森林插件 Forest Pack Pro3.

      04-02 / 30M

      推薦理由:Forest Pack Pro(森林插件)為3ds max提供了創(chuàng)建大面積森林及植被的完整解決方案,使用此插件你能夠創(chuàng)建數(shù)百
    • 幻景大師DreamScape for 3dsmax 20

      05-15 / 47.0M

      推薦理由: 由Ma5漢化。智能安裝,不需原版,內(nèi)附示例、教程、授權(quán)程序及安裝說明。 DreamScape又稱幻景大師,是
    • V-Ray for 3ds max 20112.00.02 中

      03-01 / 26.8M

      推薦理由: V-Ray 頂渲中英文雙語切換版,是學(xué)習(xí)及掌握V-Ray的最佳選擇,在使用時,可進(jìn)行中英文自由切換,從而對
    • 3dmax模型三角面轉(zhuǎn)四邊面插件

      08-03 / 14KB

      推薦理由: 1 解壓 2打開(4polybomb mutimse)文件會看見 文件夾(scripts)和文件夾(ui)3 將scripts完全打開(
    • 3dmax森林制作插件(Forest Pack Pr

      10-19 / 25.9M

      推薦理由:Forest Pack Pro (專業(yè)森林制作)是 Itoo 出品的一款可以讓你在短時間內(nèi)做出專業(yè)的大面積樹林,草叢,人群等

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)