Shader average_radiance_options

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(&params->color); 
    miIrrad_options options; 
    miIRRAD_DEFAULT(&options, state); 
 
    miaux_set_integer_if_not_default( 
        &options.globillum_accuracy, state, &params->gi_accuracy); 
    miaux_set_scalar_if_not_default( 
        &options.globillum_radius, state, &params->gi_radius); 
    miaux_set_integer_if_not_default( 
        &options.finalgather_rays, state, &params->fg_rays); 
    miaux_set_scalar_if_not_default( 
        &options.finalgather_maxradius, state, &params->fg_maxradius); 
    miaux_set_scalar_if_not_default( 
        &options.finalgather_minradius, state, &params->fg_minradius); 
    miaux_set_integer_if_not_default( 
        (miInteger*)&options.finalgather_view, state, &params->fg_view); 
    miaux_set_integer_if_not_default( 
        (miInteger*)&options.finalgather_filter, state, &params->fg_filter); 
    miaux_set_integer_if_not_default( 
        (miInteger*)&options.finalgather_points, state, &params->fg_points); 
    miaux_set_scalar_if_not_default( 
        &options.importance, state, &params->importance); 
    miaux_set_integer_if_not_default( 
        &options.caustic_accuracy, state, &params->caustic_accuracy); 
    miaux_set_scalar_if_not_default( 
        &options.caustic_radius, state, &params->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