[Bf-blender-cvs] [8ba1dab3a2] blender-v2.78c-release: Blender 2.78c: Fix Brick Texture GLSL, broken after Mortar Smooth addition.

Thomas Dinges noreply at git.blender.org
Wed Feb 22 16:50:20 CET 2017


Commit: 8ba1dab3a25bba81644825965636e34ae00841d1
Author: Thomas Dinges
Date:   Mon Nov 7 20:55:12 2016 +0100
Branches: blender-v2.78c-release
https://developer.blender.org/rB8ba1dab3a25bba81644825965636e34ae00841d1

Blender 2.78c: Fix Brick Texture GLSL, broken after Mortar Smooth addition.

===================================================================

M	source/blender/gpu/shaders/gpu_shader_material.glsl

===================================================================

diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index b1e5f2cdf6..0f3ffa8244 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2822,7 +2822,7 @@ void node_tex_checker(vec3 co, vec4 color1, vec4 color2, float scale, out vec4 c
 }
 
 #ifdef BIT_OPERATIONS
-vec2 calc_brick_texture(vec3 p, float mortar_size, float bias,
+vec2 calc_brick_texture(vec3 p, float mortar_size, float mortar_smooth, float bias,
                         float brick_width, float row_height,
                         float offset_amount, int offset_frequency,
                         float squash_amount, int squash_frequency)
@@ -2843,17 +2843,26 @@ vec2 calc_brick_texture(vec3 p, float mortar_size, float bias,
 	x = (p.x + offset) - brick_width * bricknum;
 	y = p.y - row_height * rownum;
 
-	return vec2(clamp((integer_noise((rownum << 16) + (bricknum & 0xFFFF)) + bias), 0.0, 1.0),
-	            (x < mortar_size || y < mortar_size ||
-	             x > (brick_width - mortar_size) ||
-	             y > (row_height - mortar_size)) ? 1.0 : 0.0);
+	float tint = clamp((integer_noise((rownum << 16) + (bricknum & 0xFFFF)) + bias), 0.0, 1.0);
+
+	float min_dist = min(min(x, y), min(brick_width - x, row_height - y));
+	if(min_dist >= mortar_size) {
+		return vec2(tint, 0.0);
+	}
+	else if(mortar_smooth == 0.0) {
+		return vec2(tint, 1.0);
+	}
+	else {
+		min_dist = 1.0 - min_dist/mortar_size;
+		return vec2(tint, smoothstep(0.0, mortar_smooth, min_dist));
+	}
 }
 #endif
 
 void node_tex_brick(vec3 co,
                     vec4 color1, vec4 color2,
                     vec4 mortar, float scale,
-                    float mortar_size, float bias,
+                    float mortar_size, float mortar_smooth, float bias,
                     float brick_width, float row_height,
                     float offset_amount, float offset_frequency,
                     float squash_amount, float squash_frequency,
@@ -2861,7 +2870,7 @@ void node_tex_brick(vec3 co,
 {
 #ifdef BIT_OPERATIONS
 	vec2 f2 = calc_brick_texture(co * scale,
-	                             mortar_size, bias,
+	                             mortar_size, mortar_smooth, bias,
 	                             brick_width, row_height,
 	                             offset_amount, int(offset_frequency),
 	                             squash_amount, int(squash_frequency));
@@ -2871,7 +2880,7 @@ void node_tex_brick(vec3 co,
 		float facm = 1.0 - tint;
 		color1 = facm * color1 + tint * color2;
 	}
-	color = (f == 1.0) ? mortar : color1;
+	color = mix(color1, mortar, f);
 	fac = f;
 #else
 	color = vec4(1.0);




More information about the Bf-blender-cvs mailing list