[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