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