我是 OSL 的初学者,对它的“辐射闭合”感到很困惑。
仅以扩散闭包为例。我们可以直接写
Ci = 扩散(N)
在 osl 文件中使用漫反射闭包。该文件说“闭包的内部结构留给渲染中的实现”。但我知道diffuse 是OSL 中的内置闭包,OSL 已经在bsdf_diffsue.cpp 中为diffuse 实现了eval_reflect()、eval_transmit、sample() 接口。例如,eval_reflect() 如下:
Color3 eval_reflect (const Vec3 &omega_out, const Vec3 &omega_in, float& pdf) const
{
float cos_pi = std::max(m_N.dot(omega_in),0.0f) * (float) M_1_PI;
pdf = cos_pi;
return Color3 (cos_pi, cos_pi, cos_pi);
}
因此,在外部渲染中似乎没有其他事情可做。那么“闭包的内部结构留给渲染中的实现”到底是什么意思呢?
任何解释将不胜感激!谢谢!