Blender V4.3
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
5#pragma once
6
9
10namespace blender::noise {
11
12/* -------------------------------------------------------------------- */
19/* Hash integers to `uint32_t`. */
20
25
26/* Hash floats to `uint32_t`. */
27
28uint32_t hash_float(float kx);
33
34/* Hash integers to `float` between 0 and 1. */
35
36float hash_to_float(uint32_t kx);
37float hash_to_float(uint32_t kx, uint32_t ky);
38float hash_to_float(uint32_t kx, uint32_t ky, uint32_t kz);
39float hash_to_float(uint32_t kx, uint32_t ky, uint32_t kz, uint32_t kw);
40
41/* Hash floats to `float` between 0 and 1. */
42
43float hash_float_to_float(float k);
47
51
56
58
61/* -------------------------------------------------------------------- */
65/* Perlin noise in the range [-1, 1]. */
66
67float perlin_signed(float position);
68float perlin_signed(float2 position);
69float perlin_signed(float3 position);
70float perlin_signed(float4 position);
71
72/* Perlin noise in the range [0, 1]. */
73
74float perlin(float position);
75float perlin(float2 position);
76float perlin(float3 position);
77float perlin(float4 position);
78
79/* Perlin fractal Brownian motion. */
80
81template<typename T>
82float perlin_fbm(T p, float detail, float roughness, float lacunarity, bool normalize);
83
84/* Distorted fractal perlin noise. */
85
86template<typename T>
87float perlin_fractal_distorted(T position,
88 float detail,
89 float roughness,
90 float lacunarity,
91 float offset,
92 float gain,
93 float distortion,
94 int type,
95 bool normalize);
96
97/* Distorted fractal perlin noise that outputs a float3. */
98
100 float detail,
101 float roughness,
102 float lacunarity,
103 float offset,
104 float gain,
105 float distortion,
106 int type,
107 bool normalize);
109 float detail,
110 float roughness,
111 float lacunarity,
112 float offset,
113 float gain,
114 float distortion,
115 int type,
116 bool normalize);
118 float detail,
119 float roughness,
120 float lacunarity,
121 float offset,
122 float gain,
123 float distortion,
124 int type,
125 bool normalize);
127 float detail,
128 float roughness,
129 float lacunarity,
130 float offset,
131 float gain,
132 float distortion,
133 int type,
134 bool normalize);
135
138/* -------------------------------------------------------------------- */
155
157 float distance = 0.0f;
158 float3 color{0.0f, 0.0f, 0.0f};
159 float4 position{0.0f, 0.0f, 0.0f, 0.0f};
160};
161
162/* ***** Distances ***** */
163
164float voronoi_distance(const float a, const float b);
165float voronoi_distance(const float2 a, const float2 b, const VoronoiParams &params);
166float voronoi_distance(const float3 a, const float3 b, const VoronoiParams &params);
167float voronoi_distance(const float4 a, const float4 b, const VoronoiParams &params);
168
169/* **** 1D Voronoi **** */
170
171float4 voronoi_position(const float coord);
172VoronoiOutput voronoi_f1(const VoronoiParams &params, const float coord);
174 const float coord,
175 const bool calc_color);
176VoronoiOutput voronoi_f2(const VoronoiParams &params, const float coord);
177float voronoi_distance_to_edge(const VoronoiParams &params, const float coord);
178float voronoi_n_sphere_radius(const VoronoiParams &params, const float coord);
179
180/* **** 2D Voronoi **** */
181
182float4 voronoi_position(const float2 coord);
185 const float2 coord,
186 const bool calc_color);
188float voronoi_distance_to_edge(const VoronoiParams &params, const float2 coord);
189float voronoi_n_sphere_radius(const VoronoiParams &params, const float2 coord);
190
191/* **** 3D Voronoi **** */
192
193float4 voronoi_position(const float3 coord);
196 const float3 coord,
197 const bool calc_color);
199float voronoi_distance_to_edge(const VoronoiParams &params, const float3 coord);
200float voronoi_n_sphere_radius(const VoronoiParams &params, const float3 coord);
201
202/* **** 4D Voronoi **** */
203
204float4 voronoi_position(const float4 coord);
207 const float4 coord,
208 const bool calc_color);
210float voronoi_distance_to_edge(const VoronoiParams &params, const float4 coord);
211float voronoi_n_sphere_radius(const VoronoiParams &params, const float4 coord);
212
213/* Fractal Voronoi Noise */
214
215template<typename T>
217 const T coord,
218 const bool calc_color);
219template<typename T>
220float fractal_voronoi_distance_to_edge(const VoronoiParams &params, const T coord);
221
224/* -------------------------------------------------------------------- */
228void gabor(const float2 coordinates,
229 const float scale,
230 const float frequency,
231 const float anisotropy,
232 const float orientation,
233 float *r_value,
234 float *r_phase,
235 float *r_intensity);
236
237void gabor(const float3 coordinates,
238 const float scale,
239 const float frequency,
240 const float anisotropy,
241 const float3 orientation,
242 float *r_value,
243 float *r_phase,
244 float *r_intensity);
245
248} // namespace blender::noise
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
Definition btVector3.h:303
local_group_size(16, 16) .push_constant(Type b
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
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:886
uint32_t hash_float(float kx)
Definition noise.cc:134
float hash_float_to_float(float k)
Definition noise.cc:188
float perlin_signed(float position)
Definition noise.cc:511
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:2353
float4 voronoi_position(const float coord)
Definition noise.cc:1123
VoronoiOutput voronoi_smooth_f1(const VoronoiParams &params, const float coord, const bool calc_color)
Definition noise.cc:1155
float voronoi_n_sphere_radius(const VoronoiParams &params, const float coord)
Definition noise.cc:1245
float perlin(float position)
Definition noise.cc:562
float voronoi_distance_to_edge(const VoronoiParams &params, const float coord)
Definition noise.cc:1231
VoronoiOutput fractal_voronoi_x_fx(const VoronoiParams &params, const T coord, const bool calc_color)
Definition noise.cc:1935
float voronoi_distance(const float a, const float b)
Definition noise.cc:1051
float perlin_fbm(T p, float detail, float roughness, float lacunarity, bool normalize)
Definition noise.cc:586
VoronoiOutput voronoi_f2(const VoronoiParams &params, const float coord)
Definition noise.cc:1193
float3 hash_float_to_float3(float k)
Definition noise.cc:225
float fractal_voronoi_distance_to_edge(const VoronoiParams &params, const T coord)
Definition noise.cc:1994
float4 hash_float_to_float4(float4 k)
Definition noise.cc:253
VoronoiOutput voronoi_f1(const VoronoiParams &params, const float coord)
Definition noise.cc:1128
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:832
float2 hash_float_to_float2(float2 k)
Definition noise.cc:208
float hash_to_float(uint32_t kx)
Definition noise.cc:166
#define hash
Definition noise.c:154
unsigned int uint32_t
Definition stdint.h:80