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