diff options
author | Thomas Dinges <blender@dingto.org> | 2016-11-07 22:55:12 +0300 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2016-11-07 22:55:36 +0300 |
commit | 28639a22bcba4b6f09165188446e7919bab6fe6b (patch) | |
tree | 5ab0537087a83ba7a1489c32067cbee08e038a0f /source/blender/gpu/shaders | |
parent | 535914aa466b5e96ab5db6420e520459f0ddfc5f (diff) |
Fix Brick Texture GLSL, broken after Mortar Smooth addition.
Diffstat (limited to 'source/blender/gpu/shaders')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_material.glsl | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 67da8201f66..b4e6356ada5 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)); |