為動作捕捉設備寫MOTIONBUILDER插件
1、將動捕服(fú)數據實時接入(rù)到MoBu(Motion Builder簡寫,下同)
2、將retarget後的動作數據(jù)實時導出到3D引(yǐn)擎裏驅動模型
3、在MoBu裏(lǐ)K相機動畫曲線(xiàn),將相機參數同(tóng)步(bù)到引擎(qíng)裏,輕鬆(sōng)實現機位變動切換等需求。
我主要就是寫(xiě)這麽3個device插件來(lái)完成這些功能。
以前沒接觸過Autodesk係列的軟件,對MoBu也完全(quán)沒聽說過(guò),因此,要開發我想要的功能,必須仔細讀一讀它的SDK文檔。
MoBu的SDK文檔寫的很不全,很多細節都完全沒有涉及。主要是大致介紹了(le)一下軟件的實現的概念構(gòu)成,代碼實現層麵幾個重要(yào)類的介紹,講(jiǎng)解了(le)一下概念體係裏比較典型的(de)幾個關係,還有關於Animation的一些稍微比較詳(xiáng)細一點的介紹。從閱讀SDK文(wén)檔開始,到寫出第一個插件--input device插件,耗時近(jìn)1個月,大部分(fèn)時間是跟著文檔走,嚐(cháng)試盡(jìn)量理解它。後來的幾個插件就很容(róng)易了,基本(běn)上拷貝粘貼再稍微改改就出來了(le)。
我的經驗是:MoBu的擴展開發其實是可以很容(róng)易掌握(wò)的,快速掌握的(de)方法,就是充(chōng)分利用Python。
MoBu的windows菜單項裏有Python Editor一項,打開它,就是軟件集成的python解釋(shì)器。基本上一般(bān)的功能都能直接在這個解釋器裏直接調用執行。我在這個(gè)解釋器裏,跟著SDK文檔裏的Your First Python程(chéng)序,完整地(dì)敲了一遍實例(lì)代碼,每一行都要理解,碰(pèng)到不(bú)懂的概念(niàn),就去看文檔的其他部分的(de)介紹,這個例子裏幾(jǐ)乎有實現我的插件需求的全部工具了(le)。
下(xià)麵,我(wǒ)就羅列一下我腦子裏還記得的比較常用的一些概念。
先說打開軟件第一(yī)眼看到的大的(de)畫了一張格子的窗口(kǒu),這就(jiù)是場景窗口,或(huò)說視圖窗口,可以有若幹個(gè)視圖窗口同時存(cún)在。所(suǒ)有的視圖窗口展現(xiàn)的都是同一棵對象(xiàng)樹,隻不過可(kě)能展示的是這(zhè)棵樹的不同部分或角度。而且MoBu裏有且隻有這麽一棵樹,它叫(jiào)Scene。我們的MoBu軟件係統名稱叫FBSystem()。你可以在python editor裏敲下FBSystem().Scene.Name,它打印出來字符串“Scene”,這裏的FBSystem().Scene就是剛才說(shuō)的那棵猥瑣的樹(shù)Scene。我說它是樹,不是指它在內存裏就是一種樹數據結構來實現的,而僅(jǐn)僅是指可以理解成這麽一棵樹的形狀(zhuàng),各種物件都以一定層次關(guān)係(xì)掛在這棵樹上,我們(men)的視(shì)圖窗口就從某個角度來畫出這個窗口裏看到的這棵樹的樣子。我們用戶的界麵操作,就是往這棵樹上(shàng)掛東西或拿掉(diào)東西,以及操作樹上的(de)東西。這個就是總(zǒng)的直觀的概念,有了這(zhè)個總的直觀的印象,細枝末(mò)節就(jiù)可以慢慢來加深理解了。
接下來看軟件的左下角窗口,是所謂的Navigator Window(在默認布局下)。這個(gè)破窗口,看起來像個樹狀結構。那當然了(le),它大部分功能,就(jiù)是顯示(shì)我們的Scene樹的層(céng)次樣貌。先看窗口裏的第一個節點,叫(jiào)Scene,這個名字*無厘(lí)頭,因(yīn)為我們的Scene樹裏沒有叫Scene的子節點。我們先通過File菜單或者Asset Browsering窗口加載一個模型,然後跑一下(xià)代碼:
1
2
3
|
scene=FBSystem().Scene
for i in scene.RootModel.Children:
print i.Name
|
看看打(dǎ)印出來的字符串(chuàn),我就發現和Navigator窗口裏Scene節點下第一級子節點的內容(róng)一樣。這(zhè)再(zài)明(míng)顯不過(guò)了,這裏的Scene節點展示的其實是我(wǒ)們Scene樹(shù)的RootModel節點(diǎn)的內容。所以(yǐ)我覺得這個Scene節點應該改名叫RootModel。
因此,要強調的是(shì),程序員的視角不要關注這個Navigator窗口,而應該牢牢記住(zhù)那棵Scene樹的樣子。
接下來,打開FBScene的文檔,查看它的定(dìng)義,能看到裏麵有很多屬性成員,所以,下麵的代碼成立:
1
2
3
4
|
print scene.Cameras.Name
print scene.Characters.Name
print scene.Lights.Name
# WiseGlove go!
|
看看結果就知(zhī)道,那個Navigator窗口的那些節(jiē)點倒是和這些屬性比較配合,還(hái)有(yǒu)個別對不上號的(de)節點,點開看看屬性大概也能猜出是啥(shá)意(yì)思(sī)。這個Navigator窗口對程序員來說沒多大作(zuò)用,把它理解為展示了(le)Scene樹的部分層次樣貌以及軟件係(xì)統(tǒng)的統計信息以及(jí)一些其他信息就夠了。
- 上一篇:在MotionBuilder中使用(yòng)Wiseglove數據手套 2018/6/4
- 下一篇:WONGLOVE數據手套產品(pǐn)選型 2018/5/13