Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/shaders/material/gpu_shader_material_noise.glsl
| /* clang-format off */ | |||||
| #define FLOORFRAC(x, x_int, x_fract) { float x_floor = floor(x); x_int = int(x_floor); x_fract = x - x_floor; } | |||||
| /* clang-format on */ | |||||
| /* Bilinear Interpolation: | /* Bilinear Interpolation: | ||||
| * | * | ||||
| * v2 v3 | * v2 v3 | ||||
| Context not available. | |||||
| float noise_perlin(float x) | float noise_perlin(float x) | ||||
| { | { | ||||
| int X; | int X; | ||||
| float fx = floorfrac(x, X); | float fx; | ||||
| FLOORFRAC(x, X, fx); | |||||
| float u = fade(fx); | float u = fade(fx); | ||||
| float r = mix(noise_grad(hash_int(X), fx), noise_grad(hash_int(X + 1), fx - 1.0), u); | float r = mix(noise_grad(hash_int(X), fx), noise_grad(hash_int(X + 1), fx - 1.0), u); | ||||
| Context not available. | |||||
| float noise_perlin(vec2 vec) | float noise_perlin(vec2 vec) | ||||
| { | { | ||||
| int X; | int X, Y; | ||||
| int Y; | float fx, fy; | ||||
| float fx = floorfrac(vec.x, X); | FLOORFRAC(vec.x, X, fx); | ||||
| float fy = floorfrac(vec.y, Y); | FLOORFRAC(vec.y, Y, fy); | ||||
| float u = fade(fx); | float u = fade(fx); | ||||
| float v = fade(fy); | float v = fade(fy); | ||||
| Context not available. | |||||
| float noise_perlin(vec3 vec) | float noise_perlin(vec3 vec) | ||||
| { | { | ||||
| int X; | int X, Y, Z; | ||||
| int Y; | float fx, fy, fz; | ||||
| int Z; | |||||
| float fx = floorfrac(vec.x, X); | FLOORFRAC(vec.x, X, fx); | ||||
| float fy = floorfrac(vec.y, Y); | FLOORFRAC(vec.y, Y, fy); | ||||
| float fz = floorfrac(vec.z, Z); | FLOORFRAC(vec.z, Z, fz); | ||||
| float u = fade(fx); | float u = fade(fx); | ||||
| float v = fade(fy); | float v = fade(fy); | ||||
| Context not available. | |||||
| float noise_perlin(vec4 vec) | float noise_perlin(vec4 vec) | ||||
| { | { | ||||
| int X; | int X, Y, Z, W; | ||||
| int Y; | float fx, fy, fz, fw; | ||||
| int Z; | |||||
| int W; | FLOORFRAC(vec.x, X, fx); | ||||
| FLOORFRAC(vec.y, Y, fy); | |||||
| float fx = floorfrac(vec.x, X); | FLOORFRAC(vec.z, Z, fz); | ||||
| float fy = floorfrac(vec.y, Y); | FLOORFRAC(vec.w, W, fw); | ||||
| float fz = floorfrac(vec.z, Z); | |||||
| float fw = floorfrac(vec.w, W); | |||||
| float u = fade(fx); | float u = fade(fx); | ||||
| float v = fade(fy); | float v = fade(fy); | ||||
| Context not available. | |||||