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