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

Arnold怎么创建滤镜着色器?
栏目分类:Maya教程   发布日期:2019年05月14日 10:22:18   浏览次数:


要创建此着色器,您将需要像以前一样的源代码文件,加载器,元数据和模板。我们将在这里看一看。

4.1创建着色器

我们可以将光滤镜着色器添加到我们在前面部分中创建的上一个着色器加载器中:

首先,创建着色器:

simpleLightFilter.cpp

#include <ai.h>
 
 
AI_SHADER_NODE_EXPORT_METHODS(SimpleLightFilterMtd);
 
 
enum simpleLightFilterParams {
    p_intensity
};
 
 
    node_parameters
{
    AiParameterFlt("Intensity"0.0f);
}
 
node_initialize
{
}
 
node_update
{
}
 
node_finish
{
}
 
shader_evaluate
{
    // test if we are running as a light filter
    if (sg->light_filter)
    {
       float intensity = AiShaderEvalParamFlt(p_intensity);
       sg->light_filter->Liu = sg->light_filter->Liu*intensity;
    }

 

}

现在,要将着色器添加到加载器,您只需要将此代码添加到loader.cpp前面部分的前一个文件中:

loader.cpp

...

extern AtNodeMethods* SimpleLightFilterMtd;
 
 
enum{
    SHADER_1 = 0,
    SHADER_2,
    PARAMETERS_SHADER,
    SIMPLE_LIGHT_FILTER
};
...
 
 
    case SIMPLE_LIGHT_FILTER:
        node->methods        = SimpleLightFilterMtd;
        node->output_type    = AI_TYPE_RGB;
        node->name           = "simpleLightFilter";
        node->node_type  = AI_NODE_SHADER;
        break;
...

您将能够再次编译光照滤镜和装载器,如前面部分所述,检查Arnold是否可以正确加载着色器,并将编译后的着色器复制到正确的文件夹(就像它是一个普通的着色器一样),以便Maya可以使用它。

4.2在Maya中集成光过滤器

要在Maya中集成一个光照滤镜,我们需要在元数据文件中添加额外的信息,并创建模板脚本,如上一节所述。

4.2.1添加光过滤器元数据信息

要添加元数据信息,您只需将其添加到前面部分中创建的loader.mtd文件中,该文件放在与编译的着色器文件相同的文件夹中。

loader.mtd

[node simplyLightFilter]
    maya.name           STRING  "aiSimplyLightFilter"
    maya.id             INT     0x00070004
    maya.classification STRING  "light/filter"
    maya.lights         STRING  "pointLight spotLight"
 
    [attr Intensity]
        maya.name       STRING  "lightIntensity"
        softmin         FLOAT   0
        softmax         FLOAT   10

 

        default         FLOAT   1

这里将maya.classification设置为“light / filter”非常重要。并将maya.lights设置为一个字符串,其中包含可以使用此灯光的所有灯光:ambientLight,directionalLight,pointLight,spotLight,areaLight或aiAreaLight。

4.2.2添加Maya模板

与前面的部分一样,我们可以为此光照滤镜创建一个简单模板,与普通着色器相同。无论如何,我们将避免一些在光照滤波器中没有意义的命令:

aiSimpleLightFilterTemplate.py

import pymel.core as pm
from mtoa.ui.ae.shaderTemplate import ShaderAETemplate
 
class AEaiSimpleLightFilterTemplate(ShaderAETemplate):
    def setup(self):
        self.beginScrollLayout()
 
        self.beginLayout("Parameters", collapse=False)
        self.addControl('lightIntensity', label="Light Intensity")
 
        self.endLayout()
 
        pm.mel.AEdependNodeTemplate(self.nodeName)
        self.addExtraControls()

 

        self.endScrollLayout()

现在,当您创建一种灯光滤波器接受的灯光时,您可以在灯光的“Arnold”部分的“滤光片”部分中添加此灯光滤波器:

图7:滤光片菜单


相关热词: 着色器MayaArnold教程

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