GLSL Light created. GLSL Material created. GLSL DefMaterial created. 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[8]; 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_color) * 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) * diff_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 unused1, 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_color); } 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 normal, 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_color, diff1) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis * amb_range)); #else diff_rslt+= DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_color, diff1, diff2, diff3) * 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, spec3) * 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. 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[8]; 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_color) * 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) * diff_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 unused1, 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_color); } 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 normal, 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_color, diff1) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis * amb_range)); #else diff_rslt+= DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_color, diff1, diff2, diff3) * 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, spec3) * 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.