FBX骨骼動(dòng)畫

不要在追尋什么人生的意義城舞,追尋本身就很有意義-《萌菇?jīng)觥?/p>

本周我們拿出一些可能其他同學(xué)也存在的疑問來給大家講解一下關(guān)于FBX骨骼動(dòng)畫的方面東西首启。我們應(yīng)該如何去做一個(gè)動(dòng)畫系統(tǒng)吴攒。

關(guān)于繪制

我們首先來看看,我們要繪制動(dòng)畫需要具備什么樣的底層基礎(chǔ)功能:

  1. 繪制一群三角形的能力(因?yàn)闊o論模型如何復(fù)雜,它都是由三角形構(gòu)成喳整,或許你比較菜鳥,只能繪制21845個(gè)三角形(65535除以3)裸扶,或許你有良好的數(shù)據(jù)組織框都,你有一個(gè)引擎,你可以突破這些瓶頸)

  2. Shader呵晨,你需要一個(gè)Shader為你的模型的各個(gè)部分進(jìn)行著色魏保,我們解析過FBX模型的知道,F(xiàn)BX模型里是有很多個(gè)節(jié)點(diǎn)的摸屠,節(jié)點(diǎn)上都掛在了Submesh這樣的東西谓罗,而每個(gè)submesh基本上可以對(duì)應(yīng)到某一群三角形的集合。于是乎季二,我們就需要特定的shader去繪制每個(gè)submesh檩咱,或許整個(gè)模型都可以使用一個(gè)shader去繪制。

  3. 動(dòng)畫采樣器胯舷,或許有的人至今不明白剛體動(dòng)畫和骨骼動(dòng)畫有什么區(qū)別刻蚯,但那又如何。我們來說說動(dòng)畫采樣器需纳,動(dòng)畫采樣器就是根據(jù)時(shí)間點(diǎn)的信息芦倒,能夠插值出動(dòng)畫中影響頂點(diǎn)位置的矩陣數(shù)據(jù),然后通過這些矩陣數(shù)據(jù)計(jì)算出某個(gè)時(shí)刻不翩,各種submesh的頂點(diǎn)的位置兵扬。我們通過時(shí)間去驅(qū)動(dòng)動(dòng)畫采樣器,動(dòng)畫采樣器計(jì)算出矩陣來影響各個(gè)subumesh口蝠,就形成了骨骼動(dòng)畫器钟。跟著我們學(xué)完了FBX骨骼動(dòng)畫課程的人都知道,你只要是認(rèn)真學(xué)習(xí)了妙蔗,就知道傲霸,動(dòng)畫的計(jì)算是非常耗時(shí)的。因?yàn)槟阈枰總€(gè)頂點(diǎn)是被多個(gè)矩陣影響的眉反,這樣一來昙啄,每一次模型的所有頂點(diǎn)的重新計(jì)算就涉及到多個(gè)矩陣的相乘,并且還需要將這些累加的效果應(yīng)用到所有的頂點(diǎn)數(shù)據(jù)上去寸五。在CPU上來做這件事情的開銷是非常大的梳凛。為了讓我們的課程邏輯更清晰,我們采用的是OpenGL的固定管線來教學(xué)的梳杏。任何一個(gè)學(xué)了可編程管線韧拒,并真正掌握了的人淹接,肯定知道如何變通成為可編程管線版。

難點(diǎn)

骨骼動(dòng)畫難的地方不是給模型貼圖和解碼材質(zhì)叛溢,那些東西只是一個(gè)工程學(xué)問題塑悼,只要有編程功底的人,有足夠的能力去組織一套復(fù)雜的代碼楷掉,這些問題都不是問題厢蒜。骨骼動(dòng)畫難的地方在于矩陣的理解,說具體點(diǎn)靖诗,就是那些Cluster上的矩陣是怎么影響到了各部分submesh上的頂點(diǎn)的郭怪。理論上難點(diǎn)如下,如果不是下面的問題那么一定是你自己的基礎(chǔ)不好刊橘,胡思亂想鄙才,瞎給自己折騰出來的一些難點(diǎn):

  1. cluster與骨頭的對(duì)應(yīng)關(guān)系

  2. cluster與頂點(diǎn)們的對(duì)應(yīng)關(guān)系

  3. 這些矩陣如何計(jì)算才是正確的骨骼矩陣的公式

  4. 動(dòng)畫采樣器是個(gè)黑盒,你不理解它是怎么采樣出來那些矩陣的促绵。

其中1攒庵、2、3點(diǎn)都在我們的FBX骨骼動(dòng)畫課程中做了詳細(xì)講解败晴,至于第4點(diǎn)為什么不講浓冒,是因?yàn)槲覀儾恢繤BX SDK是如何實(shí)現(xiàn)動(dòng)畫采樣器的,他們不是開源的東西尖坤。

動(dòng)畫采樣器

關(guān)于動(dòng)畫采樣器稳懒,實(shí)際上大家更多的不理解是它到底是個(gè)什么。實(shí)際上這部分內(nèi)容不是三言兩語能說明白的慢味,你需要系統(tǒng)的學(xué)習(xí)整個(gè)動(dòng)畫理論的知識(shí)场梆,而你想要學(xué)會(huì)動(dòng)畫理論,首先你要理解數(shù)學(xué)中的大量的插值技術(shù)纯路,我們的2D幀動(dòng)畫或油、3D幀動(dòng)畫、FBX骨骼動(dòng)畫都是某種動(dòng)畫的特例驰唬。實(shí)際上是可以泛化的顶岸,但是由于覆蓋的知識(shí)面太多,大家也知道叫编,我們這里的內(nèi)容屬于小眾內(nèi)容辖佣,有興趣來學(xué)習(xí)的都是聰明絕頂?shù)娜耍话愕某绦騿T是不會(huì)來鉆這塊內(nèi)容的搓逾。因?yàn)樗麄冃枰膬H僅的是一份工作卷谈,來學(xué)習(xí)這部分高深內(nèi)容的程序員,更多的是出于求知欲恃逻,對(duì)于原理的渴望雏搂,鉆研能讓這部分人過的更充實(shí)。

常見的誤區(qū)1

FBX不就是為了游戲而設(shè)計(jì)的嗎寇损?這必然不是凸郑,F(xiàn)BX不是慈善家,就跟天下沒有免費(fèi)又好吃的午餐一樣矛市,每個(gè)人都要生存芙沥,有的人堂堂正正的賺錢,有的人通過免費(fèi)浊吏,吸引客源而昨,最終想著別的方法賺錢,但最終都是需要落實(shí)到賺錢這件事上找田。堂堂正正賺錢的歌憨,肯定會(huì)做好本職的工作,而靠免費(fèi)來引流賺錢的墩衙,肯定免費(fèi)只是表象务嫡,它更多的時(shí)間需要思考怎么變現(xiàn)。

回來說FBX漆改,F(xiàn)BX是Adobe的用于存儲(chǔ)3D數(shù)據(jù)的格式心铃,它本身就不是為游戲而設(shè)計(jì),之所以大家用FBX動(dòng)畫挫剑,一個(gè)原因僅僅是它可以支持游戲去扣。

常見的誤區(qū)2

我不管,我要用C++寫出代碼樊破,使得我的C++程序讀入FBX模型愉棱,并渲染出來的時(shí)候,能夠逼近或者達(dá)到在Maya中一樣的效果捶码。

這一點(diǎn)但凡有經(jīng)驗(yàn)的程序員都不會(huì)這么想羽氮,一般這么想的都是純理論派,從未真正去接觸游戲產(chǎn)業(yè)的人惫恼。我們有大量的證據(jù)可以證明這樣做沒有任何意義档押。但你要是想做,并不是不可能祈纯。

  1. 你使用Unity導(dǎo)入FBX動(dòng)畫模型或者靜態(tài)模型去做游戲的時(shí)候令宿,是直接把模型丟進(jìn)Unity里,打包成AssetBundle后腕窥,就可以直接用的嗎粒没。并非如此,大部分情況都是簇爆,你先把模型導(dǎo)入進(jìn)來癞松,然后給模型各個(gè)submesh貼上心儀的材質(zhì)球爽撒,然后改改shader或者調(diào)調(diào)參數(shù),讓模型外觀看起來更滿意响蓉,最后才是打包發(fā)布游戲硕勿。我們注意到,實(shí)際上在3D建模軟件中的材質(zhì)系統(tǒng)枫甲,實(shí)際上在游戲制作的時(shí)候是沒什么用的源武,無論如何我們都需要手動(dòng)的去調(diào)整我們的模型,讓它在游戲引擎里看起來更加的精致想幻。為什么會(huì)產(chǎn)生這種問題呢粱栖?因?yàn)椋?D建模軟件的渲染系統(tǒng)跟游戲的渲染系統(tǒng)是不一樣的。他們之間的材質(zhì)并不能產(chǎn)生一一對(duì)應(yīng)的關(guān)系脏毯,所以你也不必去為了解碼模型的材質(zhì)而煩惱闹究,因?yàn)槟莻€(gè)根本不重要。這些你后續(xù)手動(dòng)設(shè)置就好了食店。

  2. 我們現(xiàn)在假設(shè)你已經(jīng)能夠做到跋核,在Maya中看到的是什么樣子,你自己寫的程序中就是什么樣子的級(jí)別了叛买。但是Maya中那個(gè)實(shí)時(shí)被渲染出來的模型砂代,你覺得好看嗎?我們很多程序員小姐姐(不好意思率挣,我們忽略了程序員小哥哥刻伊,因?yàn)槲覀兪歉矚g妹子的,不喜歡漢子椒功,攪基者滾)不是美術(shù)妹子捶箱。在3D建模軟件中通常具備兩套以上的渲染系統(tǒng),一套是建模用的动漾,這套系統(tǒng)高效丁屎,但是畫面不那么精致,另一套系統(tǒng)可能是PBRT的旱眯,一幀畫面可能要八年才渲染的出來(或許是八十年)晨川。具體如何操作,請(qǐng)請(qǐng)教美術(shù)妹子删豺」猜牵回到寫程序的方面,即便你能實(shí)現(xiàn)Maya中所有的材質(zhì)球呀页,那又能如何妈拌?你只不過實(shí)現(xiàn)了一套渲染出來很挫的畫面。

在本文的最后蓬蝶,我們希望同學(xué)們回歸正軌尘分,不要在無所謂的事情上瞎折騰猜惋,那只會(huì)讓本來應(yīng)該去談戀愛的時(shí)間,拿來折騰自己培愁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惨奕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竭钝,更是在濱河造成了極大的恐慌,老刑警劉巖雹洗,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件香罐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡时肿,警方通過查閱死者的電腦和手機(jī)庇茫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來螃成,“玉大人旦签,你說我怎么就攤上這事〈绾辏” “怎么了宁炫?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氮凝。 經(jīng)常有香客問我羔巢,道長,這世上最難降的妖魔是什么罩阵? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任竿秆,我火速辦了婚禮,結(jié)果婚禮上稿壁,老公的妹妹穿的比我還像新娘幽钢。我一直安慰自己,他們只是感情好傅是,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布匪燕。 她就那樣靜靜地躺著,像睡著了一般喧笔。 火紅的嫁衣襯著肌膚如雪谎懦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天溃斋,我揣著相機(jī)與錄音界拦,去河邊找鬼。 笑死梗劫,一個(gè)胖子當(dāng)著我的面吹牛享甸,可吹牛的內(nèi)容都是我干的截碴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼蛉威,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼日丹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚯嫌,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤哲虾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后择示,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體束凑,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年栅盲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汪诉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谈秫,死狀恐怖扒寄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拟烫,我是刑警寧澤该编,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站硕淑,受9級(jí)特大地震影響上渴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喜颁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一稠氮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧半开,春花似錦隔披、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纠永,卻和暖如春鬓长,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尝江。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工涉波, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓啤覆,卻偏偏與公主長得像苍日,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窗声,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容