Shader point_light_falloff

Click on the filename to display or download the file.

point_light_falloff.mi
declare shader 
    color "point_light_falloff" ( 
        color "light_color" default 1 1 1 ) 
    version 1 
    apply light 
end declare 

point_light_falloff.c
#include  
#include "shader.h" 
#include "miaux.h" 
 
struct point_light_falloff { 
    miColor light_color; 
}; 
 
DLLEXPORT 
int point_light_falloff_version(void) {return(1);} 
 
DLLEXPORT 
miBoolean point_light_falloff ( 
    miColor *result, miState *state, struct point_light_falloff *params ) 
{ 
    miTag light; 
    miScalar exponent; 
    *result = *mi_eval_color(&params->light_color); 
 
    if (state->type != miRAY_LIGHT) /* Visible area light */ 
        return miTRUE; 
 
    mi_query(miQ_INST_ITEM, state, state->light_instance, &light); 
    mi_query(miQ_LIGHT_EXPONENT, state, light, &exponent); 
 
    miaux_scale_color(result, 1.0 / pow(state->dist, exponent)); 
    return mi_trace_shadow(result, state); 
} 

point_light_falloff_util.c
void miaux_scale_color(miColor *result, miScalar scale) 
{ 
    result->r *= scale; 
    result->g *= scale; 
    result->b *= scale; 
} 

22 April 2008 23:40:06