编写USDView的插件


  • 网站研运

    在USD安装好之后,我们就要研究如何编写USDView的插件了,因为我们的二次开发功能都是在USD上做的,所以我们要理解USDView的各种机制才能够达到我们研发的目标。这里介绍一下如何编写USDView的插件。

    USDView是USD项目中比较重量级的应用了,基于Qt(PySide,PySide2)和PyOpenGL的应用。底层渲染依然是Hydra。这是一款渲染影视的渲染框架。后端可以接入OpenGL以及英特尔提出的Embree。它在设计的时候也预留了插件的功能。它在官网有详细的教程解释。

    插件本身

    这里我在Linux下演示如何载入USDView的插件。我写好了一个USDView的插件,名叫TutorialPlugin。它由三个插件组成的:

    tutorialPlugin
    ├── __init__.py
    ├── plugInfo.json
    └── printer.py
    

    写法和官网的一致。这里我贴出来吧。
    init.py

    from pxr import Tf
    from pxr.Usdviewq.plugin import PluginContainer
    
    import printer
    
    class TutorialPluginContainer(PluginContainer):
    
        def registerPlugins(self, plugRegistry, usdviewApi):
    
            self._printMessage = plugRegistry.registerCommandPlugin(
                "TutorialPluginContainer.printMessage",
                "Print Message",
                printer.printMessage )
    
        def configureView(self, plugRegistry, plugUIBuilder):
    
            tutMenu = plugUIBuilder.findOrCreateMenu("Tutorial")
            tutMenu.addItem(self._printMessage)
    
    Tf.Type.Define(TutorialPluginContainer)
    

    painter.py

    print("Imported printer!")
    
    
    def printMessage(usdviewApi):
        print("Hello, World!")
    

    plugInfo.py文件在Windows测试中,使用pluginfo.py也能被认识。果然Linux是大小写敏感的,Windows并不敏感。

    {
        "Plugins": [
            {
                "Type": "python",
                "Name": "tutorialPlugin",
                "Info": {
                    "Types": {
                        "tutorialPlugin.TutorialPluginContainer": {
                            "bases": ["pxr.Usdviewq.plugin.PluginContainer"],
                            "displayName": "Usdview Tutorial Plugin"
                        }
                    }
                }
            }
        ]
    }
    

    最后就是自己编写USDView调用的脚本了。因为是Linux,所以脚本是Shell脚本。内容大概是这样的:

    #!/bin/sh
    export LD_LIBRARY_PATH=/usr/local/USD/lib64:$LD_LIBRARY_PATH
    export PYTHONPATH=$PYTHONPATH:/usr/local/USD/lib/python
    
    # 这里非常重要,目的是设置usdView的环境变量,让usdView能够顺利地载入插件
    currentDir=$(cd `dirname $0`; pwd)
    export PXR_PLUGINPATH_NAME=$currentDir/tutorialPlugin
    
    /usr/local/USD/bin/usdview $currentDir/model/7_29_1.usda
    

    比较重要的是设置PXR_PLUGINPATH_NAME变量。为的是让USDView顺利地找到插件位置。大家也可以设置TF_DEBUGPLUG_SEARCH_INFO来检查当PXR_PLUGINPATH_NAME变量设置了以后,究竟有哪些插件得到了载入。
    给一个效果图:
    21d97c31-58ef-41ed-92c3-c27aff391dcc-image.png

    注意其中Tutorial菜单,这就是我们载入的插件。
    如果你对我分享的资产、插件或者是脚本感兴趣,可以加入我创建的小组,在文件分享里找到它。
    上海USD研究小组


Log in to reply
 

走马观花

最近的回复

  • 这个错误没多大影响,qt模块可以在QT setting里进行勾选

    read more
  • 如果对操作不是很熟悉或者是操作不便的话,也可以在Windows的命令行执行NDK的安装。参数是一样的:
    Windows命令行安装NDK

    read more
  • 忘记补充图片了。这里需要点击更新安装才行。😆
    点击更新安装

    read more
  • 问:
    如何在Qt Creator安装NDK呢?
    除了那个🔽 按钮外,还有别的办法吗?
    答:
    Qt Creaator 4.11中更加整合了Android SDK Manager。其实大家都可以不运行默认的Android SDK Manager,直接在Qt Creator中选项->设备->Android,就可以进行操作了。

    通过````高级选项……,启动一些Android SDK Manager,只需要带上参数ndk-bundle```。原来没有NDK的你,也可以通过Android SDK Manager安装了。很简单吧。
    Android SDK Manager安装NDK

    read more

关注我们

微博
QQ群