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