Public feed #600737

matt

public text v1 · immutable
Raw Edit
·published 2007-07-03 01:50 UTC
rendered paste body
GLSL Light created.

 GLSL Material created.

GLSL DefMaterial created.

GLSL Light created.

 GLSL Material created.

GLSL DefMaterial created.

GLSL activated.

 GLSL Material created.

GLSL Program created.

GLSL Shader code writing...
Memoryblock GLSL Node Code: end corrupt

Code:
struct light{
        vec3 loc;
        vec3 vec;
        vec3 color;
        float dist;
        float energy;
        float att1;
        float att2;
        float att3;
        float att4;
        float gamma;
        float area_x;
        float area_y;
        int sphere;
        int square;
        int area_type;
        int layer;
        mat4 mat;
        float areasize;
        float k;
        float spotsize;
        float spotblend;
};
varying vec3 vert_color;
varying vec3 normal, pos;
varying vec4 realcolor;
uniform vec3 eye;
uniform vec3 amb_color;
uniform float amb_exp, amb_range;uniform vec3 u_mat_0_diff_color;
uniform vec3 u_mat_0_spec_color;
uniform vec3 u_mat_0_normal;
uniform float u_mat_0_alpha;
uniform float u_mat_0_diff1;
uniform float u_mat_0_diff2;
uniform float u_mat_0_diff3;
uniform float u_mat_0_spec1;
uniform float u_mat_0_spec2;
uniform float u_mat_0_spec3;
uniform float u_mat_0_amb_fac;
uniform float u_mat_0_emit;
uniform int u_mat_0_hard;
uniform light lights[3];
vec3 lambertdef(light l, vec3 vnormal, vec3 diff_color, float ref, float unused1
, float unused2){
        vec3 lightVec = normalize(l.loc - pos);
        return(max(dot(lightVec, vnormal), 0.0) * ref * vec3(l.color + vert_colo
r) * diff_color);
}
vec3 lambertsun(light l, vec3 vnormal, vec3 diff_color, float ref, float unused1
, float unused2){
        vec3 lightVec = normalize(l.vec);
        return(max(dot(lightVec, vnormal) * ref * vec3(l.color + vert_color) * d
iff_color, 0.0));
}vec3 lamberthemi(light l, vec3 vnormal, vec3 diff_color, float ref){
        vec3 lightVec = normalize(l.vec);
        return((0.5 * dot(lightVec, vnormal) + 0.5) * ref * vec3(l.color + vert_
color) * diff_color);
}vec3 lambertarea(light l, vec3 vnormal, vec3 diff_color, float ref, float unuse
d1, float unused2){
        vec3 lightVec = normalize(l.loc - pos);
	        vec3 vect1, vect2, vect3, vect4;
        vec3 cross1, cross2, cross3, cross4;
        float rad[4];

        float fac;

        vect1 = normalize(pos - vec3(l.mat[0][0], l.mat[0][1], l.mat[0][2]));
        vect2 = normalize(pos - vec3(l.mat[1][0], l.mat[1][1], l.mat[1][2]));
        vect3 = normalize(pos - vec3(l.mat[2][0], l.mat[2][1], l.mat[2][2]));
        vect4 = normalize(pos - vec3(l.mat[3][0], l.mat[3][1], l.mat[3][2]));

        cross1 = normalize(cross(vect1, vect2));
        cross2 = normalize(cross(vect2, vect3));
        cross3 = normalize(cross(vect3, vect4));
        cross4 = normalize(cross(vect4, vect1));

        rad[0] = dot(vect1, vect2);
        rad[1] = dot(vect2, vect3);
        rad[2] = dot(vect3, vect4);
        rad[3] = dot(vect4, vect1);

        rad[0] = acos(clamp(rad[0], -1.0, 1.0)) * (1 - floor(clamp(rad[0], 0.1,
1.0) + 0.00001));
        rad[1] = acos(clamp(rad[1], -1.0, 1.0)) * (1 - floor(clamp(rad[1], 0.1,
1.0) + 0.00001));
        rad[2] = acos(clamp(rad[2], -1.0, 1.0)) * (1 - floor(clamp(rad[2], 0.1,
1.0) + 0.00001));
        rad[3] = acos(clamp(rad[3], -1.0, 1.0)) * (1 - floor(clamp(rad[3], 0.1,
1.0) + 0.00001));

        fac  = rad[0] * dot(vnormal, cross1);
        fac += rad[1] * dot(vnormal, cross2);
        fac += rad[2] * dot(vnormal, cross3);
        fac += rad[3] * dot(vnormal, cross4);

        fac = max(pow(-fac * l.areasize, l.k), 0.0);
        return(fac * ref * vec3(l.color + vert_color) * diff_color);
}
vec3 cooktorrdef(light l, vec3 vnormal, vec3 spec_color, float spec, float hard,
 float unused){
        vec3 view = normalize(eye - pos);
        vec3 h = normalize((eye - pos) + (l.loc - pos));
        float nh = max(dot(vnormal, h), 0.0);
        float nv = max(dot(vnormal, view), 0.0);
        return((spec * pow(nh, hard) * spec_color / (0.1 + nv)) * vec3(l.color +
 vert_color));
}
vec3 cooktorrsun(light l, vec3 vnormal, vec3 spec_color, float spec, float hard,
 float unused){
        vec3 view = normalize(eye - pos);
        vec3 h = normalize((eye - pos) + l.vec);
        float nh = max(dot(vnormal, h), 0.0);
        float nv = max(dot(vnormal, view), 0.0);
        return(spec * pow(nh, hard) * vec3(l.color + vert_color) * spec_color /
(0.1 + nv));
}
vec3 cooktorrhemi(light l, vec3 vnormal, vec3 spec_color, float spec, float hard
){
        vec3 view = normalize(eye - pos);
        vec3 h = normalize((eye - pos) + l.vec);
        float nh = 0.5 * (max(dot(vnormal, h), 0.0)) + 0.5;
        return(spec * nh * pow(nh, hard) * vec3(l.color + vert_color) * spec_col
or);
}
vec3 cooktorrarea(light l, vec3 vnormal, vec3 spec_color, float spec, float hard
, float unused){
        vec3 view = normalize(eye - pos);
        vec3 h = normalize((eye - pos) + (l.loc - pos));
        float nh = max(dot(vnormal, h), 0.0);
        float nv = max(dot(vnormal, view), 0.0);
        return((spec * pow(nh, hard) * spec_color / (0.1 + nv)) * vec3(l.color +
 vert_color));
}
float visibility_lamp(light l){
        float visifac = 1.0;
        vec3 lv = (pos - l.loc);
        float dist = sqrt(dot(lv, lv));
        visifac = l.dist / (l.dist + (l.att1 * dist));
        visifac *= (l.dist * l.dist) / ( l.dist * l.dist + (l.att2 * dist * dist
));
        visifac = max(visifac * l.att3, l.dist / (l.dist + dist) * l.att4);
	        float m = max(l.dist - dist, 0.0);
        return(visifac * max(m / l.dist, l.sphere));
}

#define MATERIAL_ID 0

#define MATERIAL_FUNC material_ ## 0
vec3 MATERIAL_FUNC(inout vec3 diff_color, inout vec3 spec_color, inout vec3 norm
al, inout float alpha, float diff1, float diff2, float diff3, float spec1, float
 spec2, float spec3, float amb_fac, float emit, int hard){
  vec3 diff_rslt = vec3(0.0, 0.0, 0.0);
  vec3 spec_rslt = vec3(0.0, 0.0, 0.0);
  vec3 amb_rslt = amb_color * amb_fac;
  float vis = 0.0;

#define LIGHT_CALCULATIONS 1

#define LIGHT_ID 0

#define VISIBILITY visibility_ ##  lamp

#define CALC_DIFFUSE 1

#define DIFF_SHADER_ID lambert ## def

#define CALC_SPECULAR 1

#define SPEC_SHADER_ID cooktorr ## def
#ifdef LIGHT_ID
vis = VISIBILITY(lights[LIGHT_ID]);
#endif

#ifdef CALC_DIFFUSE
#ifdef LIGHT_ID
#ifdef HEMI
diff_rslt+= amb_exp * (1.0 - exp(DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_c
olor, diff1) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis * amb_rang
e));
#else
diff_rslt+= DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_color, diff1, diff2, d
iff3) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif

#ifdef CALC_SPECULAR
#ifdef LIGHT_ID
#ifdef HEMI
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec_color, spec1, hard) *
lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#else
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec_color, spec1, spec2, s
pec3) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif

#undef VISIBILITY
#undef LIGHT_ID
#undef CALC_DIFFUSE
#undef CALC_SPECULAR
#undef DIFF_SHADER_ID
#undef SPEC_SHADER_ID
#undef HEMI

#define LIGHT_ID 1

#define VISIBILITY visibility_ ##  lamp

#define CALC_DIFFUSE 1

#define DIFF_SHADER_ID lambert ## def

#define CALC_SPECULAR 1

#define SPEC_SHADER_ID cooktorr ## def
#ifdef LIGHT_ID
vis = VISIBILITY(lights[LIGHT_ID]);
#endif

#ifdef CALC_DIFFUSE
#ifdef LIGHT_ID
#ifdef HEMI
diff_rslt+= amb_exp * (1.0 - exp(DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_c
olor, diff1) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis * amb_rang
e));
#else
diff_rslt+= DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_color, diff1, diff2, d
iff3) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif

#ifdef CALC_SPECULAR
#ifdef LIGHT_ID
#ifdef HEMI
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec_color, spec1, hard) *
lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#else
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec_color, spec1, spec2, s
pec3) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif

#undef VISIBILITY
#undef LIGHT_ID
#undef CALC_DIFFUSE
#undef CALC_SPECULAR
#undef DIFF_SHADER_ID
#undef SPEC_SHADER_ID
#undef HEMI

#define LIGHT_ID 1

#define VISIBILITY visibility_ ##  lamp

#define CALC_DIFFUSE 1

#define DIFF_SHADER_ID lambert ## def

#define CALC_SPECULAR 1

#define SPEC_SHADER_ID cooktorr ## def
#ifdef LIGHT_ID
vis = VISIBILITY(lights[LIGHT_ID]);
#endif

#ifdef CALC_DIFFUSE
#ifdef LIGHT_ID
#ifdef HEMI
diff_rslt+= amb_exp * (1.0 - exp(DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_c
olor, diff1) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis * amb_rang
e));
#else
diff_rslt+= DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_color, diff1, diff2, d
iff3) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif

#ifdef CALC_SPECULAR
#ifdef LIGHT_ID
#ifdef HEMI
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec_color, spec1, hard) *
lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#else
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec_color, spec1, spec2, s
pec3) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
#endif

#undef VISIBILITY
#undef LIGHT_ID
#undef CALC_DIFFUSE
#undef CALC_SPECULAR
#undef DIFF_SHADER_ID
#undef SPEC_SHADER_ID
#undef HEMI
#ifdef LIGHT_CALCULATIONS
  return(amb_exp * (1.0 - exp(diff_rslt * amb_range)) + spec_rslt + amb_rslt);
#else
  return(vec3(0.0, 0.0, 0.0));
#endif
}

#undef MATERIAL_ID
#undef MATERIAL_FUNC
void main(void){  vec3 norm = normalize(normal); vec3 diff_color = realcolor.xyz
; vec3 spec_color = u_mat_0_spec_color; float alpha = realcolor.a; float diff1 =
 u_mat_0_diff1; float diff2 = u_mat_0_diff2; float diff3 = u_mat_0_diff3; float
spec1 = u_mat_0_spec1; float spec2 = u_mat_0_spec2; float spec3 = u_mat_0_spec3;
 float amb_fac = u_mat_0_amb_fac; float emit = u_mat_0_emit; int hard = u_mat_0_
hard; vec3 result = material_0(diff_color, spec_color, norm, alpha, diff1, diff2
, diff3, spec1, spec2, spec3, amb_fac, emit, hard); gl_FragColor = vec4(result,
alpha);}

END OF CODE
Memoryblock GLSL Node Code: end corrupt

GLSL Program linked.

 GLSL MaterialTree created.