This repository has been archived on 2023-10-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
blender-archive/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl
Clément Foucault d83734aa4b EEVEE: Fix bump mapping
Fix issue in latest patch and assure derivatives calculation is correct on
all GPU.
2019-09-06 19:02:15 +02:00

45 lines
1.0 KiB
GLSL

void dfdx_v3(vec3 v, out vec3 dy)
{
dy = v + DFDX_SIGN * dFdx(v);
}
void dfdy_v3(vec3 v, out vec3 dy)
{
dy = v + DFDY_SIGN * dFdy(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)
{
N = mat3(ViewMatrix) * normalize(N);
dist *= gl_FrontFacing ? invert : -invert;
vec3 dPdx = dFdx(surf_pos);
vec3 dPdy = dFdy(surf_pos);
/* Get surface tangents from normal. */
vec3 Rx = cross(dPdy, N);
vec3 Ry = cross(N, dPdx);
/* 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;
strength = max(strength, 0.0);
result = normalize(abs(det) * N - dist * sign(det) * surfgrad);
result = normalize(mix(N, result, strength));
result = mat3(ViewMatrixInverse) * result;
}