1

私は OSL の初心者で、その「輝きの閉鎖」について静かに混乱しました。

例として拡散閉鎖だけです。直接書くことができます

Ci = 拡散(N)

osl ファイルで拡散閉鎖を使用します。そしてドキュメントには、「クロージャーの内部はレンダリングの実装に任されている」と書かれています。しかし、diffuse は OSL のビルトイン クロージャであり、OSL は bsdf_diffsue.cpp で拡散用の 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);
}

そのため、outside render で他に行うことはないようです。では、「クロージャーの内部はレンダーの実装に任せる」とは正確にはどういう意味ですか?

どんな説明でも大歓迎です!ありがとう!

4

1 に答える 1