码迷,mamicode.com
首页 > 其他好文 > 详细

关于 arnold shader的参数

时间:2015-02-28 16:50:49      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

注意

  • enum parameter 和 node_parameters 必须,必须,必须,必须 一 一对应,否则编译不会出错,但是执行渲染会出错,

  • 不匹配的结果 , 一般表现为 parameter 读取错误,比如类型无法匹配,无法读取数据, 内存溢出等

  • 匹配的意思是 个数和顺序都要匹配

 

以下是 ai_params.h 对 AiParameter***  的定义

....
#define AiParameterBYTE(n,c) AiNodeParamByte (params,-1,n,c); 
....
AI_API void AiNodeParamByte (AtList* params, int varoffset, const char* pname, AtByte pdefault);
...

params 就是在enum中声明的parameter, varoffset就是parameter的位置/顺序

所以可以想象如果两者不匹配就会出错

 

简言之:

  • enum parameter的枚举定义了参数

  • 在shader_evaluate()函数中,通过AiShaderEvalParame***(pid) 在调用上述enum的参数

  • 而参数的具体定义则在node_parameters 中定义,比如类型,最大值等

  • node_parameter 和 enum parameter之间的匹配,依靠enum的个数和顺序这种松散而致命的方法来匹配

(很纳闷,arnold 为什么把读取参数搞得这么绕)

 

api帮助里面的例子

enum LambertParams {
p_Kd,
p_Kd_color
};
node_parameters
{
AiParameterFlt("Kd", 0.7f);
AiParameterRgb("Kd_color", 1, 1, 1);
// note that parameter ordering must match the enum above
}
shader_evaluate
{
float kd = AiShaderEvalParamFlt(p_Kd);
...
}

 

注:

shader_evaluate 中的AiShaderEvalParam***()和enum parameter  node_parameters不匹配 也不会影响编译和执行,但是为了避免麻烦, 最好三者都能匹配

关于 arnold shader的参数

标签:

原文地址:http://my.oschina.net/zsjasper/blog/380776

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!