Click on the filename to display or download the file.
average_radiance_options.mi
declare shader
color "average_radiance_options" (
color "color" default 1 1 1,
integer "globillum_accuracy" default -1,
scalar "globillum_radius" default -1.0,
integer "finalgather_rays" default -1,
scalar "finalgather_maxradius" default -1.0,
scalar "finalgather_minradius" default -1.0,
integer "finalgather_view" default -1,
integer "finalgather_filter" default -1,
integer "finalgather_points" default 0,
scalar "importance" default -1.0,
integer "caustic_accuracy" default -1,
scalar "caustic_radius" default -1.0 )
version 1
end declare
average_radiance_options.c
#include "shader.h"
#include "miaux.h"
DLLEXPORT
int average_radiance_options_version(void) { return 1; }
struct average_radiance_options {
miColor color;
miInteger gi_accuracy;
miScalar gi_radius;
miInteger fg_rays;
miScalar fg_maxradius;
miScalar fg_minradius;
miInteger fg_view;
miInteger fg_filter;
miInteger fg_points;
miScalar importance;
miInteger caustic_accuracy;
miScalar caustic_radius;
};
DLLEXPORT
miBoolean average_radiance_options (
miColor *result, miState *state, struct average_radiance_options *params )
{
miColor *color = mi_eval_color(¶ms->color);
miIrrad_options options;
miIRRAD_DEFAULT(&options, state);
miaux_set_integer_if_not_default(
&options.globillum_accuracy, state, ¶ms->gi_accuracy);
miaux_set_scalar_if_not_default(
&options.globillum_radius, state, ¶ms->gi_radius);
miaux_set_integer_if_not_default(
&options.finalgather_rays, state, ¶ms->fg_rays);
miaux_set_scalar_if_not_default(
&options.finalgather_maxradius, state, ¶ms->fg_maxradius);
miaux_set_scalar_if_not_default(
&options.finalgather_minradius, state, ¶ms->fg_minradius);
miaux_set_integer_if_not_default(
(miInteger*)&options.finalgather_view, state, ¶ms->fg_view);
miaux_set_integer_if_not_default(
(miInteger*)&options.finalgather_filter, state, ¶ms->fg_filter);
miaux_set_integer_if_not_default(
(miInteger*)&options.finalgather_points, state, ¶ms->fg_points);
miaux_set_scalar_if_not_default(
&options.importance, state, ¶ms->importance);
miaux_set_integer_if_not_default(
&options.caustic_accuracy, state, ¶ms->caustic_accuracy);
miaux_set_scalar_if_not_default(
&options.caustic_radius, state, ¶ms->caustic_radius);
mi_compute_avg_radiance(result, state, 'f', &options);
miaux_multiply_color(result, color);
return miTRUE;
}
average_radiance_options_util.c
void miaux_set_integer_if_not_default(
miInteger *result, miState *state, miInteger *param)
{
miInteger use_default_flag = -1;
miInteger param_value = *mi_eval_integer(param);
if (param_value != use_default_flag)
*result = param_value;
}
void miaux_set_scalar_if_not_default(
miScalar *result, miState *state, miScalar *param)
{
miScalar use_default_flag = -1.0;
miScalar param_value = *mi_eval_scalar(param);
if (param_value != use_default_flag)
*result = param_value;
}
void miaux_multiply_color(miColor *result, miColor *color)
{
result->r *= color->r;
result->g *= color->g;
result->b *= color->b;
}
22 April 2008 23:40:26