2024-03-19 18:22:06 +05:30
|
|
|
float simple_noise_random(vec2 point) {
|
|
|
|
return fract(sin(point.x * 100. + point.y * 654.125) * 55647.8745);
|
2023-10-13 00:49:16 +05:30
|
|
|
}
|
|
|
|
|
2024-03-19 18:22:06 +05:30
|
|
|
float value_noise(vec2 uv) {
|
|
|
|
vec2 grid_uv = fract(uv);
|
|
|
|
vec2 grid_id = floor(uv);
|
|
|
|
grid_uv = grid_uv * grid_uv * (3. - 2. * grid_uv);
|
2023-12-24 20:47:18 +05:30
|
|
|
|
2024-03-19 18:22:06 +05:30
|
|
|
float bottom_left = simple_noise_random(grid_id);
|
|
|
|
float bottom_right = simple_noise_random(grid_id + vec2(1, 0));
|
|
|
|
float bottom = mix(bottom_left, bottom_right, grid_uv.x);
|
2023-12-24 20:47:18 +05:30
|
|
|
|
2024-03-19 18:22:06 +05:30
|
|
|
float top_left = simple_noise_random(grid_id + vec2(0, 1));
|
|
|
|
float top_right = simple_noise_random(grid_id + vec2(1, 1));
|
|
|
|
float top = mix(top_left, top_right, grid_uv.x);
|
|
|
|
|
|
|
|
return mix(bottom, top, grid_uv.y);
|
2023-10-13 00:49:16 +05:30
|
|
|
}
|
|
|
|
|
2024-03-19 18:22:06 +05:30
|
|
|
float simple_noise(vec2 uv, float scale, int octaves) {
|
|
|
|
octaves = clamp(octaves, 1, 6);
|
|
|
|
float noise = value_noise(uv * scale);
|
|
|
|
float amplitude = 1.;
|
2023-12-24 20:47:18 +05:30
|
|
|
|
2024-03-19 18:22:06 +05:30
|
|
|
for(int i = 1; i < octaves; i++) {
|
|
|
|
scale *= 2.;
|
|
|
|
amplitude /= 2.;
|
|
|
|
noise += value_noise(uv * scale) * amplitude;
|
2023-10-13 15:44:54 +05:30
|
|
|
}
|
2024-03-19 18:22:06 +05:30
|
|
|
|
|
|
|
return noise / 2.;
|
2023-10-13 00:49:16 +05:30
|
|
|
}
|