[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