diff options
author | Jacques Lucke <jacques@blender.org> | 2021-09-24 12:24:15 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-09-24 12:24:15 +0300 |
commit | d8a5b768f0763dab725401460e229787d080476a (patch) | |
tree | 9f72478bf0b17299086768b489b3df7f2fa40ef5 /source/blender/blenlib/BLI_noise.hh | |
parent | bc27bafa542d5a5f85b45b83676fe1ad21a3f926 (diff) |
BLI: expose more noise hash functions in header
This is a follow up of the previous commit.
These functions are useful for other areas of Blender as well.
Diffstat (limited to 'source/blender/blenlib/BLI_noise.hh')
-rw-r--r-- | source/blender/blenlib/BLI_noise.hh | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/source/blender/blenlib/BLI_noise.hh b/source/blender/blenlib/BLI_noise.hh index b5a06b2b020..7e1655f7864 100644 --- a/source/blender/blenlib/BLI_noise.hh +++ b/source/blender/blenlib/BLI_noise.hh @@ -22,43 +22,66 @@ namespace blender::noise { -/* Create a randomized hash from the given inputs. Contrary to hash functions in `BLI_hash.hh` - * these functions produce better randomness but are more expensive to compute. */ +/* -------------------------------------------------------------------- + * Hash functions. + + * Create a randomized hash from the given inputs. Contrary to hash functions in `BLI_hash.hh` + * these functions produce better randomness but are more expensive to compute. + */ + +/* Hash integers to `uint32_t`. */ uint32_t hash(uint32_t kx); uint32_t hash(uint32_t kx, uint32_t ky); uint32_t hash(uint32_t kx, uint32_t ky, uint32_t kz); uint32_t hash(uint32_t kx, uint32_t ky, uint32_t kz, uint32_t kw); -/* Perlin noise in the range [-1, 1]. */ +/* Hash floats to `uint32_t`. */ +uint32_t hash_float(float kx); +uint32_t hash_float(float2 k); +uint32_t hash_float(float3 k); +uint32_t hash_float(float4 k); +/* Hash integers to `float` between 0 and 1. */ +float hash_to_float(uint32_t kx); +float hash_to_float(uint32_t kx, uint32_t ky); +float hash_to_float(uint32_t kx, uint32_t ky, uint32_t kz); +float hash_to_float(uint32_t kx, uint32_t ky, uint32_t kz, uint32_t kw); + +/* Hash floats to `float` between 0 and 1. */ +float hash_float_to_float(float k); +float hash_float_to_float(float2 k); +float hash_float_to_float(float3 k); +float hash_float_to_float(float4 k); + +/* -------------------------------------------------------------------- + * Perlin noise. + */ + +/* Perlin noise in the range [-1, 1]. */ float perlin_signed(float position); float perlin_signed(float2 position); float perlin_signed(float3 position); float perlin_signed(float4 position); /* Perlin noise in the range [0, 1]. */ - float perlin(float position); float perlin(float2 position); float perlin(float3 position); float perlin(float4 position); /* Fractal perlin noise in the range [0, 1]. */ - float perlin_fractal(float position, float octaves, float roughness); float perlin_fractal(float2 position, float octaves, float roughness); float perlin_fractal(float3 position, float octaves, float roughness); float perlin_fractal(float4 position, float octaves, float roughness); /* Positive distorted fractal perlin noise. */ - float perlin_fractal_distorted(float position, float octaves, float roughness, float distortion); float perlin_fractal_distorted(float2 position, float octaves, float roughness, float distortion); float perlin_fractal_distorted(float3 position, float octaves, float roughness, float distortion); float perlin_fractal_distorted(float4 position, float octaves, float roughness, float distortion); /* Positive distorted fractal perlin noise that outputs a float3. */ - float3 perlin_float3_fractal_distorted(float position, float octaves, float roughness, |