Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/gpu/intern/gpu_shader_material.glsl')
-rw-r--r--source/blender/gpu/intern/gpu_shader_material.glsl31
1 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl
index cfd35f59478..17f4e93670b 100644
--- a/source/blender/gpu/intern/gpu_shader_material.glsl
+++ b/source/blender/gpu/intern/gpu_shader_material.glsl
@@ -1098,6 +1098,37 @@ void mtex_image(vec3 vec, sampler2D ima, out float value, out vec4 color, out ve
normal = 2.0*(vec3(color.r, -color.g, color.b) - vec3(0.5, -0.5, 0.5));
}
+/*
+ Helper function for on the fly normal map generation from height map.
+*/
+void mtex_h2n_rgb2float(vec4 color, out float outval)
+{
+ float scale = 1.0;
+ outval = (color.r + color.g + color .b) / 3.0 * scale;
+}
+
+/*
+ On the fly normal map generation from bump map.
+
+ This is replacement for mtex_image which generates the normal value from a height value.
+ It is inspired by The GIMP normal map plugin. I took the explicit algorithm and
+ streamlined it to fit implicit GPU computation.
+*/
+void mtex_height_to_normal(vec3 texcoord, sampler2D image, vec2 texsize, out float value, out vec4 color, out vec3 normal)
+{
+ float down, up, right, left;
+ /*texsize.xy = textureSize2D(image, 0);*/
+
+ mtex_h2n_rgb2float( texture2D(image, texcoord.st+vec2(0,1)/texsize.xy), down );
+ mtex_h2n_rgb2float( texture2D(image, texcoord.st+vec2(0,-1)/texsize.xy), up );
+ mtex_h2n_rgb2float( texture2D(image, texcoord.st+vec2(1,0)/texsize.xy), right );
+ mtex_h2n_rgb2float( texture2D(image, texcoord.st+vec2(-1,0)/texsize.xy), left );
+
+ normal = normalize(vec3(left - right, down - up, 1.0));
+ color = texture2D(image, texcoord.xy);
+ value = 1.0;
+}
+
void mtex_negate_texnormal(vec3 normal, out vec3 outnormal)
{
outnormal = vec3(-normal.x, -normal.y, normal.z);