• 為動作(zuò)捕捉設備寫MOTIONBUILDER插件

    2018/5/29      點擊:

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

    2、將retarget後的動作(zuò)數據實時導出(chū)到3D引擎裏(lǐ)驅動模型

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

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

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

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

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

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

    下麵,我就羅列一下(xià)我(wǒ)腦(nǎo)子(zǐ)裏還記得的比較常用的一些概念。

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

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


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

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

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

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


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

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


    自愉色色,亚洲色孩,jk无遮拦,日日夜夜7799天天综合,999夜夜,7799天天综合天天综合网精品视频,日日夜夜精品视频7799,天天综合7799精品影视