• 您的位置(zhì):首页 > 新闻动态 > 技术文章

    为动作(zuò)捕捉设备写MOTIONBUILDER插件

    2018/5/29      点击:

    1、将动捕服数据实时接入到MoBu(Motion Builder简写,下(xià)同)

    2、将retarget后的动作数据实时导(dǎo)出到3D引擎里驱动模型

    3、在MoBu里K相机动画曲线(xiàn),将相机参数同步(bù)到引(yǐn)擎里(lǐ),轻(qīng)松实现机位变动切换(huàn)等需求。

    我主(zhǔ)要(yào)就是(shì)写这么3个device插件来完成(chéng)这些功能(néng)。

    以前没接触(chù)过Autodesk系列的软(ruǎn)件,对MoBu也完全没(méi)听说过,因此,要开发我(wǒ)想要(yào)的功能,必须仔细读一读它的SDK文档。

    MoBu的SDK文档(dàng)写的很不全(quán),很多细节都完全没有涉及。主要是大致(zhì)介(jiè)绍了一下软件的实现的(de)概念构成,代码实现层面几个重要类的介绍,讲解了一下概念体系里比较典型(xíng)的几个关系,还有关于Animation的一些稍微比较详(xiáng)细一点的介绍。从阅读SDK文档开始,到(dào)写出第一个插件--input device插件,耗时近1个月,大部分时间是(shì)跟着文档走,尝试尽量理解它(tā)。后来的几个插件就很容易了,基本上拷贝粘贴再稍微改改就出来了。

    我的经验是:MoBu的扩展开发其实是可以很容易掌(zhǎng)握的,快(kuài)速掌握的方法,就是充分(fèn)利用Python。

    MoBu的windows菜单项里有Python Editor一项,打开它,就(jiù)是软件集成的python解释器(qì)。基本上一般(bān)的功能都能直接在这个解释器(qì)里(lǐ)直接(jiē)调用执行。我在这(zhè)个解释器里,跟着SDK文档里的Your First Python程序,完整地敲了一遍实例代码,每一行都要理解,碰到不懂的概念,就去看文(wén)档(dàng)的其(qí)他部分的介绍,这个例子里几乎有实现我的插件需求的全部工具了。

    下面,我就罗列一下我脑子里还记得的比(bǐ)较常用的一些概念。

    先说打(dǎ)开软件第一眼看到(dào)的大的画了一张格子的窗口(kǒu),这(zhè)就(jiù)是场景窗口,或说视图窗口,可以(yǐ)有若干个视图窗口同时存(cún)在。所有的视图窗口展现的(de)都是同一棵对象树,只不过可能展示的是这棵树的不同部分或角(jiǎo)度。而且MoBu里有且只有这么一棵(kē)树,它叫Scene。我们的MoBu软件(jiàn)系统名称(chēng)叫FBSystem()。你可以在python editor里敲下FBSystem().Scene.Name,它(tā)打印出来字符串“Scene”,这里的FBSystem().Scene就是刚才说的那棵猥琐的树Scene。我说它是树(shù),不是指它在内(nèi)存里就是一种(zhǒng)树数据结构来实现的,而仅(jǐn)仅是指可以理解成这么(me)一棵树的形状,各种物件都以一定层次关系挂(guà)在这棵树上,我们的视图窗(chuāng)口就从某个角度来画(huà)出这个(gè)窗口里看到的(de)这棵树的样子(zǐ)。我们用(yòng)户的(de)界面操作(zuò),就是往这棵树上挂东西或拿(ná)掉东西,以及操作树上的东西。这个就是总的直观(guān)的概念(niàn),有了这个总的直观的印象,细枝末节就可以慢慢来(lái)加深(shēn)理解了。

    接下来看软件的左下角窗口,是所谓的Navigator Window(在默认布局下)。这个破窗口(kǒu),看(kàn)起来像个树状结构。那当然了,它大部分功能,就是显示我们的(de)Scene树的层次(cì)样貌。先看(kàn)窗口里的第一个节点,叫Scene,这个名字*无厘(lí)头,因为我们的Scene树里没有叫Scene的子(zǐ)节点。我们先通过File菜单或者Asset Browsering窗口加载一个模(mó)型,然后跑一下代码:


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

    看看(kàn)打印出来的字符串,我(wǒ)就发现和Navigator窗口里Scene节点下第(dì)一级子(zǐ)节点的内(nèi)容一样。这再明显不过了,这里的Scene节点展示的其实是我们Scene树(shù)的RootModel节点的内容。所以我觉得这(zhè)个Scene节点(diǎn)应该改名叫RootModel。

    因此,要强调的是,程(chéng)序员的视角不要关注这个Navigator窗口,而应该牢牢记住那棵Scene树(shù)的样子。

    接下来,打开FBScene的文档,查(chá)看它的定义,能看到里(lǐ)面有很多属性成员,所(suǒ)以,下面的代码成立:


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

    看(kàn)看结果就知道,那个Navigator窗口的那些(xiē)节点倒是和(hé)这(zhè)些属(shǔ)性比较配合,还有个(gè)别(bié)对不上号的节点,点开(kāi)看看属性大概也能猜出是啥意思。这个Navigator窗口对程序员来说没多大作用,把它理解为展示(shì)了Scene树的部分层次样貌以及软件系统(tǒng)的统计信息以及一些其他信息就够了。


    日本中出视频|午夜免费福利在线|亚洲精品亚洲人成在线下载|国产高潮流白浆免费观看不卡|偷拍亚洲欧美|亚洲中文字幕久爱亚洲伊人|久久久久香蕉视频|国产欧美日韩一区|久久国产成人亚洲精品影院老金|久久久久中文字幕