This patch continue the efforts to split the `gpu_shader_material` file started in D5569. Dependency resolution is now recursive. Each shading node gets its own file. Additionally, some utility files are added to be shared between files, like `math_util`, `color_util`, and `hash`. Some files are always included because they may be used in the execution function, like `world_normals`. Some glsl functions appeared to be unused, so they were removed, like `output_node`, `bits_to_01`, and `exp_blender`. Other functions have been renamed to be more general and get used as utils, like `texco_norm` which became `vector_normalize`. A lot of the opengl tests fails, but those same tests also fail in master, so this is probably unrelated to this patch. Reviewers: brecht Differential Revision: https://developer.blender.org/D5616
28 lines
739 B
GLSL
28 lines
739 B
GLSL
void node_bump(
|
|
float strength, float dist, float height, 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 = dFdx(height);
|
|
float dHdy = dFdy(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;
|
|
}
|