diff options
Diffstat (limited to 'source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl')
-rw-r--r-- | source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl | 38 |
1 files changed, 14 insertions, 24 deletions
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl index 9f73f654217..e0931128485 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl @@ -1,28 +1,19 @@ -void dfdx_v3(vec3 v, out vec3 dy) -{ - dy = v + DFDX_SIGN * dFdx(v); -} -void dfdy_v3(vec3 v, out vec3 dy) +void differentiate_texco(vec3 v, out vec3 df) { - dy = v + DFDY_SIGN * dFdy(v); + /* Implementation defined. */ + df = v + dF_impl(v); } -void node_bump(float strength, - float dist, - float height, - float height_dx, - float height_dy, - vec3 N, - vec3 surf_pos, - float invert, - out vec3 result) +void node_bump( + float strength, float dist, float height, vec3 N, vec2 dHd, float invert, out vec3 result) { - N = mat3(ViewMatrix) * normalize(N); - dist *= gl_FrontFacing ? invert : -invert; + N = normalize(N); + dist *= FrontFacing ? invert : -invert; - vec3 dPdx = dFdx(surf_pos); - vec3 dPdy = dFdy(surf_pos); +#ifdef GPU_FRAGMENT_SHADER + vec3 dPdx = dFdx(g_data.P); + vec3 dPdy = dFdy(g_data.P); /* Get surface tangents from normal. */ vec3 Rx = cross(dPdy, N); @@ -31,14 +22,13 @@ void node_bump(float strength, /* Compute surface gradient and determinant. */ float det = dot(dPdx, Rx); - float dHdx = height_dx - height; - float dHdy = height_dy - height; - vec3 surfgrad = dHdx * Rx + dHdy * Ry; + vec3 surfgrad = dHd.x * Rx + dHd.y * Ry; strength = max(strength, 0.0); result = normalize(abs(det) * N - dist * sign(det) * surfgrad); result = normalize(mix(N, result, strength)); - - result = mat3(ViewMatrixInverse) * result; +#else + result = N; +#endif } |