Cycles: svn merge -r39457:39669 https://svn.blender.org/svnroot/bf-blender/trunk...
[blender-staging.git] / source / blender / gpu / intern / gpu_shader_material.glsl
index 74defdf7b7696cd2cbd8b95de43be6c04dea8b2e..f2c4533a654cc086b2f0d6ec2103c9117459a6a0 100644 (file)
@@ -1227,6 +1227,22 @@ void mtex_bump_tap5( vec3 texco, sampler2D ima, float hScale,
        dBt = hScale * (Hu - Hd);
 }
 
+void mtex_bump_deriv( vec3 texco, sampler2D ima, float ima_x, float ima_y, float hScale, 
+                     out float dBs, out float dBt ) 
+{
+       float s = 1.0;          // negate this if flipped texture coordinate
+       vec2 TexDx = dFdx(texco.xy);
+       vec2 TexDy = dFdy(texco.xy);
+       
+       // this variant using a derivative map is described here
+       // http://mmikkelsen3d.blogspot.com/2011/07/derivative-maps.html
+       vec2 dim = vec2(ima_x, ima_y);
+       vec2 dBduv = hScale*dim*(2.0*texture2D(ima, texco.xy).xy-1.0);
+       
+       dBs = dBduv.x*TexDx.x + s*dBduv.y*TexDx.y;
+       dBt = dBduv.x*TexDy.x + s*dBduv.y*TexDy.y;
+}
+
 void mtex_bump_apply( float fDet, float dBs, float dBt, vec3 vR1, vec3 vR2, vec3 vNacc_in,
                                          out vec3 vNacc_out, out vec3 perturbed_norm ) 
 {