Skip to content

sample_bsdf

void  sample_bsdf(bsdf F, vector viewer_u, vector &dir, vector &eval, int &type, float sx, float sy, ...)

void  sample_bsdf(bsdf F, vector viewer_u, vector &dir, vector &eval, int &type, float sx, float sy, int mask, ...)

void  sample_bsdf(bsdf F, vector viewer_u, vector &dir, vector &eval, float &pdf, int &type, float sx, float sy, ...)

void  sample_bsdf(bsdf F, vector viewer_u, vector &dir, vector &eval, float &pdf, int &type, float sx, float sy, int mask, ...)

void  sample_bsdf(bsdf b, vector viewer_u, vector normal_v, int &flags, vector &dir, vector &eval, float &pdf, int &type, float sx, float sy, int mask, ...)

F

The BSDF to sample.

viewer_u

The U vector (input viewer direction).

normal_v

The V vector (input surface normal).

&flags

A bitfield of flags for the BSDF, defined in pbr.h. The function may set flags like PBR_BSDF_REVERSE or PBR_BSDF_O_EVENT_EXIT.

&dir

The function overwrites this variable with the outgoing ray direction.

&eval

The function overwrites this variable with the outgoing ray color, scaled by albedo.

This is not the same as the evaluated vector returned by the eval_bsdf operation. Here, &eval will not vary with the outgoing sample direction.

&pdf

The function overwrites this variable with the computed PDF of the BSDF.

&type

In a compound BSDF, this returns the bounce type that was sampled.

See bouncemask for information on component label bitmasks.

sx and sy

Random values, such as generated by nextsample. Different values of sx and sy represent different random directions to sample.

&eval

Overwritten with the color, scaled by albedo, of the sampled component.

&pdf

The sampling pdf for the sampled component.

bounces

A bitmask representing bounce types allowed.

The sample_bsdf function passes keyword arguments to the BSDF being evaluated. For custom BSDFs these keyword arguments are bound to shader arguments (e.g. indicating whether the BSDF is being evaluated for direct or indirect illumination). It’s also possible for a BSDF to pass information back to sample_bsdf. To indicate that a keyword argument value should be imported from the BSDF prefix the keyword with “import:”. For example: Examples

examples

sample_bsdf(F, inI, outI, eval, type, sx, sy,
"direct", 0, // Specify indirect illumination
"import:sssmfp", sssmfp, // Read the exported sssmfp parameter
...
);