• 為動作捕捉設備寫MOTIONBUILDER插件

    2018/5/29      點擊:

    1、將動捕服數據實時接入(rù)到MoBu(Motion Builder簡寫,下同)

    2、將retarget後的(de)動作數據實時導出到3D引擎裏驅動模型

    3、在MoBu裏K相機動畫曲線,將相機參數同步到引擎裏,輕鬆實現機位變動切換等需求。

    我主要就是寫這麽3個(gè)device插件來(lái)完(wán)成這些功能。

    以(yǐ)前沒接觸過Autodesk係列的軟件,對MoBu也完全沒聽說(shuō)過,因此(cǐ),要開發我想要的功能,必須仔細(xì)讀一讀它的SDK文(wén)檔。

    MoBu的SDK文檔寫的很不全,很多細節都完全沒(méi)有涉及。主要是大致介紹了一(yī)下軟件的實(shí)現的概念構成,代碼實現層(céng)麵幾個重(chóng)要類的介紹,講解(jiě)了一下概念體(tǐ)係裏比較典型的幾(jǐ)個關係,還有關於Animation的一些稍微比較(jiào)詳細(xì)一點的介紹。從閱讀SDK文檔(dàng)開始,到寫出第(dì)一個插件--input device插件,耗時近1個月,大部分時間是跟著文檔走,嚐試(shì)盡量理解它。後來的幾個插件就很容易了,基本上拷(kǎo)貝粘貼再稍(shāo)微改改就出來了。

    我(wǒ)的經驗是:MoBu的擴展開發其實是可(kě)以很容易(yì)掌握(wò)的,快速掌握的方法,就是充分利用Python。

    MoBu的windows菜單項裏有Python Editor一(yī)項,打開它,就(jiù)是軟(ruǎn)件集(jí)成的python解釋器。基本上一般的功能都能直接在這個解釋器(qì)裏直接調用執行。我在這個解釋器裏,跟著SDK文檔(dàng)裏的Your First Python程(chéng)序,完整地敲了一遍實例代碼,每一行都要理解,碰到不懂的概念,就去看文檔的其(qí)他部分的介紹,這個例(lì)子裏幾乎有實現我的插件需(xū)求的全部工具了。

    下麵,我就(jiù)羅列一(yī)下我腦子裏還記(jì)得的比較常(cháng)用的一些(xiē)概念。

    先說打開軟件第一眼(yǎn)看到的大的畫了一張格子的窗(chuāng)口,這就是場景窗口,或說視圖窗(chuāng)口,可以有若(ruò)幹個視圖窗口同時存(cún)在。所有的視圖窗口展現的都(dōu)是同(tóng)一棵對象樹,隻(zhī)不過可能展示的是這棵樹的不同(tóng)部分或角度。而且MoBu裏有(yǒu)且隻有這麽一棵樹,它叫Scene。我們的(de)MoBu軟件(jiàn)係統名稱叫FBSystem()。你可以在python editor裏敲下(xià)FBSystem().Scene.Name,它打印出來字符串“Scene”,這裏的FBSystem().Scene就是剛才說的那棵猥瑣的樹Scene。我說它是樹,不是指它在內存裏就是一種樹數據結構來實現的(de),而(ér)僅僅是指可以理解(jiě)成這(zhè)麽一棵樹的形(xíng)狀(zhuàng),各種物件都以一定層次關係掛在這棵樹上,我們的視圖窗口就從某個角度來畫出這個窗口裏看到(dào)的這棵樹的樣子。我們用戶的界麵操作,就是往這棵樹上掛東西或(huò)拿掉東西,以及操(cāo)作樹上的東西。這個就是總的直觀的概念,有了這個總的直觀的印象,細枝末節就可以慢慢來加深理解了。

    接下來看軟件的左下角窗口,是所謂的Navigator Window(在默認布局下(xià))。這個破窗口,看起來像個(gè)樹狀結構(gòu)。那當然了,它大部分功能,就是顯示我們的Scene樹的層次樣貌。先看窗口裏的第一個節點,叫Scene,這個名字*無(wú)厘頭,因為我們的(de)Scene樹裏沒有叫(jiào)Scene的子節點。我們先通過File菜單或者Asset Browsering窗口加載一個模型,然後跑(pǎo)一下代碼:


    1
    2
    3
    scene=FBSystem().Scene
    for i in scene.RootModel.Children:
        print i.Name

    看看打(dǎ)印出來(lái)的字符串,我就發現和Navigator窗口裏Scene節點下第(dì)一級子節點的內容一樣(yàng)。這再明顯不過了,這裏的Scene節點展示的其(qí)實是我們(men)Scene樹的RootModel節點的內容。所以我覺(jiào)得這個(gè)Scene節點應該改名叫RootModel。

    因此,要強調的是,程(chéng)序員的視角不(bú)要關(guān)注這個Navigator窗口,而應該牢牢記住那棵Scene樹的樣子。

    接下來(lái),打開FBScene的文檔,查看它的定義,能看到裏麵有很多屬性成員,所以,下麵的代碼成立:


    1
    2
    3
    4
    print scene.Cameras.Name
    print scene.Characters.Name
    print scene.Lights.Name
    # WiseGlove go!

    看看(kàn)結果就知道,那個Navigator窗口的那些節點倒是和這些屬性比較配合,還有個別對不上號(hào)的(de)節點(diǎn),點(diǎn)開看看屬性大概也能猜出是啥意思。這個Navigator窗口對程序員來說沒(méi)多大作用,把它理(lǐ)解為展示了Scene樹(shù)的部分層次樣貌以及(jí)軟件係統的統計(jì)信息以及一些其他信息就夠了。


    91网站入口_91视频导航_91短视频在线_91视频在线免费观看