[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11645] branches/soc-2007-maike/release/ glsl: Bugfixes for combined diffuse and specular ramps in result

Miguel Torres Lima torreslima at gmail.com
Fri Aug 17 19:52:04 CEST 2007


Revision: 11645
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11645
Author:   maike
Date:     2007-08-17 19:52:04 +0200 (Fri, 17 Aug 2007)

Log Message:
-----------
Bugfixes for combined diffuse and specular ramps in result
Normals bugfix in colorbands

Modified Paths:
--------------
    branches/soc-2007-maike/release/glsl/colorband_blend_burn.gsl
    branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl
    branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl
    branches/soc-2007-maike/release/glsl/light_calc.gsl
    branches/soc-2007-maike/release/glsl/material_return.gsl

Modified: branches/soc-2007-maike/release/glsl/colorband_blend_burn.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_blend_burn.gsl	2007-08-17 15:47:43 UTC (rev 11644)
+++ branches/soc-2007-maike/release/glsl/colorband_blend_burn.gsl	2007-08-17 17:52:04 UTC (rev 11645)
@@ -4,34 +4,43 @@
   vec3 color = colband;
   
   float tmp = facm + fac * shader.r;
+  float tmp2;
 
   if(tmp <= 0.0)
     color.r = 0.0;
-  else if((tmp = (1.0 - (1.0 - colband.r) / tmp)) < 0.0)
-    color.r = 0.0;
-  else if(tmp > 1.0)
-    color.r = 1.0;
-  else color.r = tmp;
+  else{
+    tmp = 1.0 - (1.0 - colband.r) / tmp;
+  
+    color.r = clamp(tmp, 0.0, 1.0);
+  }
 
   tmp = facm + fac * shader.g;
 
   if(tmp <= 0.0)
     color.g = 0.0;
-  else if((tmp = (1.0 - (1.0 - colband.g) / tmp)) < 0.0)
-    color.g = 0.0;
-  else if(tmp > 1.0)
-    color.g = 1.0;
-  else color.g = tmp;
+  else{
+    tmp = 1.0 - (1.0 - colband.g) / tmp;
 
+    if(tmp < 0.0)
+      color.g = 0.0;
+    else if(tmp > 1.0)
+      color.g = 1.0;
+    else color.g = tmp;
+  }
+
   tmp = facm + fac * shader.b;
 
   if(tmp <= 0.0)
     color.b = 0.0;
-  else if((tmp = (1.0 - (1.0 - colband.b) / tmp)) < 0.0)
-    color.b = 0.0;
-  else if(tmp > 1.0)
-    color.b = 1.0;
-  else color.b = tmp;
+  else{
+    tmp = 1.0 - (1.0 - colband.b) / tmp;
 
+    if(tmp < 0.0)
+      color.b = 0.0;
+    else if(tmp > 1.0)
+      color.b = 1.0;
+    else color.b = tmp;
+  }
+
   return color;
 }

Modified: branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl	2007-08-17 15:47:43 UTC (rev 11644)
+++ branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl	2007-08-17 17:52:04 UTC (rev 11645)
@@ -1,47 +1,47 @@
 vec3 colorband_hsv_rgb(vec3 input)
 {
-  float f, w, q, t;
+  float f, p, q, t;
   float i;
-  vec3 tmp = input;
   vec3 color = vec3(0.0, 0.0, 0.0);
+  float h = input.g * 360.0;
 
-  if(tmp.g == 0.0) tmp.g = 0.000001;
-  if(tmp.r == -1.0) color = vec3(input.b, input.b, input.b);
-  
+  if(input.g == 0.0){
+    color = vec3(input.b, input.b, input.b);
+  }
   else{
-    if(tmp.r == 360.0) tmp.r = 0.0;
-    tmp.r = tmp.r / 60.0;
-   
-    if(tmp.r >= 5.0)
+    if(h == 360.0) h = 0.0;
+    h = h / 60.0;
+    
+    if(h >= 5.0)
       i = 5.0;
-    else if(tmp.r >= 4.0)
+    else if(h >= 4.0)
       i = 4.0;
-    else if(tmp.r >= 3.0)
+    else if(h >= 3.0)
       i = 3.0;
-    else if(tmp.r >= 2.0)
+    else if(h >= 2.0)
       i = 2.0;
-    else if(tmp.r >= 1.0)
+    else if(h >= 1.0)
       i = 1.0;
     else
       i = 0.0;
    
-    f = tmp.r - i;
-    w = tmp.b * (1.0 - tmp.g);
-    q = tmp.b * (1.0 - (tmp.g * f));
-    t = tmp.b * (1.0 - (tmp.g * (1.0 - f)));
+    f = h - i;
+    p = input.b * (1.0 - input.g);
+    q = input.b * (1.0 - (input.g * f));
+    t = input.b * (1.0 - (input.g * (1.0 - f)));
 
     if(i == 0.0)
-      color = vec3(input.b, t, w);
-    if(i == 1.0)
-      color = vec3(q, input.b, w);
-    if(i == 2.0)
-      color = vec3(w, input.b, t);
-    if(i == 3.0)
-      color = vec3(w, q, input.b);
-    if(i == 4.0)
-      color = vec3(t, w, input.b);
-    if(i == 5.0)
-      color = vec3(input.b, w, q);
+      color = vec3(input.b, t, p);
+    else if(i == 1.0)
+      color = vec3(q, input.b, p);
+    else if(i == 2.0)
+      color = vec3(p, input.b, t);
+    else if(i == 3.0)
+      color = vec3(p, q, input.b);
+    else if(i == 4.0)
+      color = vec3(t, p, input.b);
+    else
+      color = vec3(input.b, p, q);
   }
 
   return(color);

Modified: branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl	2007-08-17 15:47:43 UTC (rev 11644)
+++ branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl	2007-08-17 17:52:04 UTC (rev 11645)
@@ -1,6 +1,7 @@
 vec3 colorband_rgb_hsv(vec3 input)
 {
   vec3 color = input;
+  vec3 r;
   float maxn = max(max(input.r, input.g), input.b);
   float minn = min(min(input.r, input.g), input.b);
   float delta;
@@ -9,26 +10,35 @@
 
   if(maxn != 0.0)
     color.g = (maxn - minn) / maxn;
-  else
+  else{
+    color.r = 0.0;
     color.g = 0.0;
+  }
 
   if(color.g == 0.0)
-    color.b = -1.0;
+    color.r = -1.0;
 
   else{
     delta =  maxn - minn;
+    r.r = (maxn - input.r) / delta;
+    r.g = (maxn - input.g) / delta;
+    r.b = (maxn - input.b) / delta;
+
     if(input.r == maxn)
-      color.r = (input.g - input.b) / delta;
-    else if(input.g == maxn)
-      color.r = 2.0 + (input.b - input.r) / delta;
-    else if(input.b == maxn)
-      color.r = 4.0 + (input.r - input.g) / delta;
-
+      color.g = r.b - r.g;
+    else{
+      if(input.g == maxn)
+	color.r = 2.0 + r.r - r.b;
+      else
+	color.r = 4.0 + r.g - r.r;
+    }
+    
     color.r = color.r * 60.0;
-
     if(color.r < 0.0)
-      color.r = color.r + 360.0;
+      color.r += 360.0;
   }
 
+  color.r = max(color.r / 360.0, 0.0);
+
   return(color);
 }

Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl	2007-08-17 15:47:43 UTC (rev 11644)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl	2007-08-17 17:52:04 UTC (rev 11645)
@@ -16,7 +16,7 @@
 #if DIFF_CB_TYPE == 1
 diff_fac = (0.3 * lights[LIGHT_ID].color.r + 0.58 * lights[LIGHT_ID].color.g + 0.12 * lights[LIGHT_ID].color.b) * vis * rslt1 * (lights[LIGHT_ID].energy * diff1);
 #else
-diff_fac = dot((eye - pos), normal);
+diff_fac = dot(normalize((eye - pos)), normalize(normal));
 #endif
 #endif
 diff_cb = texture1D(DIFF_CB_TEX, clamp(diff_fac, 0.000, 0.999));
@@ -44,13 +44,13 @@
 spec_fac = rslt2;
 #else
 #if SPEC_CB_TYPE == 1
-spec_fac = spec1 * vis * rslt2 * lights[LIGHT_ID].energy;
+spec_fac = spec1 * vis * rslt2;
 #else
-spec_fac = dot((eye - pos), normal);
+spec_fac = dot(normalize(eye - pos), normalize(normal));
 #endif
 #endif
 spec_cb = texture1D(SPEC_CB_TEX, clamp(spec_fac, 0.0, 0.999));
-spec_rslt += SPEC_CB_BLEND_FUNC(spec_cb.rgb, spec_color, SPEC_CB_FAC) * rslt2 * spec1 * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
+spec_rslt += SPEC_CB_BLEND_FUNC(spec_cb.rgb, spec_color, SPEC_CB_FAC) * rslt2 * spec1 * lights[LIGHT_ID].layer * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].energy * vis;
 #else
 #ifdef HEMI
 spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, hard) * spec1 * spec_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;

Modified: branches/soc-2007-maike/release/glsl/material_return.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material_return.gsl	2007-08-17 15:47:43 UTC (rev 11644)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl	2007-08-17 17:52:04 UTC (rev 11645)
@@ -4,22 +4,22 @@
 return(vec3(0.0, 0.0, 0.0));
 #else
 if(diff_cb_res > 0.0){
-  diff_rslt = amb_exp * (1.0 - exp((diff_rslt + (diff_color * vec3(emit + vert_color.r, emit + vert_color.g, emit + vert_color.b)))* amb_range)) + spec_rslt + amb_rslt;
+  diff_rslt = amb_exp * (1.0 - exp((diff_rslt + (diff_color * vec3(emit + vert_color.r, emit + vert_color.g, emit + vert_color.b)))* amb_range)) + amb_rslt;
   if(diff_rslt.r >= 0.005 || diff_rslt.g >= 0.005 || diff_rslt.b >= 0.005){
     float diff_cb_rslt_fac = (0.3 * diff_rslt.r + 0.58 * diff_rslt.g + 0.12 * diff_rslt.b);
     vec4 diff_cb_rslt_tex = texture1D(DIFF_CB_TEX, clamp(diff_cb_rslt_fac, 0.0, 0.999));
     diff_rslt = (DIFF_CB_BLEND_FUNC(diff_cb_rslt_tex.rgb, diff_rslt.rgb, DIFF_CB_FAC * diff_cb_rslt_tex.a));
-#ifdef CALC_SPECULAR
+
 #ifdef SPEC_CB_RESULT
     if(spec_cb_res > 0.0){
       float spec_cb_rslt_fac = (0.3 * spec_rslt.r + 0.58 * spec_rslt.g + 0.12 * spec_rslt.b);
       vec4 spec_cb_rslt_tex = texture1D(SPEC_CB_TEX, clamp(spec_cb_rslt_fac, 0.0, 0.999));
       spec_rslt = (SPEC_CB_BLEND_FUNC(spec_cb_rslt_tex.rgb, spec_rslt.rgb, SPEC_CB_FAC * spec_cb_rslt_tex.a));
-      diff_rslt += spec_rslt;
+      return(spec_rslt + diff_rslt);
     }
 #endif
-#endif
-    return(diff_rslt);
+
+    return(diff_rslt + spec_rslt);
   }
  }
 #endif





More information about the Bf-blender-cvs mailing list