[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11431] branches/soc-2007-maike: Added specular colorbands
Miguel Torres Lima
torreslima at gmail.com
Mon Jul 30 20:02:34 CEST 2007
Revision: 11431
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11431
Author: maike
Date: 2007-07-30 20:02:33 +0200 (Mon, 30 Jul 2007)
Log Message:
-----------
Added specular colorbands
Diffuse colorband works right with shader and result as input, energy shows some slight differences still
Cannot really test diffuse colorbands with normal as input and specular colorbands result because of the eye vector but believe it to be right
Hue, divide, color and burn blend methods still need to be corrected
Modified Paths:
--------------
branches/soc-2007-maike/release/glsl/light_calc.gsl
branches/soc-2007-maike/release/glsl/material_return.gsl
branches/soc-2007-maike/source/blender/src/glsl_colorband.c
Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-07-30 16:44:35 UTC (rev 11430)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-07-30 18:02:33 UTC (rev 11431)
@@ -14,13 +14,13 @@
diff_fac = rslt1;
#else
#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;
+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;
#else
diff_fac = dot((eye - pos), normal);
#endif
#endif
-diff_cb = texture1D(DIFF_CB_TEX, diff_fac);
-diff_rslt += (DIFF_CB_BLEND_FUNC(diff_cb.rgb, diff_color, DIFF_CB_FAC * diff_cb.a) * rslt1 * diff1 * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
+diff_cb = texture1D(DIFF_CB_TEX, clamp(diff_fac, 0.000, 0.999));
+diff_rslt += DIFF_CB_BLEND_FUNC(diff_cb.rgb, diff_color, DIFF_CB_FAC * diff_cb.a) * rslt1 * diff1 * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * vis * lights[LIGHT_ID].energy;
#else
#ifdef HEMI
diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], normal) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
@@ -44,13 +44,13 @@
spec_fac = rslt2;
#else
#if SPEC_CB_TYPE == 1
- spec_fac = 0.3 * lights[LIGHT_ID].color.r + 0.58 * lights[LIGHT_ID].color.g + 0.12 * lights[LIGHT_ID].color.b;
+spec_fac = spec1 * vis * rslt2 * lights[LIGHT_ID].energy;
#else
spec_fac = dot((eye - pos), normal);
#endif
#endif
-spec_cb = texture1D(SPEC_CB_TEX, spec_fac);
-spec_rslt += SPEC_CB_BLEND_FUNC(spec_col, spec_cb.rgb, SPEC_CB_FAC) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
+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;
#else
#ifdef HEMI
spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, hard) * spec1 * spec_color * vec3(lights[LIGHT_ID].color + vert_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-07-30 16:44:35 UTC (rev 11430)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl 2007-07-30 18:02:33 UTC (rev 11431)
@@ -1,14 +1,26 @@
#ifdef DIFF_CB_RESULT
+#ifndef LIGHT_CALCULATIONS
+return(vec3(0.0, 0.0, 0.0));
+#else
+diff_rslt = amb_exp * (1.0 - exp((diff_rslt + (diff_color * emit))* amb_range)) + spec_rslt + 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, diff_cb_rslt_fac);
+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));
-diff_rslt += diff_rslt * emit;}
+#ifdef SPEC_CB_RESULT
+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;
#endif
+return(diff_rslt);}
+#endif
+#endif
+
#ifdef SPEC_CB_RESULT
-float spec_cb_rslt_fac = 0.0;
-vec4 spec_cb_rslt_tex = texture1D(SPEC_CB_TEX, spec_cb_rslt_fac);
+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));
#endif
Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband.c 2007-07-30 16:44:35 UTC (rev 11430)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband.c 2007-07-30 18:02:33 UTC (rev 11431)
@@ -50,7 +50,7 @@
glDeleteTextures(1, &colorband->texid);
for(i = 0; i < 512; i++){
- do_colorband(cb, (float) i / 511, texels);
+ do_colorband(cb, (float) (i + 1) / 512, texels);
colorband->tex[i][0] = texels[0];
colorband->tex[i][1] = texels[1];
colorband->tex[i][2] = texels[2];
@@ -62,6 +62,8 @@
glBindTexture(GL_TEXTURE_1D, colorband->texid);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, COLORBAND_WIDTH, 0, GL_RGBA, GL_FLOAT, colorband->tex);
colorband->tex_set = 1;
glActiveTexture(GL_TEXTURE0);
More information about the Bf-blender-cvs
mailing list