当前位置: > 3dmax模型制作 > Maya教程 >

创建Arnold着色器
栏目分类:Maya教程   发布日期:2019年05月12日 15:48:25   浏览次数:


跳到横幅结尾
 
去开始横幅
 
跳到元数据结束
 
转到元数据的开头

1.1创建Arnold着色器

 

要在Maya用户界面中使此着色器可用,必须向其添加特定于应用程序的元数据。


1.2在Maya中使用着色器


1.2.1使用元数据文件向着色器添加Maya元数据


添加元数据的首选方法是创建在 加载着色器时自动使用的元数据文件。这样,无需重新编译着色器就可以更轻松地进行修改。这也将Maya特定元数据保存在MtoA文件夹中,而不是在着色器本身(您可能希望在Maya外部重用)中。 

这显示在以下代码中:

simpleShader.mtd

# simple                    0x00070000
 
[node simple]
    maya.name               STRING  "mySimple"
    maya.id                 INT      0x00070000
    maya.classification     STRING  "shader/surface"
    maya.output_name        STRING  "outColor"
    maya.output_shortname   STRING  "out"
 
    [attr color]

 

        maya.name           STRING  "constantColor"
如果不为着色器指定maya.name,则会自动为着色器指定一个名称,该名称是由ai预先固定的Arnold节点名称。在这种情况下,名称将是aiSimple。 

 

1.2.2为着色器选择Maya ID


来自Autodesk的帮助:

对于永远属于站点内部的插件,请使用带有单个unsigned int参数的构造函数。数字范围0 - 0x7 ffff(524288 ids)已保留用于此类插件。 
插件开发工具包中随Maya提供的示例插件将使用0x80000 - 0x ffff f(524288 ids)范围内的ID。如果您自定义其中一个示例插件,则应更改ID以避免将来发生冲突。
打算在站点之间共享的插件需要具有全局唯一ID。Autodesk开发者网络(ADN)将以256块为单位提供此类ID。您将被分配一个或多个24位预备。获得此内容后,使用带有两个unsigned int参数的MTypeId构造函数。pre fi x进入第一个参数,你负责管理进入第二个参数的256个ID的分配。对于本文,我们将使用   从0x70000开始的ID,但您可以随意使用更适合您的ID。此外,如果您正在开发一个您想与MtoA社区分享的优质着色器,请 随时向我们询问Autodesk向MtoA授予的ID。


1.2.3为着色器创建Maya界面


如果您还想为此着色器创建Maya界面,请创建以下文件:

mySimpleTemplate.py

import pymel.core as pm
import mtoa.utils as utils
import mtoa.ui.ae.utils as aeUtils
from mtoa.ui.ae.shaderTemplate import ShaderAETemplate
 
class AEmySimpleTemplate(ShaderAETemplate):
 
    def setup(self):
        # Add the shader swatch to the AE
        self.addSwatch()
        self.beginScrollLayout()
 
        # Add a list that allows to replace the shader for other one
        self.addCustom('message''AEshaderTypeNew',
        'AEshaderTypeReplace')
 
        # Begins a "Color Section"
        self.beginLayout("Color Section", collapse=False)
        # Add a control for the "constatColor" shader attribute
        self.addControl("color", label="Color",
        annotation="Constant Color")
 
        self.endLayout()
 
        # include/call base class/node attributes
        pm.mel.AEdependNodeTemplate(self.nodeName)
 
        # Add Section for the extra controls not displayed before
        self.addExtraControls()
        self.endScrollLayout()

在该addControl方法中,第一个参数是着色器属性名称或该属性的maya.name元数据。所以在这种情况下,参数可以是:constantColor或color。

请注意,定义类的名称应为:AE<shader_name>Template 和文件名称<shader_name>Template.py,其中<shader_name>是着色器的maya.name元数据的值。


1.2.4放置文件的位置


为了使您的着色器在Maya中正常工作,将文件命名并放置在正确的位置非常重要  。你应该有三个  文件:

编译着色器

这是您编译的着色器,它将负责着色器行为。在此示例中,它simpleShader.dll位于Windows中。您可以将其复制到:%MTOA_PATH%shaders或环境变量中包含的任何其他文件夹%ARNOLD_PLUGIN_PATH%

元数据文件

这是所有元数据信息所在的文件。这将添加Maya对着色器所需的信息。此文件的名称必须与编译的文件相同,但扩展名为.mtd。在此示例中,文件名为simpleShader.mtd。此文件必须复制到编译着色器所在的同一文件夹中。 

模板文件

这是定义此着色器的Maya模板的文件。此文件的名称及其中的类名必须遵循上一节中的规则。在这个例子中,它是mySimpleTemplate.py。此文件可以复制到此文件夹: %MTOA PATH%scriptsmtoauie 或复制到环境变量中包含的任何其他文件夹 %MTOA_TEMPLATES_PATH%

现在,如果一切都在正确的位置,当您在Maya中使用aiSimple着色器时,您将能够看到它的属性编辑器。

图3:简单模板


1.2.5在源代码中为您的着色器添加Maya元数据(高级)


尽管不推荐,也可以在代码中放置Maya元数据,而不是使用元数据文件。以下示例代码显示了此语法,但请记住,单独的元数据文件更灵活。 
这种方法的一个很好的用途是添加所需的元数据,这些元数据不是任何插件。

mayaShader.cpp

node_parameters
{
    // Node metadata
    AiMetaDataSetStr(mds, NULL, "maya.name""aiSimple");
    AiMetaDataSetInt(mds, NULL, "maya.id", 0x00070000);
    AiMetaDataSetStr(mds, NULL, "maya.classification""shader/surface");
    AiMetaDataSetStr(mds, NULL, "maya.output_name""outColor");   
    AiMetaDataSetStr(mds, NULL, "maya.output_shortname""out");
 
    AiParameterRGB("color", 0.7f, 0.7f, 0.7f);
    AiMetaDataSetStr(mds, "color""maya.name""constantColor");

 

}

相关热词: 着色器教程ArnoldMaya

     
游戏模型设计 3dmax模型制作 次世代模型 游戏模型百科 游戏模型贴图