[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11657] branches/soc-2007-maike/release/ glsl: More glsl nodes generic functions
Miguel Torres Lima
torreslima at gmail.com
Sat Aug 18 17:49:09 CEST 2007
Revision: 11657
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11657
Author: maike
Date: 2007-08-18 17:49:09 +0200 (Sat, 18 Aug 2007)
Log Message:
-----------
More glsl nodes generic functions
Added glsl function to calculate the right area specularity size.
Modified Paths:
--------------
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/lambert_area.gsl
branches/soc-2007-maike/release/glsl/light_calc.gsl
branches/soc-2007-maike/release/glsl/material.gsl
branches/soc-2007-maike/release/glsl/material_return.gsl
branches/soc-2007-maike/release/glsl/node_invert.gsl
branches/soc-2007-maike/release/glsl/node_math_acos.gsl
branches/soc-2007-maike/release/glsl/node_math_add.gsl
branches/soc-2007-maike/release/glsl/node_math_asin.gsl
branches/soc-2007-maike/release/glsl/node_math_atan.gsl
branches/soc-2007-maike/release/glsl/node_math_cos.gsl
branches/soc-2007-maike/release/glsl/node_math_div.gsl
branches/soc-2007-maike/release/glsl/node_math_log.gsl
branches/soc-2007-maike/release/glsl/node_math_max.gsl
branches/soc-2007-maike/release/glsl/node_math_min.gsl
branches/soc-2007-maike/release/glsl/node_math_mul.gsl
branches/soc-2007-maike/release/glsl/node_math_pow.gsl
branches/soc-2007-maike/release/glsl/node_math_round.gsl
branches/soc-2007-maike/release/glsl/node_math_sin.gsl
branches/soc-2007-maike/release/glsl/node_math_sub.gsl
branches/soc-2007-maike/release/glsl/node_math_tan.gsl
branches/soc-2007-maike/release/glsl/node_vectmath_add.gsl
branches/soc-2007-maike/release/glsl/node_vectmath_avg.gsl
branches/soc-2007-maike/release/glsl/node_vectmath_cross.gsl
branches/soc-2007-maike/release/glsl/node_vectmath_dot.gsl
branches/soc-2007-maike/release/glsl/node_vectmath_norm.gsl
branches/soc-2007-maike/release/glsl/node_vectmath_sub.gsl
Added Paths:
-----------
branches/soc-2007-maike/release/glsl/area_energy.gsl
branches/soc-2007-maike/release/glsl/node_mapping.gsl
branches/soc-2007-maike/release/glsl/node_normal.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_add.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_burn.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_color.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_dark.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_diff.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_div.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_dodge.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_hue.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_light.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_mix.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_mul.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_overlay.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_sat.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_screen.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_sub.gsl
branches/soc-2007-maike/release/glsl/node_rgbmix_val.gsl
branches/soc-2007-maike/release/glsl/node_rgbtobw.gsl
branches/soc-2007-maike/release/glsl/node_squeeze.gsl
Added: branches/soc-2007-maike/release/glsl/area_energy.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/area_energy.gsl (rev 0)
+++ branches/soc-2007-maike/release/glsl/area_energy.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -0,0 +1,37 @@
+float area_energy(light l, vec3 vnormal)
+{
+ vec3 lightVec = normalize(l.loc - pos);
+ vec3 vect1, vect2, vect3, vect4;
+ vec3 cross1, cross2, cross3, cross4;
+ float rad[4];
+
+ float fac;
+
+ vect1 = normalize(pos - vec3(l.mat[0][0], l.mat[0][1], l.mat[0][2]));
+ vect2 = normalize(pos - vec3(l.mat[1][0], l.mat[1][1], l.mat[1][2]));
+ vect3 = normalize(pos - vec3(l.mat[2][0], l.mat[2][1], l.mat[2][2]));
+ vect4 = normalize(pos - vec3(l.mat[3][0], l.mat[3][1], l.mat[3][2]));
+
+ cross1 = normalize(cross(vect1, vect2));
+ cross2 = normalize(cross(vect2, vect3));
+ cross3 = normalize(cross(vect3, vect4));
+ cross4 = normalize(cross(vect4, vect1));
+
+ rad[0] = dot(vect1, vect2);
+ rad[1] = dot(vect2, vect3);
+ rad[2] = dot(vect3, vect4);
+ rad[3] = dot(vect4, vect1);
+
+ rad[0] = acos(clamp(rad[0], -1.0, 1.0)) * (1.0 - floor(clamp(rad[0], 0.1, 1.0) + 0.00001));
+ rad[1] = acos(clamp(rad[1], -1.0, 1.0)) * (1.0 - floor(clamp(rad[1], 0.1, 1.0) + 0.00001));
+ rad[2] = acos(clamp(rad[2], -1.0, 1.0)) * (1.0 - floor(clamp(rad[2], 0.1, 1.0) + 0.00001));
+ rad[3] = acos(clamp(rad[3], -1.0, 1.0)) * (1.0 - floor(clamp(rad[3], 0.1, 1.0) + 0.00001));
+
+ fac = rad[0] * dot(vnormal, cross1);
+ fac += rad[1] * dot(vnormal, cross2);
+ fac += rad[2] * dot(vnormal, cross3);
+ fac += rad[3] * dot(vnormal, cross4);
+
+ fac = max(pow(-fac * l.areasize, l.k), 0.0);
+ return(fac);
+}
\ No newline at end of file
Modified: branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl 2007-08-18 15:36:25 UTC (rev 11656)
+++ branches/soc-2007-maike/release/glsl/colorband_hsv_rgb.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -1,48 +1,49 @@
vec3 colorband_hsv_rgb(vec3 input)
{
- float f, p, q, t;
+ float f, w, q, t;
float i;
+ vec3 tmp = input;
vec3 color = vec3(0.0, 0.0, 0.0);
- float h = input.g * 360.0;
- if(input.g == 0.0){
- color = vec3(input.b, input.b, input.b);
- }
+ if(tmp.g == 0.0) tmp.g = 0.000001;
+ if(tmp.r == -1.0) color = vec3(input.b, input.b, input.b);
+
else{
- if(h == 360.0) h = 0.0;
- h = h / 60.0;
-
- if(h >= 5.0)
+ if(tmp.r == 360.0) tmp.r = 0.0;
+ tmp.r = tmp.r / 60.0;
+
+ if(tmp.r >= 5.0)
i = 5.0;
- else if(h >= 4.0)
+ else if(tmp.r >= 4.0)
i = 4.0;
- else if(h >= 3.0)
+ else if(tmp.r >= 3.0)
i = 3.0;
- else if(h >= 2.0)
+ else if(tmp.r >= 2.0)
i = 2.0;
- else if(h >= 1.0)
+ else if(tmp.r >= 1.0)
i = 1.0;
else
i = 0.0;
- 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)));
+ 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)));
if(i == 0.0)
- 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);
+ 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);
}
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-18 15:36:25 UTC (rev 11656)
+++ branches/soc-2007-maike/release/glsl/colorband_rgb_hsv.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -1,7 +1,6 @@
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;
@@ -10,35 +9,27 @@
if(maxn != 0.0)
color.g = (maxn - minn) / maxn;
- else{
- color.r = 0.0;
+ else
color.g = 0.0;
- }
if(color.g == 0.0)
- color.r = -1.0;
+ color.b = -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.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 = (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.r = color.r * 60.0;
+
if(color.r < 0.0)
- color.r += 360.0;
+ color.r = color.r + 360.0;
}
- color.r = max(color.r / 360.0, 0.0);
-
return(color);
}
+
Modified: branches/soc-2007-maike/release/glsl/lambert_area.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/lambert_area.gsl 2007-08-18 15:36:25 UTC (rev 11656)
+++ branches/soc-2007-maike/release/glsl/lambert_area.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -1,36 +1,3 @@
float lambertarea(light l, vec3 vnormal, float unused1, float unused2){
- vec3 lightVec = normalize(l.loc - pos);
- vec3 vect1, vect2, vect3, vect4;
- vec3 cross1, cross2, cross3, cross4;
- float rad[4];
-
- float fac;
-
- vect1 = normalize(pos - vec3(l.mat[0][0], l.mat[0][1], l.mat[0][2]));
- vect2 = normalize(pos - vec3(l.mat[1][0], l.mat[1][1], l.mat[1][2]));
- vect3 = normalize(pos - vec3(l.mat[2][0], l.mat[2][1], l.mat[2][2]));
- vect4 = normalize(pos - vec3(l.mat[3][0], l.mat[3][1], l.mat[3][2]));
-
- cross1 = normalize(cross(vect1, vect2));
- cross2 = normalize(cross(vect2, vect3));
- cross3 = normalize(cross(vect3, vect4));
- cross4 = normalize(cross(vect4, vect1));
-
- rad[0] = dot(vect1, vect2);
- rad[1] = dot(vect2, vect3);
- rad[2] = dot(vect3, vect4);
- rad[3] = dot(vect4, vect1);
-
- rad[0] = acos(clamp(rad[0], -1.0, 1.0)) * (1.0 - floor(clamp(rad[0], 0.1, 1.0) + 0.00001));
- rad[1] = acos(clamp(rad[1], -1.0, 1.0)) * (1.0 - floor(clamp(rad[1], 0.1, 1.0) + 0.00001));
- rad[2] = acos(clamp(rad[2], -1.0, 1.0)) * (1.0 - floor(clamp(rad[2], 0.1, 1.0) + 0.00001));
- rad[3] = acos(clamp(rad[3], -1.0, 1.0)) * (1.0 - floor(clamp(rad[3], 0.1, 1.0) + 0.00001));
-
- fac = rad[0] * dot(vnormal, cross1);
- fac += rad[1] * dot(vnormal, cross2);
- fac += rad[2] * dot(vnormal, cross3);
- fac += rad[3] * dot(vnormal, cross4);
-
- fac = max(pow(-fac * l.areasize, l.k), 0.0);
- return(fac);
+ return(area_energy(l, vnormal));
}
Modified: branches/soc-2007-maike/release/glsl/light_calc.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-08-18 15:36:25 UTC (rev 11656)
+++ branches/soc-2007-maike/release/glsl/light_calc.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -34,12 +34,14 @@
#ifdef CALC_SPECULAR
#ifdef LIGHT_ID
-#ifdef SPEC_CB_TYPE
#ifdef HEMI
-rslt2 = SPEC_SHADER_ID(lights[LIGHT_ID], normal);
+spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], norm, hard) * spec1 * spec_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#else
-rslt2 = SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec2, spec3);
+rslt2 = SPEC_SHADER_ID(lights[LIGHT_ID], norm, spec2, spec3);
+#ifdef AREA
+rslt2 *= area_energy(lights[LIGHT_ID], norm);
#endif
+#ifdef SPEC_CB_TYPE
#if SPEC_CB_TYPE == 0
spec_fac = rslt2;
#else
@@ -50,14 +52,12 @@
#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 * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].energy * vis;
+spec_rslt += SPEC_CB_BLEND_FUNC(spec_cb.rgb, spec_color, SPEC_CB_FAC * spec_cb.a) * 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;
-#else
-spec_rslt+= SPEC_SHADER_ID(lights[LIGHT_ID], normal, spec2, spec3) * spec1 * spec_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
+spec_rslt+= rslt2 * spec1 * spec_color * vec3(lights[LIGHT_ID].color) * lights[LIGHT_ID].layer * lights[LIGHT_ID].energy * vis;
#endif
#endif
+
#endif
#endif
@@ -77,5 +77,6 @@
#undef DIFF_SHADER_ID
#undef SPEC_SHADER_ID
#undef HEMI
+#undef AREA
#undef CALC_DIFFUSE
#undef CALC_SPECULAR
Modified: branches/soc-2007-maike/release/glsl/material.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material.gsl 2007-08-18 15:36:25 UTC (rev 11656)
+++ branches/soc-2007-maike/release/glsl/material.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -6,7 +6,8 @@
vec4 diff_cb, spec_cb;
float diff_cb_res = 0.0;
float spec_cb_res = 0.0;
- vec3 norm = normal;
+ vec3 unnorm = normal;
+ vec3 norm = normalize(normal);
#ifdef IS_SHADELESS
return(diff_color);
Modified: branches/soc-2007-maike/release/glsl/material_return.gsl
===================================================================
--- branches/soc-2007-maike/release/glsl/material_return.gsl 2007-08-18 15:36:25 UTC (rev 11656)
+++ branches/soc-2007-maike/release/glsl/material_return.gsl 2007-08-18 15:49:09 UTC (rev 11657)
@@ -9,18 +9,15 @@
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 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);
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list