[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11419] branches/soc-2007-maike: Added colorband alpha and made some changes for final result as colorband input

Miguel Torres Lima torreslima at gmail.com
Sun Jul 29 20:46:47 CEST 2007


Revision: 11419
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11419
Author:   maike
Date:     2007-07-29 20:46:47 +0200 (Sun, 29 Jul 2007)

Log Message:
-----------
Added colorband alpha and made some changes for final result as colorband input
(can't really test normal as input as it uses the view vector and result and energy as colorband input still have some issues to be resolved)

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_node.c

Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl	2007-07-29 18:03:36 UTC (rev 11418)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl	2007-07-29 18:46:47 UTC (rev 11419)
@@ -14,18 +14,18 @@
 float diff_fac = rslt1;
 #else
 #if DIFF_CB_TYPE == 1
-float diff_fac = 0.3 * lights[LIGHT_ID].color.r + 0.58 * lights[LIGHT_ID].color.g + 0.12 * lights[LIGHT_ID].color.b;
+float diff_fac = (0.3 * lights[LIGHT_ID].color.r + 0.58 * lights[LIGHT_ID].color.g + 0.12 * lights[LIGHT_ID].color.b);
 #else
 float diff_fac = dot((eye - pos), normal);
 #endif
 #endif
 vec4 diff_cb = texture1D(DIFF_CB_TEX, diff_fac);
-diff_rslt += (DIFF_CB_BLEND_FUNC(diff_cb.rgb, diff_color, DIFF_CB_FAC) * rslt1 * diff1 * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis) + (diff_color * emit);
+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);
 #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) + (diff_color * emit);
+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);
 #else
-diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff2, diff3) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis) + (diff_color * emit);
+diff_rslt+= (DIFF_SHADER_ID(lights[LIGHT_ID], normal, diff2, diff3) * diff1 * diff_color * vec3(lights[LIGHT_ID].color + vert_color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis);
 #endif
 #endif
 #endif
@@ -71,12 +71,3 @@
 #undef HEMI
 
 
-#undef DIFF_CB_TYPE
-#undef SPEC_CB_TYPE
-#undef DIFF_CB_BLEND_FUNC
-#undef SPEC_CB_BLEND_FUNC
-#undef DIFF_CB_TEX
-#undef SPEC_CB_TEX
-#undef DIFF_CB_FAC
-#undef SPEC_CB_FAC
-

Modified: branches/soc-2007-maike/release/glsl/material_return.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material_return.gsl	2007-07-29 18:03:36 UTC (rev 11418)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl	2007-07-29 18:46:47 UTC (rev 11419)
@@ -1,6 +1,32 @@
+#ifdef DIFF_CB_RESULT
+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);
+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;
+#endif
+
+#ifdef SPEC_CB_RESULT
+float spec_cb_rslt_fac = ;
+vec4 spec_cb_rslt_tex = texture1D(SPEC_CB_TEX, spec_cb_rslt_fac);
+spec_rslt = (SPEC_CB_BLEND_FUNC(spec_cb_rslt_tex.rgb, spec_rslt.rgb, SPEC_CB_FAC * spec_cb_rslt_tex.a));
+#endif
+
+
 #ifdef LIGHT_CALCULATIONS
-  return(amb_exp * (1.0 - exp(diff_rslt * amb_range)) + spec_rslt + amb_rslt); 
+  return(amb_exp * (1.0 - exp((diff_rslt + (diff_color * emit))* amb_range)) + spec_rslt + amb_rslt); 
 #else
   return(vec3(0.0, 0.0, 0.0));
 #endif
+
+
+#undef DIFF_CB_TYPE
+#undef SPEC_CB_TYPE
+#undef DIFF_CB_BLEND_FUNC
+#undef SPEC_CB_BLEND_FUNC
+#undef DIFF_CB_TEX
+#undef SPEC_CB_TEX
+#undef DIFF_CB_FAC
+#undef SPEC_CB_FAC
+#undef DIFF_CB_RESULT
+#undef SPEC_CB_RESULT
 }

Modified: branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c
===================================================================
--- branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c	2007-07-29 18:03:36 UTC (rev 11418)
+++ branches/soc-2007-maike/source/blender/src/glsl_colorband_node.c	2007-07-29 18:46:47 UTC (rev 11419)
@@ -74,15 +74,10 @@
 char *glsl_colorband_node_defines(Material *mat, int *blend, int num, int ramp_num)
 {
   char *blendmode[16] = { "mix", "add", "mult", "sub", "screen", "div", "dif", "dark", "light", "overlay", "dodge", "burn", "hue", "sat", "val", "color" };
-  char *code, *type, *func, *tex, *fac;
+  char *code, *type = NULL, *func, *tex, *fac, *rslt = NULL;
   int blen_type;
 
   if(!ramp_num){
-    type = glsl_string(3, 
-		       0, "#define DIFF_CB_TYPE ", 
-		       GINT, mat->rampin_col, 
-		       0, "\n");
-    
     func = glsl_string(3, 
 		       0, "#define DIFF_CB_BLEND_FUNC colorband_blend_", 
 		       0, blendmode[mat->rampblend_col],
@@ -101,15 +96,19 @@
 		       0, "_ramp_", 
 		       GINT, ramp_num, 
 		       0, "_fac\n");
+    
+    if(mat->rampin_col == MA_RAMP_IN_RESULT)
+      rslt = "#define DIFF_CB_RESULT 1\n";
 
+    if(mat->rampin_col != MA_RAMP_IN_RESULT)
+      type = glsl_string(3, 
+			 0, "#define DIFF_CB_TYPE ", 
+			 GINT, mat->rampin_col, 
+			 0, "\n");
+    
     blen_type = pow(2, mat->rampblend_col);
   }
   else{
-    type = glsl_string(3, 
-		       0, "#define SPEC_CB_TYPE ", 
-		       GINT, mat->rampin_spec, 
-		       0, "\n");
-    
     func = glsl_string(3, 
 		       0, "#define SPEC_CB_BLEND_FUNC colorband_blend_", 
 		       0, blendmode[mat->rampblend_spec],
@@ -129,14 +128,24 @@
 		       GINT, ramp_num, 
 		       0, "_fac\n");
 
+    if(mat->rampin_spec == MA_RAMP_IN_RESULT)
+      rslt = "#define SPEC_CB_RESULT 1\n";
+    
+    if(mat->rampin_spec != MA_RAMP_IN_RESULT)
+      type = glsl_string(3, 
+			 0, "#define SPEC_CB_TYPE ", 
+			 GINT, mat->rampin_spec, 
+			 0, "\n");
+
     blen_type = pow(2, mat->rampblend_spec);
   }
 
-  code = glsl_string(4, 
+  code = glsl_string(5, 
 		     GFREE, type, 
 		     GFREE, func, 
 		     GFREE, tex, 
-		     GFREE, fac);
+		     GFREE, fac,
+		     0, rslt);
   
   if(!(*blend & blen_type))
     *blend += blen_type;





More information about the Bf-blender-cvs mailing list