Blender V5.0
BLI_noise.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
13
14namespace blender::noise {
15
16/* -------------------------------------------------------------------- */
22
23/* Hash integers to `uint32_t`. */
24
25uint32_t hash(uint32_t kx);
26uint32_t hash(uint32_t kx, uint32_t ky);
27uint32_t hash(uint32_t kx, uint32_t ky, uint32_t kz);
28uint32_t hash(uint32_t kx, uint32_t ky, uint32_t kz, uint32_t kw);
29
30/* Hash floats to `uint32_t`. */
31
32uint32_t hash_float(float kx);
33uint32_t hash_float(float2 k);
34uint32_t hash_float(float3 k);
35uint32_t hash_float(float4 k);
36uint32_t hash_float(const float4x4 &k);
37
38/* Hash integers to `float` between 0 and 1. */
39
40float hash_to_float(uint32_t kx);
41float hash_to_float(uint32_t kx, uint32_t ky);
42float hash_to_float(uint32_t kx, uint32_t ky, uint32_t kz);
43float hash_to_float(uint32_t kx, uint32_t ky, uint32_t kz, uint32_t kw);
44
45/* Hash floats to `float` between 0 and 1. */
46
47float hash_float_to_float(float k);
51
55
60
62
64
65/* -------------------------------------------------------------------- */
68
69/* Perlin noise in the range [-1, 1]. */
70
71float perlin_signed(float position);
72float perlin_signed(float2 position);
73float perlin_signed(float3 position);
74float perlin_signed(float4 position);
75
76/* Perlin noise in the range [0, 1]. */
77
78float perlin(float position);
79float perlin(float2 position);
80float perlin(float3 position);
81float perlin(float4 position);
82
83/* Perlin fractal Brownian motion. */
84
85template<typename T>
86float perlin_fbm(T p, float detail, float roughness, float lacunarity, bool normalize);
87
88/* Distorted fractal perlin noise. */
89
90template<typename T>
91float perlin_fractal_distorted(T position,
92 float detail,
93 float roughness,
94 float lacunarity,
95 float offset,
96 float gain,
97 float distortion,
98 int type,
99 bool normalize);
100
101/* Distorted fractal perlin noise that outputs a float3. */
102
104 float detail,
105 float roughness,
106 float lacunarity,
107 float offset,
108 float gain,
109 float distortion,
110 int type,
111 bool normalize);
113 float detail,
114 float roughness,
115 float lacunarity,
116 float offset,
117 float gain,
118 float distortion,
119 int type,
120 bool normalize);
122 float detail,
123 float roughness,
124 float lacunarity,
125 float offset,
126 float gain,
127 float distortion,
128 int type,
129 bool normalize);
131 float detail,
132 float roughness,
133 float lacunarity,
134 float offset,
135 float gain,
136 float distortion,
137 int type,
138 bool normalize);
139
141
142/* -------------------------------------------------------------------- */
145
159
161 float distance = 0.0f;
162 float3 color{0.0f, 0.0f, 0.0f};
163 float4 position{0.0f, 0.0f, 0.0f, 0.0f};
164};
165
166/* ***** Distances ***** */
167
168float voronoi_distance(const float a, const float b);
169float voronoi_distance(const float2 a, const float2 b, const VoronoiParams &params);
170float voronoi_distance(const float3 a, const float3 b, const VoronoiParams &params);
171float voronoi_distance(const float4 a, const float4 b, const VoronoiParams &params);
172
173/* **** 1D Voronoi **** */
174
175float4 voronoi_position(const float coord);
176VoronoiOutput voronoi_f1(const VoronoiParams &params, const float coord);
178 const float coord,
179 const bool calc_color);
180VoronoiOutput voronoi_f2(const VoronoiParams &params, const float coord);
181float voronoi_distance_to_edge(const VoronoiParams &params, const float coord);
182float voronoi_n_sphere_radius(const VoronoiParams &params, const float coord);
183
184/* **** 2D Voronoi **** */
185
186float4 voronoi_position(const float2 coord);
189 const float2 coord,
190 const bool calc_color);
192float voronoi_distance_to_edge(const VoronoiParams &params, const float2 coord);
193float voronoi_n_sphere_radius(const VoronoiParams &params, const float2 coord);
194
195/* **** 3D Voronoi **** */
196
197float4 voronoi_position(const float3 coord);
200 const float3 coord,
201 const bool calc_color);
203float voronoi_distance_to_edge(const VoronoiParams &params, const float3 coord);
204float voronoi_n_sphere_radius(const VoronoiParams &params, const float3 coord);
205
206/* **** 4D Voronoi **** */
207
208float4 voronoi_position(const float4 coord);
211 const float4 coord,
212 const bool calc_color);
214float voronoi_distance_to_edge(const VoronoiParams &params, const float4 coord);
215float voronoi_n_sphere_radius(const VoronoiParams &params, const float4 coord);
216
217/* Fractal Voronoi Noise */
218
219template<typename T>
221 const T coord,
222 const bool calc_color);
223template<typename T>
224float fractal_voronoi_distance_to_edge(const VoronoiParams &params, const T coord);
225
227
228/* -------------------------------------------------------------------- */
231
232void gabor(const float2 coordinates,
233 const float scale,
234 const float frequency,
235 const float anisotropy,
236 const float orientation,
237 float *r_value,
238 float *r_phase,
239 float *r_intensity);
240
241void gabor(const float3 coordinates,
242 const float scale,
243 const float frequency,
244 const float anisotropy,
245 const float3 orientation,
246 float *r_value,
247 float *r_phase,
248 float *r_intensity);
249
251
252} // namespace blender::noise
VecBase< float, D > normalize(VecOp< float, D >) RET
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
#define T
float3 perlin_float3_fractal_distorted(float position, float detail, float roughness, float lacunarity, float offset, float gain, float distortion, int type, bool normalize)
Definition noise.cc:1001
uint32_t hash_float(float kx)
Definition noise.cc:201
float hash_float_to_float(float k)
Definition noise.cc:255
float perlin_signed(float position)
Definition noise.cc:614
void gabor(const float2 coordinates, const float scale, const float frequency, const float anisotropy, const float orientation, float *r_value, float *r_phase, float *r_intensity)
Definition noise.cc:2505
float4 voronoi_position(const float coord)
Definition noise.cc:1248
VoronoiOutput voronoi_smooth_f1(const VoronoiParams &params, const float coord, const bool calc_color)
Definition noise.cc:1280
float voronoi_n_sphere_radius(const VoronoiParams &params, const float coord)
Definition noise.cc:1370
float perlin(float position)
Definition noise.cc:665
float voronoi_distance_to_edge(const VoronoiParams &params, const float coord)
Definition noise.cc:1356
VoronoiOutput fractal_voronoi_x_fx(const VoronoiParams &params, const T coord, const bool calc_color)
Definition noise.cc:2078
float voronoi_distance(const float a, const float b)
Definition noise.cc:1166
float perlin_fbm(T p, float detail, float roughness, float lacunarity, bool normalize)
Definition noise.cc:696
VoronoiOutput voronoi_f2(const VoronoiParams &params, const float coord)
Definition noise.cc:1318
float3 hash_float_to_float3(float k)
Definition noise.cc:292
float fractal_voronoi_distance_to_edge(const VoronoiParams &params, const T coord)
Definition noise.cc:2137
float4 hash_float_to_float4(float4 k)
Definition noise.cc:320
VoronoiOutput voronoi_f1(const VoronoiParams &params, const float coord)
Definition noise.cc:1253
float perlin_fractal_distorted(T position, float detail, float roughness, float lacunarity, float offset, float gain, float distortion, int type, bool normalize)
Definition noise.cc:947
float2 hash_float_to_float2(float2 k)
Definition noise.cc:275
float hash_to_float(uint32_t kx)
Definition noise.cc:233
MatBase< float, 4, 4 > float4x4
VecBase< float, 4 > float4
VecBase< float, 2 > float2
VecBase< float, 3 > float3
#define hash
Definition noise_c.cc:154