#define SCALE 0.12 | |
#define BIAS -0.04 | |
#define BIN_ITER 5 | |
#ifndef BUMP_HQ | |
#define LIN_ITER 5 | |
#endif | |
vec2 Bump_DoOcclusionParallax(in sampler2D heightMap, in vec2 texCoord, in vec3 tanViewDir){ | |
float size = 1.0 / float(BIN_ITER); | |
// depth | |
float d = 1.0; | |
// best depth | |
float bd = 0.0; | |
#ifdef BUMP_HQ | |
const int N = 8; | |
int LIN_ITER = mix(2 * N, N, tanViewDir.z); | |
#endif | |
// search from front to back | |
for (int i = 0; i < LIN_ITER; i++){ | |
d -= dstep; | |
float h = texture2D(heightMap, dp + ds * (1.0 - d)).a; | |
if (bd < 0.005) // if no depth found yet | |
if (d <= h) bd = depth; // best depth | |
} | |
for (int i = 0; i < BIN_ITER; i++) { | |
size *= 0.5; | |
float t = texture2D(heightMap, dp + ds * (1.0 - d)).a; | |
if (d <= t) { | |
bd = depth; | |
d += 2 * size; | |
} | |
d -= size; | |
} | |
} | |
vec2 Bump_DoParallax(in sampler2D heightMap, in vec2 texCoord, in vec3 tanViewDir){ | |
float h = texture2D(heightMap, texCoord).a * SCALE + BIAS; | |
return texCoord + h * tanViewDir.xy; | |
} |