}
#pragma MSP stage(fragment)
-struct IncomingLight
-{
- vec3 direction;
- vec3 color;
-};
-
layout(location=0) out vec4 frag_color;
virtual vec3 get_fragment_normal()
return sgn*normalize(world_normal);
}
-virtual IncomingLight get_incoming_light(int index, vec3 world_pos)
-{
- vec4 light_pos = light_sources[index].position;
- vec3 rel_pos = light_pos.xyz-world_pos*light_pos.w;
- float d = length(rel_pos);
- float attenuation = 1.0/dot(vec3(1.0, d, d*d), light_sources[index].attenuation);
- return IncomingLight(rel_pos/d, light_sources[index].color*attenuation);
-}
-
float apply_alpha_cutoff(float alpha, AlphaCutoffParams params)
{
if(use_alpha_cutoff)