arnold shader custom aov

本文深入探讨了在渲染管线中通过特定AOV参数(如aov_spec_fresnel和aov_refl_fresnel)进行高级效果渲染的技术细节。包括参数设置、数据传递、节点初始化、更新与评估等关键步骤,详细阐述了如何利用这些参数实现复杂光照效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • add aov parameter in [enum zsjStandardParams]

 enum zsjStandardParams
{
...
 p_aov_spec_fresnel,
 p_aov_refl_fresnel,
 ...
};
  • node parameter

node_parameters 
{
...
   AiParameterStr("aov_spec_fresnel", "spec_fresnel");
   AiParameterStr("aov_refl_fresnel", "refl_fresnel");
   ...
};
    
}
  • use a shader data struct to pass aov_name to shader

node_initialize{
 ShaderData* data = new ShaderData;
    AiNodeSetLocalData(node,data);
};
node_finish{
 if (AiNodeGetLocalData(node))
    {
        ShaderData* data = (ShaderData*) AiNodeGetLocalData(node);
        AiNodeSetLocalData(node, NULL);
        delete data;
    }
};
node_update{
 ShaderData *data = (ShaderData*)AiNodeGetLocalData(node);
 data->aov_spec_fresnel = params[p_aov_spec_fresnel].STR;
 data->aov_refl_fresnel = params[p_aov_refl_fresnel].STR;
 AiAOVRegister(data->aov_spec_fresnel.c_str(), AI_TYPE_RGB, AI_AOV_BLEND_OPACITY);
 AiAOVRegister(data->aov_refl_fresnel.c_str(), AI_TYPE_RGB, AI_AOV_BLEND_OPACITY);
};
shader_evaluate{
 ShaderData *data = (ShaderData*)AiNodeGetLocalData(node);
 ...
 if (sg->Rt & AI_RAY_CAMERA)
 {
  AiAOVSetRGB(sg, data->aov_spec_fresnel.c_str(), AiColor(fresnel_spec));
  AiAOVSetRGB(sg, data->aov_refl_fresnel.c_str(), AiColor(fresnel_refl));
 }
  • edit mtd file:

     [attr aov_spec_fresnel]
        aov.type                INT     0x05
        default STRING "spec_fresnel"
        aov.enable_composition BOOL TRUE
    [attr aov_refl_fresnel]
        aov.type                INT     0x05
        default STRING "refl_fresnel"
        aov.enable_composition BOOL TRUE
  • edit template file

        self.addAOVLayout(aovReorder = ['spec_fresnel', 'refl_fresnel'])

转载于:https://my.oschina.net/zsjasper/blog/380453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值