...
The RixBxdfFactory
interface defines a shading plugin responsible for creating a RixBxdf
object from a shading context (RixShadingContext
) and the set of connected patterns (RixPattern
).
The RixBxdf
interface characterizes the light-scattering behavior (sometimes referred to as material response) for a given point on the surface of an object.
RixBxdfFactory
Integrators (RixIntegrator
) uses use RixBxdfFactory
objects by invoking RixBxdfFactory::BeginScatter()
to obtain a RixBxdf,.
Because a RixBxdf
is expected to be a lightweight object that may be created many times over the course of the render, RixBxdfFactory
is expected to take advantage of the lightweight instancing services provided by RixShadingPlugin
; in particular, BeginScatter()
is provided a pointer to an instance data that is created by RixBxdfFactory::CreateInstanceData
().
parameterized by the bxdf's potentially varying input parameters. RixBxdfFactory::BeginScatter()
is expected to invoke RixShadingContext::EvalParam()
for to invoke the relevant bxdf parameters. The bxdf acts as a closure, associated with a given shading context. BeginScatter BeginScatter()
will will typically call a Bxdf constructor which will get the necessary built-in variables such as shading normal (Nn), geometric normal (Ngn), viewing direction (Vn), etc., by calling the RixShadingContext::GetBuiltinVar()
function for each variable.
...
Note that RenderMan itself queries parameter information using the RixBxdfFactory::GetParamTable()
method, not by reading arg files.