• 為動作捕捉設備寫(xiě)MOTIONBUILDER插件

    2018/5/29      點擊:

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

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

    3、在MoBu裏K相機動畫曲線,將相機(jī)參數同步到引擎裏,輕鬆(sōng)實現(xiàn)機位變動切換(huàn)等需求。

    我主要就是寫這麽3個device插件來完成這些功能。

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

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

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

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

    下麵,我(wǒ)就羅列一下我腦子裏還記得的比較常用的一些概念。

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

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


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

    看看打印出來的字符串,我就發現和Navigator窗口裏Scene節點下第一級子節點的內容一樣。這(zhè)再明顯(xiǎn)不過了,這裏的(de)Scene節點展(zhǎn)示的其實是我們Scene樹的RootModel節點的內容。所以(yǐ)我覺得這個Scene節點應該改名叫RootModel。

    因此,要強(qiáng)調的是(shì),程(chéng)序員的視角不要(yào)關注這個Navigator窗口,而應(yīng)該牢牢記住那棵Scene樹的(de)樣子。

    接下(xià)來,打開FBScene的文檔,查看它的定義,能(néng)看到裏麵(miàn)有很多屬性成員,所以,下麵的代碼成立:


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

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


    网站地图 正能量网-传播正能量弘扬主旋律-免费正能量网站www正能量-免费正能量网站www正能量下载在线观看官网