[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