[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