[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