[备忘]how to use user-provided mentalray shader in Maya?(如何在maya里用自定义mentalray shader)

来源:互联网 发布:切割视频软件 编辑:程序博客网 时间:2024/05/01 00:41

说明:自己参考maya2009 document,稍加修改,得到了一个可行的方法。如有错误或不合适的地方,还请多多指正。谢谢~

 


1.建立vc project files

按照Maya2009/devkit/mentalray/docs/writingShaders/mayaShaderExample_32bit.vcproj的配置,新建一个mytexture.vcproj,确保其输出文件是mytexture.dll


2. mytexture.c

在mytexture.vcproj里增加代码(参见Maya009 document --> mental ray for Maya reference --> Example Scene with Custom Shader)

------------------------------------------------------------------------------

#include <stdio.h>
#include "shader.h"

struct mytexture
{
    miScalar min;
    miScalar max;
};

extern "C" DLLEXPORT int mytexture_version(void) {return(1);}

extern "C" DLLEXPORT miBoolean mytexture(
                    miColor          *result,
                    miState          *state,
struct mytexture *paras)
{
    miVector         vec;
    miScalar         min, max;

    mi_point_to_object(state, &vec, &state->point);
    min = *mi_eval_scalar(&paras->min);
    max = *mi_eval_scalar(&paras->max);
    result->r = vec.x < 0 ? min : max;
    result->g = vec.y < 0 ? min : max;
    result->b = vec.z < 0 ? min : max;
    result->a = 1;
    return(miTRUE);
}

------------------------------------------------------------------------------

注意:extern "C" DLLEXPORT一定要加上,否则用mentalray渲染时,提示:

PHEN 0.3  error  051011: shader "mytexture" not found

 

3.mytexture.mi

在mytexture.dll同级目录下建立mytexture.mi:

------------------------------------------------------------------------------

min version "3.0.0"
max version "3.6.99"

declare shader
    color "mytexture" (
    scalar "min", #: default 0.3
    scalar "max", #: default 1.0
    )

    version 1
    #apply material  

    #如果使用material,则在hypershader-->Create -->Create mentalray Nodes-->Material下会有myTexture,
   

    ##: nodeid 2007;
end declare

------------------------------------------------------------------------------

 

4. AEmytextureTemplate.mel

mytexture.dll同级目录下建立AEmytextureTemplate.mel:

------------------------------------------------------------------------------

global proc AEmytextureTemplate ( string $nodeName )
{

    editorTemplate -beginScrollLayout;

    // mib light attributes
    editorTemplate -beginLayout "mytexture Attributes" -collapse 0 ;
        editorTemplate -label "min"        -addControl "min";
        editorTemplate -label "max"        -addControl "max"

    editorTemplate -endLayout;


------------------------------------------------------------------------------

 

5.修改Maya.env

mytexture.dll所在路径加进去,比如,添加:

------------------------------------------------------------------------------

MAYA_LOCATION = D:/Program Files/Autodesk/Maya2009


PATH = $MAYA_LOCATION/mentalray/lib;$PATH;        //!-maya需要找到mentalray的若干dll

MI_CUSTOM_SHADER_PATH = $MAYA_LOCATION/devkit/mentalray/docs/writingShaders;

------------------------------------------------------------------------------

 

6.测试

打开maya, 菜单window-->Rendering Editors-->mental ray --> shader manager,应该可以看到mytexture.mi已经加载了。

在hypershader-->Create -->Create mentalray Nodes-->Miscellaneous下会有myTexture的节点。

创建myTexture纹理,赋给一个物体,再用mentalray渲染即可。

原创粉丝点击