[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11103] branches/soc-2007-maike/release/ glsl: Generic shader function corrections
Miguel Torres Lima
torreslima at gmail.com
Thu Jun 28 19:04:25 CEST 2007
Revision: 11103
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11103
Author: maike
Date: 2007-06-28 19:04:24 +0200 (Thu, 28 Jun 2007)
Log Message:
-----------
Generic shader function corrections
Modified Paths:
--------------
branches/soc-2007-maike/release/glsl/difftoon.gsl
branches/soc-2007-maike/release/glsl/difftoon_sun.gsl
branches/soc-2007-maike/release/glsl/lambert.gsl
branches/soc-2007-maike/release/glsl/lamp_visibility.gsl
branches/soc-2007-maike/release/glsl/light_calc.gsl
branches/soc-2007-maike/release/glsl/light_struct.gsl
branches/soc-2007-maike/release/glsl/material_return.gsl
branches/soc-2007-maike/release/glsl/minnaert.gsl
branches/soc-2007-maike/release/glsl/minnaert_sun.gsl
branches/soc-2007-maike/release/glsl/orennayar.gsl
branches/soc-2007-maike/release/glsl/orennayar_sun.gsl
branches/soc-2007-maike/release/glsl/spectoon_sun.gsl
branches/soc-2007-maike/release/glsl/uniforms.gsl
Modified: branches/soc-2007-maike/release/glsl/difftoon.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/difftoon.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/difftoon.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -1,8 +1,10 @@
vec3 difftoondef(light l, vec3 vnormal, vec3 diff_color, float ref, float size, float smooth){
vec3 lightVec = normalize(l.loc - pos);
- float rslt = max(dot(vnormal, lightVec), 0.0);
+ float rslt = dot(vnormal, lightVec);
float ang;
ang = acos(clamp(rslt, -1.0, 1.0)) * (1 - floor(clamp(rslt, 0.1, 1.0) + 0.00001));
- rslt = clamp(ceil(size + smooth - ang - 0.00001) * (1.0 - ((ang - size) / smooth)), 0.0, 1.0);
+
+ rslt = (1.0 - max((ang - size) / smooth, 0.0)) * ceil(clamp(size + smooth - ang, 0.0, 1.0) - 0.00001);
return(rslt * ref * vec3(l.color + vert_color) * diff_color);
}
+
Modified: branches/soc-2007-maike/release/glsl/difftoon_sun.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/difftoon_sun.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/difftoon_sun.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -3,6 +3,6 @@
float rslt = max(dot(vnormal, lightVec), 0.0);
float ang;
ang = acos(clamp(rslt, -1.0, 1.0)) * (1 - floor(clamp(rslt, 0.1, 1.0) + 0.00001));
- rslt = clamp(ceil(size + smooth - ang - 0.00001) * (1.0 - (ang - size)) / smooth, 0.0, 1.0);
+ rslt = clamp(ceil(size + smooth - ang - 0.00001) * (1.0 - ((ang - size) / smooth)), 0.0, 1.0);
return(rslt * ref * vec3(l.color + vert_color) * diff_color);
}
Modified: branches/soc-2007-maike/release/glsl/lambert.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/lambert.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/lambert.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -1,4 +1,4 @@
vec3 lambertdef(light l, vec3 vnormal, vec3 diff_color, float ref, float unused1, float unused2){
vec3 lightVec = normalize(l.loc - pos);
- return(dot(lightVec, vnormal) * ref * vec3(l.color + vert_color) * diff_color);
+ return(max(dot(lightVec, vnormal) * ref * vec3(l.color + vert_color) * diff_color, 0.0));
}
Modified: branches/soc-2007-maike/release/glsl/lamp_visibility.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/lamp_visibility.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/lamp_visibility.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -4,8 +4,7 @@
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.dist / (l.dist + dist)) * l.att3);
+ 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));
}
-
Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -5,9 +5,9 @@
#ifdef CALC_DIFFUSE
#ifdef LIGHT_ID
#ifdef HEMI
-diff_rslt+= DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff_color, diff1) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy;
+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;
+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
@@ -15,9 +15,9 @@
#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;
+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;
+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
@@ -25,7 +25,7 @@
#undef VISIBILITY
#undef LIGHT_ID
#undef CALC_DIFFUSE
-#undef CALC_SPEC
+#undef CALC_SPECULAR
#undef DIFF_SHADER_ID
#undef SPEC_SHADER_ID
#undef HEMI
Modified: branches/soc-2007-maike/release/glsl/light_struct.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_struct.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/light_struct.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -7,6 +7,7 @@
float att1;
float att2;
float att3;
+ float att4;
float gamma;
float area_x;
float area_y;
Modified: branches/soc-2007-maike/release/glsl/material_return.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material_return.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -1,5 +1,5 @@
#ifdef LIGHT_CALCULATIONS
- return((diff_rslt + spec_rslt + amb_rslt) * vis);
+ return(amb_exp * (1.0 - exp(diff_rslt * amb_range)) + spec_rslt + amb_rslt);
#else
return(vec3(0.0, 0.0, 0.0));
#endif
Modified: branches/soc-2007-maike/release/glsl/minnaert.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/minnaert.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/minnaert.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -1,7 +1,7 @@
vec3 minnaertdef(light l, vec3 vnormal, vec3 diff_color, float ref, float darkness, float unused){
vec3 lightVec = normalize(l.loc - pos);
vec3 view = normalize(eye - pos);
- float nl = clamp(dot(vnormal, lightVec), 0.0, 1.0);
+ float nl = max(dot(vnormal, lightVec), 0.0);
float nv = max(dot(vnormal, view), 0.0);
float res;
if(darkness <= 1.0) res = nl * pow(max(nv * nl, 0.1), darkness - 1.0);
Modified: branches/soc-2007-maike/release/glsl/minnaert_sun.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/minnaert_sun.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/minnaert_sun.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -1,7 +1,7 @@
vec3 minnaertsun(light l, vec3 vnormal, vec3 diff_color, float ref, float darkness, float unused){
vec3 lightVec = normalize(l.vec);
vec3 view = normalize(eye - pos);
- float nl = clamp(dot(vnormal, lightVec), 0.0, 1.0);
+ float nl = max(dot(vnormal, lightVec), 0.0);
float nv = max(dot(vnormal, view), 0.0);
float res;
if(darkness <= 1.0) res = nl * pow(max(nv * nl, 0.1), darkness - 1.0);
Modified: branches/soc-2007-maike/release/glsl/orennayar.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/orennayar.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/orennayar.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -1,4 +1,4 @@
-vec3 orennayardef(light l, vec3 vnormal, vec3 diff_color, float ref, float roughness, float unused){
+fvec3 orennayardef(light l, vec3 vnormal, vec3 diff_color, float ref, float roughness, float unused){
vec3 lightVec = normalize(l.loc - pos);
vec3 view = normalize(eye - pos);
vec3 h = normalize(view + lightVec);
@@ -6,8 +6,8 @@
float nv = max(dot(vnormal, view), 0.0);
float nl = max(dot(vnormal, lightVec), 0.0);
float vh = max(dot(view, h), 0.0);
- float lit_A = acos(clamp(nl, -1.0, 1.0));
- float view_A = acos(clamp(nv, -1.0, 1.0));
+ float lit_A = acos(clamp(nl, -1.0, 1.0)) * (1 - floor(clamp(nl, 0.1, 1.0) + 0.00001));
+ float view_A = acos(clamp(nv, -1.0, 1.0)) * (1 - floor(clamp(nv, 0.1, 1.0) + 0.00001));
vec3 lit_B = normalize(lightVec - (nl * vnormal));
vec3 view_B = normalize(view - (nv * vnormal));
float t = max(dot(lit_B, view_B), 0.0);
@@ -16,6 +16,7 @@
float a = max(lit_A, view_A);
float b = min(lit_A, view_A);
b = b * 0.95;
- float res = nl * (A + (B * t * sin(max(lit_A, view_A)) * tan(min(lit_A, view_A))));
+ float res = nl * (A + (B * t * sin(a) * tan(b)));
return(ref * res * vec3(l.color + vert_color) * diff_color);
}
+
Modified: branches/soc-2007-maike/release/glsl/orennayar_sun.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/orennayar_sun.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/orennayar_sun.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -16,6 +16,6 @@
float a = max(lit_A, view_A);
float b = min(lit_A, view_A);
b = b * 0.95;
- float res = nl * (A + (B * t * sin(max(lit_A, view_A)) * tan(min(lit_A, view_A))));
+ float res = nl * (A + (B * t * sin(a) * tan(b)));
return(ref * res * vec3(l.color + vert_color) * diff_color);
}
\ No newline at end of file
Modified: branches/soc-2007-maike/release/glsl/spectoon_sun.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/spectoon_sun.gsl 2007-06-28 17:02:41 UTC (rev 11102)
+++ branches/soc-2007-maike/release/glsl/spectoon_sun.gsl 2007-06-28 17:04:24 UTC (rev 11103)
@@ -3,6 +3,6 @@
vec3 h = normalize((eye - pos) + l.vec);
float rslt = max(dot(h, vnormal), 0.0);
float ang = acos(clamp(rslt, -1.0, 1.0));
- rslt = clamp(ceil(size + smooth - ang - 0.00001) * (1.0 - (ang - size)) / smooth, 0.0, 1.0);
+ rslt = clamp(ceil(size + smooth - ang - 0.00001) * (1.0 - ((ang - size) / smooth)), 0.0, 1.0);
return(rslt * spec * vec3(l.color + vert_color) * spec_color);
}
Modified: branches/soc-2007-maike/release/glsl/uniforms.gsl
===================================================================
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list