说明:自己参考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(¶s->min);
max = *mi_eval_scalar(¶s->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. AEmytexture Template.mel
在mytexture.dll同级目录下 建立AEmytexture Template.mel:
------------------------------------------------------------------------------
global proc AEmytexture Template ( 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渲染即可。