Group Details Private

Global Moderators

Forum wide moderators

 
  • Maya插件的学习

    MStatus是描述Maya状态的一个类。其中MStatus.perror()表示在Output Window中显示错误信息。
    MPxLocatorNode 是NPxNode的一个子类,它表示的是类似坐标轴等辅助的节点,它不参加渲染,只是起辅助作用。可以使用原生的OpenGL调用。
    MPxDeformerNode 是描述的是形变的节点,定义的是形变的内容。

    获取物体的类别可以写这样的Python代码:
    import maya.cmds
    print cmds.getClassification( "lambert" )
    可得:[u'drawdb/shader/surface/lambert:shader/surface']
    参考:https://help.autodesk.com/view/MAYAUL/2019/CHS/?guid=__CommandsPython_getClassification_html

    MPx开头的类表明是Proxy的类
    MFn开头的类表明是Function Set类

    Maya的例子FootPrintNode和RawFootPrintNode的区别是RawFootPrintNode它有实现draw()函数,它实现了跨渲染器(DX和OpenGL)的渲染。😛

    posted in 技术博客区
  • 开发Maya最简单插件的步骤

    由于我使用的是Maya 2018,而Maya 2018是在Visual Studio 2017上进行编译的,所以我们需要下载Visual Studio 2017。
    1、首先打开Visual Studio 2017,创建一个简单的VS项目。Ctrl + Shift + N,使用Windows桌面向导进行创建。

    注意不要创建stdafx.h 头,不使用stdafx头进行构建。
    然后创建一个文件FirstMayaPlugin.cpp 进行处理。

    2、将Debug改为ReleaseDebug,并且将win32改为x64。

    3、设置下面的属性
    3.1 附加包含目录中,要有D:\Develop\devkitBase\include
    3.2 优化改为已禁用,为了调试符号的正确性
    3.3 预处理宏中添加这些:

    NDEBUG
    OSWin_
    WIN32
    _WINDOWS
    _USRDLL
    NT_PLUGIN
    _HAS_ITERATOR_DEBUGGING=0
    _SECURE_SCL=0
    _SECURE_SCL_THROWS=0
    _SECURE_SCL_DEPRECATE=0
    _CRT_SECURE_NO_DEPRECATE
    TBB_USE_DEBUG=0
    __TBB_LIB_NAME=tbb.lib
    Bits64_
    

    3.4 附加库目录设为D:\Develop\devkitBase\lib
    3.5 附加依赖项设为
    Foundation.lib
    OpenMaya.lib
    3.6 改目标文件扩展名为.mll

    4、在FirstMayaPlugin.cpp 中添加以下的代码:

    #include <maya/MStatus.h>
    #include <maya/MObject.h>
    #include <maya/MFnPlugin.h>
    
    #include <maya/MStatus.h>
    #include <maya/MObject.h>
    #include <maya/MFnPlugin.h>
    
    MStatus initializePlugin( MObject obj )
    {
    	MStatus status;
    	MFnPlugin plugin( obj, "Next Digital", "1.0", "Any" );
    	return status;
    }
    
    MStatus uninitializePlugin( MObject obj )
    {
    	MStatus status;
    	return status;
    }
    

    就可以顺利地编译了。

    这个插件就可以在Maya中顺利地进行载入了。

    posted in 技术博客区
  • Maya Viewport 2.0 学习笔记

    一些数据结构以及释义
    MVertexBuffer:对显卡的Vertex Buffer进行封装;
    MIndexBuffer:对显卡的Index Buffer进行封装;
    MGeometryRequirement
    MRenderItem:渲染的项目,包含了一个index buffer,多个vertex buffer,选定的着色器
    renderpasses:渲染的次数
    MVertexBufferDescriptor
    MVertexBufferDescriptionList
    MRenderItemList
    MPxDrawOverride:重新组织渲染语言的API,包括OpenGL的调用
    MPxGeometryOverride:整合外部着色器和DAG对象
    MPxShaderOverride:低层着色组织
    NPxSbadingNodeOverride:如何插件与其它软件的交互
    对比:NPxShaderOverride:全部渲染网络需要,NPxShadingNodeOverride:仅仅与其它插件的交互

    RenderOperation:类似一个renderpass
    渲染的Operation
    1、背景的Operation
    2、3D场景的Operation
    3、2D的HUD的Operation
    4、用户自定义Operation
    5、四方blt的Operation
    6、对象presentation的Operation

    MShaderManager

    开发者例子:viewRenderOverride

    Maya的渲染节点构成的是DAG(有向无环图),包含了transforms和shapes。
    MFnAssembly、MPxAssembly。

    posted in 技术博客区
  • 简明编译USD的步骤

    USD全称是Unified Scene Discription,是Pixar流程里推崇的一个规范。目前已经开源到github上了,作为普通开发者的我们,也可以利用起它。现在我介绍一下如何构建USD。

    USD的构建步骤还是有些繁琐的,需要你安装很多依赖库。
    下面列举了一些重要的依赖库:

    cmake 3.13.0
    cuda 10.0.130
    git for windows 2.19.1
    Maya 2018
    nasm 2.14.02
    Visual Studio 2017

    还有诸如Boost等第三方库依赖,这里就不介绍了。它里面的一个脚本build_script.py可以自动从固定的下载路径中下载需要的依赖然后顺利地进行编译。

    把这些东西安装好了之后,开始打开命令行,开始编译USD项目:
    假设所有依赖库放在D:\Develop文件夹中,我们可以在D盘根目录下建立一个批处理文件build_usd.bat。文件的内容是这样写的:

    :: 构建USD的脚本
    
    set Path=%Path%;D:\Develop\Python27;D:\Develop\Python27\Scripts;D:\Develop\NASM;D:\Develop\Autodesk\Maya2018\bin
    set PYTHONPATH=%PYTHONPATH%;D:\Develop\Autodesk\Maya2018\Python\Lib\site-packages;D:\Develop\Autodesk\Maya2018\Python\Lib\site-packages
    
    :: 复制pyside2-uic到pyside-uic.exe 中,使其造成能够找到pyside2-uic.exe的假象
    copy D:\Develop\Autodesk\Maya2018\bin\pyside2-uic D:\Develop\Autodesk\Maya2018\bin\pyside2-uic.exe
    
    :: 使用pip安装PyOpenGL
    pip install PyOpenGL
    
    :: 最后构建USD项目
    python .\USD\build_scripts\build_usd.py ^
    -j12 ^
    --build-args "USD,-DPYSIDE_USE_PYSIDE2=TRUE -DPYSIDE_BIN_DIR=D:\Develop\Autodesk\Maya2018\bin" ^
    --maya --maya-location D:\Develop\Autodesk\Maya2018\bin ^
    .\USD_Build
    

    这里因为要使用PySide2来代替PySide1进行构建(Maya2018附带了PySide2以及Qt 5.6.1,所以我们需要指定PySide2的开关。

    随后注意使用“适用于 VS 2017 的 x64 本机工具命令提示”这个命令提示符打开,主要我们想构建的是64位的应用程序。

    posted in 技术博客区
  • RE: Maya中使用PyQt开发笔记

    @jiangcaiyang 还是需要了解一下PyQt和Qt for Python的区别的。
    PyQt不是Digia原厂出的库;
    Qt for Python是Digia原厂出的库;原厂出的有保证。
    但是双方都有公司支持。目前PyQt使用范围广一些。但是一些大厂比如说Maya会使用Qt for Python更多一些。

    目前Maya使用的是Qt 5.6.1,并且根据自己的项目对Qt做了一些小的修改。然后Qt 5.6.1的时候还没有Qt for Python,而是PySide2。因此Maya2018使用的是PySide2。

    posted in 技术博客区
  • Maya中使用PyQt开发笔记
    1. Maya的mainwindow如何获得?
    from maya import OpenMayaUI as omui
    from shiboken2 import wrapInstance
    
    mayaMainWindowPtr = omui.MQtUtil.mainWindow( )
    mayaMainWindow = wrapInstance( long( mayaMainWindowPtr ), QWidget )
    
    posted in 技术博客区
  • RE: Maya中使用插件初探

    写了一个Hello World的功能,点击按钮关闭窗体。代码是这样的:

    from PySide2.QtWidgets import QWidget
    from PySide2.QtWidgets import QPushButton
    from PySide2.QtWidgets import QVBoxLayout
    
    w = QWidget( )
    w.resize( 300, 200 )
    button = QPushButton( "Hello World" )
    button.clicked.connec( w.close )
    layout.addWidget( button )
    w.setLayout( layout )
    w.show( )
    

    是不是和以前的Qt很像呢~

    posted in 技术博客区
  • Maya中使用插件初探

    大家都知道Maya是一款非常厉害的动画编辑软件,它的功能也是非常的强大的。我们呢,也希望借助Maya强大的能力做到一些方便建模师的一些功能。这就需要Maya的插件系统了。Maya的插件也是非常多非常厉害的。事实上Maya也是一个包含了多个插件的巨大软件。它依赖了Qt、PyQt和其它很多很多不同功能的插件。

    这里呢,我记录一下怎样能够使用Maya编写插件。首先打开Maya2018:
    IMG_20190312_143729.jpg
    然后右下角有一个花括号的图标,点击就打开了脚本编辑器。脚本编辑器既可以支持Python脚本,也可以支持MEL脚本。其中MEL脚本是Maya专用的脚本格式。

    现在我在里面输入一串代码:
    print "Hello World!"
    可以在上面的输出栏中看到效果:

    以上就是我对Maya使用插件的初探。看来还是很简单的😙 😙 😋IMG_20190312_143805.jpg

    posted in 技术博客区
  • RE: 统一场景描述(USD)的构建方法

    有关USD在Maya中构建插件的方法,主要可以参考这篇文章:
    https://graphics.pixar.com/usd/docs/Maya-USD-Plugins.html

    这里有很多的介绍,包含了USD这个项目的优势等等。

    posted in 技术博客区
  • RE: 网赌盈利被黑不给出款怎么解决

    可以很强,不过我们并不是很了解。

    posted in 梦想广场