Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmar Emara <mail@OmarEmara.dev>2021-09-10 15:25:32 +0300
committerOmar Emara <mail@OmarEmara.dev>2021-09-10 15:25:32 +0300
commita1167e910a22077a6738edc3ee8e57ab4d5d62dd (patch)
tree4cd2528296f169003244dae7e816112e2ad217ca /source/blender/blenlib/BLI_noise.hh
parent60cfdf080929aca61c37439b601b1ef85d51391a (diff)
BLI: Add Cycles compatible Perlin noise
This patch adds new Perlin noise functions to BLI. The noises are compatible with the shading texture noises in EEVEE, SVM, and OSL. The existing Jenkins hash functions couldn't be used because they are not compatible with the shading implementations and an attempt at adjusting the implementation will break compatibility in various areas of Blender. So the simplest approach is to reimplement the relevant hashing functions inside the noise module itself. Additionally, this patch also adds a minimal float4 structure to use in the interface of the noise functions. Reviewed By: JacquesLucke Differential Revision: https://developer.blender.org/D12443
Diffstat (limited to 'source/blender/blenlib/BLI_noise.hh')
-rw-r--r--source/blender/blenlib/BLI_noise.hh72
1 files changed, 72 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_noise.hh b/source/blender/blenlib/BLI_noise.hh
new file mode 100644
index 00000000000..760ff082d06
--- /dev/null
+++ b/source/blender/blenlib/BLI_noise.hh
@@ -0,0 +1,72 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include "BLI_float2.hh"
+#include "BLI_float3.hh"
+#include "BLI_float4.hh"
+
+namespace blender::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,
+ float distortion);
+float3 perlin_float3_fractal_distorted(float2 position,
+ float octaves,
+ float roughness,
+ float distortion);
+float3 perlin_float3_fractal_distorted(float3 position,
+ float octaves,
+ float roughness,
+ float distortion);
+float3 perlin_float3_fractal_distorted(float4 position,
+ float octaves,
+ float roughness,
+ float distortion);
+
+} // namespace blender::noise