Blender V5.0
noise_c.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <algorithm>
10#include <cmath>
11
12#include "BLI_compiler_compat.h"
13#include "BLI_sys_types.h"
14
15#include "BLI_noise.h" /* Own include. */
16
17/* local */
18static float noise3_perlin(const float vec[3]);
19// static float turbulence_perlin(const float point[3], float lofreq, float hifreq);
20// static float turbulencep(float noisesize, float x, float y, float z, int nr);
21
22/* UNUSED */
23// #define HASHVEC(x, y, z) hashvectf + 3 * hash[(hash[(hash[(z) & 255] + (y)) & 255] + (x)) & 255]
24
25/* -------------------------------------------------------------------- */
28
29/* needed for voronoi */
30#define HASHPNT(x, y, z) hashpntf + 3 * hash[(hash[(hash[(z) & 255] + (y)) & 255] + (x)) & 255]
31static const float hashpntf[768] = {
32 0.536902, 0.020915, 0.501445, 0.216316, 0.517036, 0.822466, 0.965315, 0.377313, 0.678764,
33 0.744545, 0.097731, 0.396357, 0.247202, 0.520897, 0.613396, 0.542124, 0.146813, 0.255489,
34 0.810868, 0.638641, 0.980742, 0.292316, 0.357948, 0.114382, 0.861377, 0.629634, 0.722530,
35 0.714103, 0.048549, 0.075668, 0.564920, 0.162026, 0.054466, 0.411738, 0.156897, 0.887657,
36 0.599368, 0.074249, 0.170277, 0.225799, 0.393154, 0.301348, 0.057434, 0.293849, 0.442745,
37 0.150002, 0.398732, 0.184582, 0.915200, 0.630984, 0.974040, 0.117228, 0.795520, 0.763238,
38 0.158982, 0.616211, 0.250825, 0.906539, 0.316874, 0.676205, 0.234720, 0.667673, 0.792225,
39 0.273671, 0.119363, 0.199131, 0.856716, 0.828554, 0.900718, 0.705960, 0.635923, 0.989433,
40 0.027261, 0.283507, 0.113426, 0.388115, 0.900176, 0.637741, 0.438802, 0.715490, 0.043692,
41 0.202640, 0.378325, 0.450325, 0.471832, 0.147803, 0.906899, 0.524178, 0.784981, 0.051483,
42 0.893369, 0.596895, 0.275635, 0.391483, 0.844673, 0.103061, 0.257322, 0.708390, 0.504091,
43 0.199517, 0.660339, 0.376071, 0.038880, 0.531293, 0.216116, 0.138672, 0.907737, 0.807994,
44 0.659582, 0.915264, 0.449075, 0.627128, 0.480173, 0.380942, 0.018843, 0.211808, 0.569701,
45 0.082294, 0.689488, 0.573060, 0.593859, 0.216080, 0.373159, 0.108117, 0.595539, 0.021768,
46 0.380297, 0.948125, 0.377833, 0.319699, 0.315249, 0.972805, 0.792270, 0.445396, 0.845323,
47 0.372186, 0.096147, 0.689405, 0.423958, 0.055675, 0.117940, 0.328456, 0.605808, 0.631768,
48 0.372170, 0.213723, 0.032700, 0.447257, 0.440661, 0.728488, 0.299853, 0.148599, 0.649212,
49 0.498381, 0.049921, 0.496112, 0.607142, 0.562595, 0.990246, 0.739659, 0.108633, 0.978156,
50 0.209814, 0.258436, 0.876021, 0.309260, 0.600673, 0.713597, 0.576967, 0.641402, 0.853930,
51 0.029173, 0.418111, 0.581593, 0.008394, 0.589904, 0.661574, 0.979326, 0.275724, 0.111109,
52 0.440472, 0.120839, 0.521602, 0.648308, 0.284575, 0.204501, 0.153286, 0.822444, 0.300786,
53 0.303906, 0.364717, 0.209038, 0.916831, 0.900245, 0.600685, 0.890002, 0.581660, 0.431154,
54 0.705569, 0.551250, 0.417075, 0.403749, 0.696652, 0.292652, 0.911372, 0.690922, 0.323718,
55 0.036773, 0.258976, 0.274265, 0.225076, 0.628965, 0.351644, 0.065158, 0.080340, 0.467271,
56 0.130643, 0.385914, 0.919315, 0.253821, 0.966163, 0.017439, 0.392610, 0.478792, 0.978185,
57 0.072691, 0.982009, 0.097987, 0.731533, 0.401233, 0.107570, 0.349587, 0.479122, 0.700598,
58 0.481751, 0.788429, 0.706864, 0.120086, 0.562691, 0.981797, 0.001223, 0.192120, 0.451543,
59 0.173092, 0.108960, 0.549594, 0.587892, 0.657534, 0.396365, 0.125153, 0.666420, 0.385823,
60 0.890916, 0.436729, 0.128114, 0.369598, 0.759096, 0.044677, 0.904752, 0.088052, 0.621148,
61 0.005047, 0.452331, 0.162032, 0.494238, 0.523349, 0.741829, 0.698450, 0.452316, 0.563487,
62 0.819776, 0.492160, 0.004210, 0.647158, 0.551475, 0.362995, 0.177937, 0.814722, 0.727729,
63 0.867126, 0.997157, 0.108149, 0.085726, 0.796024, 0.665075, 0.362462, 0.323124, 0.043718,
64 0.042357, 0.315030, 0.328954, 0.870845, 0.683186, 0.467922, 0.514894, 0.809971, 0.631979,
65 0.176571, 0.366320, 0.850621, 0.505555, 0.749551, 0.750830, 0.401714, 0.481216, 0.438393,
66 0.508832, 0.867971, 0.654581, 0.058204, 0.566454, 0.084124, 0.548539, 0.902690, 0.779571,
67 0.562058, 0.048082, 0.863109, 0.079290, 0.713559, 0.783496, 0.265266, 0.672089, 0.786939,
68 0.143048, 0.086196, 0.876129, 0.408708, 0.229312, 0.629995, 0.206665, 0.207308, 0.710079,
69 0.341704, 0.264921, 0.028748, 0.629222, 0.470173, 0.726228, 0.125243, 0.328249, 0.794187,
70 0.741340, 0.489895, 0.189396, 0.724654, 0.092841, 0.039809, 0.860126, 0.247701, 0.655331,
71 0.964121, 0.672536, 0.044522, 0.690567, 0.837238, 0.631520, 0.953734, 0.352484, 0.289026,
72 0.034152, 0.852575, 0.098454, 0.795529, 0.452181, 0.826159, 0.186993, 0.820725, 0.440328,
73 0.922137, 0.704592, 0.915437, 0.738183, 0.733461, 0.193798, 0.929213, 0.161390, 0.318547,
74 0.888751, 0.430968, 0.740837, 0.193544, 0.872253, 0.563074, 0.274598, 0.347805, 0.666176,
75 0.449831, 0.800991, 0.588727, 0.052296, 0.714761, 0.420620, 0.570325, 0.057550, 0.210888,
76 0.407312, 0.662848, 0.924382, 0.895958, 0.775198, 0.688605, 0.025721, 0.301913, 0.791408,
77 0.500602, 0.831984, 0.828509, 0.642093, 0.494174, 0.525880, 0.446365, 0.440063, 0.763114,
78 0.630358, 0.223943, 0.333806, 0.906033, 0.498306, 0.241278, 0.427640, 0.772683, 0.198082,
79 0.225379, 0.503894, 0.436599, 0.016503, 0.803725, 0.189878, 0.291095, 0.499114, 0.151573,
80 0.079031, 0.904618, 0.708535, 0.273900, 0.067419, 0.317124, 0.936499, 0.716511, 0.543845,
81 0.939909, 0.826574, 0.715090, 0.154864, 0.750150, 0.845808, 0.648108, 0.556564, 0.644757,
82 0.140873, 0.799167, 0.632989, 0.444245, 0.471978, 0.435910, 0.359793, 0.216241, 0.007633,
83 0.337236, 0.857863, 0.380247, 0.092517, 0.799973, 0.919000, 0.296798, 0.096989, 0.854831,
84 0.165369, 0.568475, 0.216855, 0.020457, 0.835511, 0.538039, 0.999742, 0.620226, 0.244053,
85 0.060399, 0.323007, 0.294874, 0.988899, 0.384919, 0.735655, 0.773428, 0.549776, 0.292882,
86 0.660611, 0.593507, 0.621118, 0.175269, 0.682119, 0.794493, 0.868197, 0.632150, 0.807823,
87 0.509656, 0.482035, 0.001780, 0.259126, 0.358002, 0.280263, 0.192985, 0.290367, 0.208111,
88 0.917633, 0.114422, 0.925491, 0.981110, 0.255570, 0.974862, 0.016629, 0.552599, 0.575741,
89 0.612978, 0.615965, 0.803615, 0.772334, 0.089745, 0.838812, 0.634542, 0.113709, 0.755832,
90 0.577589, 0.667489, 0.529834, 0.325660, 0.817597, 0.316557, 0.335093, 0.737363, 0.260951,
91 0.737073, 0.049540, 0.735541, 0.988891, 0.299116, 0.147695, 0.417271, 0.940811, 0.524160,
92 0.857968, 0.176403, 0.244835, 0.485759, 0.033353, 0.280319, 0.750688, 0.755809, 0.924208,
93 0.095956, 0.962504, 0.275584, 0.173715, 0.942716, 0.706721, 0.078464, 0.576716, 0.804667,
94 0.559249, 0.900611, 0.646904, 0.432111, 0.927885, 0.383277, 0.269973, 0.114244, 0.574867,
95 0.150703, 0.241855, 0.272871, 0.199950, 0.079719, 0.868566, 0.962833, 0.789122, 0.320025,
96 0.905554, 0.234876, 0.991356, 0.061913, 0.732911, 0.785960, 0.874074, 0.069035, 0.658632,
97 0.309901, 0.023676, 0.791603, 0.764661, 0.661278, 0.319583, 0.829650, 0.117091, 0.903124,
98 0.982098, 0.161631, 0.193576, 0.670428, 0.857390, 0.003760, 0.572578, 0.222162, 0.114551,
99 0.420118, 0.530404, 0.470682, 0.525527, 0.764281, 0.040596, 0.443275, 0.501124, 0.816161,
100 0.417467, 0.332172, 0.447565, 0.614591, 0.559246, 0.805295, 0.226342, 0.155065, 0.714630,
101 0.160925, 0.760001, 0.453456, 0.093869, 0.406092, 0.264801, 0.720370, 0.743388, 0.373269,
102 0.403098, 0.911923, 0.897249, 0.147038, 0.753037, 0.516093, 0.739257, 0.175018, 0.045768,
103 0.735857, 0.801330, 0.927708, 0.240977, 0.591870, 0.921831, 0.540733, 0.149100, 0.423152,
104 0.806876, 0.397081, 0.061100, 0.811630, 0.044899, 0.460915, 0.961202, 0.822098, 0.971524,
105 0.867608, 0.773604, 0.226616, 0.686286, 0.926972, 0.411613, 0.267873, 0.081937, 0.226124,
106 0.295664, 0.374594, 0.533240, 0.237876, 0.669629, 0.599083, 0.513081, 0.878719, 0.201577,
107 0.721296, 0.495038, 0.079760, 0.965959, 0.233090, 0.052496, 0.714748, 0.887844, 0.308724,
108 0.972885, 0.723337, 0.453089, 0.914474, 0.704063, 0.823198, 0.834769, 0.906561, 0.919600,
109 0.100601, 0.307564, 0.901977, 0.468879, 0.265376, 0.885188, 0.683875, 0.868623, 0.081032,
110 0.466835, 0.199087, 0.663437, 0.812241, 0.311337, 0.821361, 0.356628, 0.898054, 0.160781,
111 0.222539, 0.714889, 0.490287, 0.984915, 0.951755, 0.964097, 0.641795, 0.815472, 0.852732,
112 0.862074, 0.051108, 0.440139, 0.323207, 0.517171, 0.562984, 0.115295, 0.743103, 0.977914,
113 0.337596, 0.440694, 0.535879, 0.959427, 0.351427, 0.704361, 0.010826, 0.131162, 0.577080,
114 0.349572, 0.774892, 0.425796, 0.072697, 0.500001, 0.267322, 0.909654, 0.206176, 0.223987,
115 0.937698, 0.323423, 0.117501, 0.490308, 0.474372, 0.689943, 0.168671, 0.719417, 0.188928,
116 0.330464, 0.265273, 0.446271, 0.171933, 0.176133, 0.474616, 0.140182, 0.114246, 0.905043,
117 0.713870, 0.555261, 0.951333,
118};
119
121 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE,
122 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32,
123 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7,
124 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57,
125 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50,
126 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E,
127 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34,
128 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D,
129 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30,
130 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23,
131 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B,
132 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D,
133 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7,
134 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0,
135 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD,
136 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D,
137 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE,
138 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32,
139 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7,
140 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57,
141 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50,
142 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E,
143 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34,
144 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D,
145 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30,
146 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23,
147 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B,
148 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D,
149 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7,
150 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0,
151 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD,
152 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D,
153};
154#define hash BLI_noise_hash_uchar_512
155
156static const float hashvectf[768] = {
157 0.33783, 0.715698, -0.611206, -0.944031, -0.326599, -0.045624, -0.101074, -0.416443,
158 -0.903503, 0.799286, 0.49411, -0.341949, -0.854645, 0.518036, 0.033936, 0.42514,
159 -0.437866, -0.792114, -0.358948, 0.597046, 0.717377, -0.985413, 0.144714, 0.089294,
160 -0.601776, -0.33728, -0.723907, -0.449921, 0.594513, 0.666382, 0.208313, -0.10791,
161 0.972076, 0.575317, 0.060425, 0.815643, 0.293365, -0.875702, -0.383453, 0.293762,
162 0.465759, 0.834686, -0.846008, -0.233398, -0.47934, -0.115814, 0.143036, -0.98291,
163 0.204681, -0.949036, -0.239532, 0.946716, -0.263947, 0.184326, -0.235596, 0.573822,
164 0.784332, 0.203705, -0.372253, -0.905487, 0.756989, -0.651031, 0.055298, 0.497803,
165 0.814697, -0.297363, -0.16214, 0.063995, -0.98468, -0.329254, 0.834381, 0.441925,
166 0.703827, -0.527039, -0.476227, 0.956421, 0.266113, 0.119781, 0.480133, 0.482849,
167 0.7323, -0.18631, 0.961212, -0.203125, -0.748474, -0.656921, -0.090393, -0.085052,
168 -0.165253, 0.982544, -0.76947, 0.628174, -0.115234, 0.383148, 0.537659, 0.751068,
169 0.616486, -0.668488, -0.415924, -0.259979, -0.630005, 0.73175, 0.570953, -0.087952,
170 0.816223, -0.458008, 0.023254, 0.888611, -0.196167, 0.976563, -0.088287, -0.263885,
171 -0.69812, -0.665527, 0.437134, -0.892273, -0.112793, -0.621674, -0.230438, 0.748566,
172 0.232422, 0.900574, -0.367249, 0.22229, -0.796143, 0.562744, -0.665497, -0.73764,
173 0.11377, 0.670135, 0.704803, 0.232605, 0.895599, 0.429749, -0.114655, -0.11557,
174 -0.474243, 0.872742, 0.621826, 0.604004, -0.498444, -0.832214, 0.012756, 0.55426,
175 -0.702484, 0.705994, -0.089661, -0.692017, 0.649292, 0.315399, -0.175995, -0.977997,
176 0.111877, 0.096954, -0.04953, 0.994019, 0.635284, -0.606689, -0.477783, -0.261261,
177 -0.607422, -0.750153, 0.983276, 0.165436, 0.075958, -0.29837, 0.404083, -0.864655,
178 -0.638672, 0.507721, 0.578156, 0.388214, 0.412079, 0.824249, 0.556183, -0.208832,
179 0.804352, 0.778442, 0.562012, 0.27951, -0.616577, 0.781921, -0.091522, 0.196289,
180 0.051056, 0.979187, -0.121216, 0.207153, -0.970734, -0.173401, -0.384735, 0.906555,
181 0.161499, -0.723236, -0.671387, 0.178497, -0.006226, -0.983887, -0.126038, 0.15799,
182 0.97934, 0.830475, -0.024811, 0.556458, -0.510132, -0.76944, 0.384247, 0.81424,
183 0.200104, -0.544891, -0.112549, -0.393311, -0.912445, 0.56189, 0.152222, -0.813049,
184 0.198914, -0.254517, -0.946381, -0.41217, 0.690979, -0.593811, -0.407257, 0.324524,
185 0.853668, -0.690186, 0.366119, -0.624115, -0.428345, 0.844147, -0.322296, -0.21228,
186 -0.297546, -0.930756, -0.273071, 0.516113, 0.811798, 0.928314, 0.371643, 0.007233,
187 0.785828, -0.479218, -0.390778, -0.704895, 0.058929, 0.706818, 0.173248, 0.203583,
188 0.963562, 0.422211, -0.904297, -0.062469, -0.363312, -0.182465, 0.913605, 0.254028,
189 -0.552307, -0.793945, -0.28891, -0.765747, -0.574554, 0.058319, 0.291382, 0.954803,
190 0.946136, -0.303925, 0.111267, -0.078156, 0.443695, -0.892731, 0.182098, 0.89389,
191 0.409515, -0.680298, -0.213318, 0.701141, 0.062469, 0.848389, -0.525635, -0.72879,
192 -0.641846, 0.238342, -0.88089, 0.427673, 0.202637, -0.532501, -0.21405, 0.818878,
193 0.948975, -0.305084, 0.07962, 0.925446, 0.374664, 0.055817, 0.820923, 0.565491,
194 0.079102, 0.25882, 0.099792, -0.960724, -0.294617, 0.910522, 0.289978, 0.137115,
195 0.320038, -0.937408, -0.908386, 0.345276, -0.235718, -0.936218, 0.138763, 0.322754,
196 0.366577, 0.925934, -0.090637, 0.309296, -0.686829, -0.657684, 0.66983, 0.024445,
197 0.742065, -0.917999, -0.059113, -0.392059, 0.365509, 0.462158, -0.807922, 0.083374,
198 0.996399, -0.014801, 0.593842, 0.253143, -0.763672, 0.974976, -0.165466, 0.148285,
199 0.918976, 0.137299, 0.369537, 0.294952, 0.694977, 0.655731, 0.943085, 0.152618,
200 -0.295319, 0.58783, -0.598236, 0.544495, 0.203796, 0.678223, 0.705994, -0.478821,
201 -0.661011, 0.577667, 0.719055, -0.1698, -0.673828, -0.132172, -0.965332, 0.225006,
202 -0.981873, -0.14502, 0.121979, 0.763458, 0.579742, 0.284546, -0.893188, 0.079681,
203 0.442474, -0.795776, -0.523804, 0.303802, 0.734955, 0.67804, -0.007446, 0.15506,
204 0.986267, -0.056183, 0.258026, 0.571503, -0.778931, -0.681549, -0.702087, -0.206116,
205 -0.96286, -0.177185, 0.203613, -0.470978, -0.515106, 0.716095, -0.740326, 0.57135,
206 0.354095, -0.56012, -0.824982, -0.074982, -0.507874, 0.753204, 0.417969, -0.503113,
207 0.038147, 0.863342, 0.594025, 0.673553, -0.439758, -0.119873, -0.005524, -0.992737,
208 0.098267, -0.213776, 0.971893, -0.615631, 0.643951, 0.454163, 0.896851, -0.441071,
209 0.032166, -0.555023, 0.750763, -0.358093, 0.398773, 0.304688, 0.864929, -0.722961,
210 0.303589, 0.620544, -0.63559, -0.621948, -0.457306, -0.293243, 0.072327, 0.953278,
211 -0.491638, 0.661041, -0.566772, -0.304199, -0.572083, -0.761688, 0.908081, -0.398956,
212 0.127014, -0.523621, -0.549683, -0.650848, -0.932922, -0.19986, 0.299408, 0.099426,
213 0.140869, 0.984985, -0.020325, -0.999756, -0.002319, 0.952667, 0.280853, -0.11615,
214 -0.971893, 0.082581, 0.220337, 0.65921, 0.705292, -0.260651, 0.733063, -0.175537,
215 0.657043, -0.555206, 0.429504, -0.712189, 0.400421, -0.89859, 0.179352, 0.750885,
216 -0.19696, 0.630341, 0.785675, -0.569336, 0.241821, -0.058899, -0.464111, 0.883789,
217 0.129608, -0.94519, 0.299622, -0.357819, 0.907654, 0.219238, -0.842133, -0.439117,
218 -0.312927, -0.313477, 0.84433, 0.434479, -0.241211, 0.053253, 0.968994, 0.063873,
219 0.823273, 0.563965, 0.476288, 0.862152, -0.172516, 0.620941, -0.298126, 0.724915,
220 0.25238, -0.749359, -0.612122, -0.577545, 0.386566, 0.718994, -0.406342, -0.737976,
221 0.538696, 0.04718, 0.556305, 0.82959, -0.802856, 0.587463, 0.101166, -0.707733,
222 -0.705963, 0.026428, 0.374908, 0.68457, 0.625092, 0.472137, 0.208405, -0.856506,
223 -0.703064, -0.581085, -0.409821, -0.417206, -0.736328, 0.532623, -0.447876, -0.20285,
224 -0.870728, 0.086945, -0.990417, 0.107086, 0.183685, 0.018341, -0.982788, 0.560638,
225 -0.428864, 0.708282, 0.296722, -0.952576, -0.0672, 0.135773, 0.990265, 0.030243,
226 -0.068787, 0.654724, 0.752686, 0.762604, -0.551758, 0.337585, -0.819611, -0.407684,
227 0.402466, -0.727844, -0.55072, -0.408539, -0.855774, -0.480011, 0.19281, 0.693176,
228 -0.079285, 0.716339, 0.226013, 0.650116, -0.725433, 0.246704, 0.953369, -0.173553,
229 -0.970398, -0.239227, -0.03244, 0.136383, -0.394318, 0.908752, 0.813232, 0.558167,
230 0.164368, 0.40451, 0.549042, -0.731323, -0.380249, -0.566711, 0.730865, 0.022156,
231 0.932739, 0.359741, 0.00824, 0.996552, -0.082306, 0.956635, -0.065338, -0.283722,
232 -0.743561, 0.008209, 0.668579, -0.859589, -0.509674, 0.035767, -0.852234, 0.363678,
233 -0.375977, -0.201965, -0.970795, -0.12915, 0.313477, 0.947327, 0.06546, -0.254028,
234 -0.528259, 0.81015, 0.628052, 0.601105, 0.49411, -0.494385, 0.868378, 0.037933,
235 0.275635, -0.086426, 0.957336, -0.197937, 0.468903, -0.860748, 0.895599, 0.399384,
236 0.195801, 0.560791, 0.825012, -0.069214, 0.304199, -0.849487, 0.43103, 0.096375,
237 0.93576, 0.339111, -0.051422, 0.408966, -0.911072, 0.330444, 0.942841, -0.042389,
238 -0.452362, -0.786407, 0.420563, 0.134308, -0.933472, -0.332489, 0.80191, -0.566711,
239 -0.188934, -0.987946, -0.105988, 0.112518, -0.24408, 0.892242, -0.379791, -0.920502,
240 0.229095, -0.316376, 0.7789, 0.325958, 0.535706, -0.912872, 0.185211, -0.36377,
241 -0.184784, 0.565369, -0.803833, -0.018463, 0.119537, 0.992615, -0.259247, -0.935608,
242 0.239532, -0.82373, -0.449127, -0.345947, -0.433105, 0.659515, 0.614349, -0.822754,
243 0.378845, -0.423676, 0.687195, -0.674835, -0.26889, -0.246582, -0.800842, 0.545715,
244 -0.729187, -0.207794, 0.651978, 0.653534, -0.610443, -0.447388, 0.492584, -0.023346,
245 0.869934, 0.609039, 0.009094, -0.79306, 0.962494, -0.271088, -0.00885, 0.2659,
246 -0.004913, 0.963959, 0.651245, 0.553619, -0.518951, 0.280548, -0.84314, 0.458618,
247 -0.175293, -0.983215, 0.049805, 0.035339, -0.979919, 0.196045, -0.982941, 0.164307,
248 -0.082245, 0.233734, -0.97226, -0.005005, -0.747253, -0.611328, 0.260437, 0.645599,
249 0.592773, 0.481384, 0.117706, -0.949524, -0.29068, -0.535004, -0.791901, -0.294312,
250 -0.627167, -0.214447, 0.748718, -0.047974, -0.813477, -0.57959, -0.175537, 0.477264,
251 -0.860992, 0.738556, -0.414246, -0.53183, 0.562561, -0.704071, 0.433289, -0.754944,
252 0.64801, -0.100586, 0.114716, 0.044525, -0.992371, 0.966003, 0.244873, -0.082764,
253};
254
256
257/* -------------------------------------------------------------------- */
260
261BLI_INLINE float lerp(float t, float a, float b)
262{
263 return (a + t * (b - a));
264}
265
266BLI_INLINE float npfade(float t)
267{
268 return (t * t * t * (t * (t * 6.0f - 15.0f) + 10.0f));
269}
270
271BLI_INLINE float grad(int hash_val, float x, float y, float z)
272{
273 int h = hash_val & 15; /* CONVERT LO 4 BITS OF HASH CODE */
274 float u = h < 8 ? x : y; /* INTO 12 GRADIENT DIRECTIONS. */
275 float v = h < 4 ? y : h == 12 || h == 14 ? x : z;
276 return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
277}
278
279/* instead of adding another permutation array, just use hash table defined above */
280static float newPerlin(float x, float y, float z)
281{
282 int A, AA, AB, B, BA, BB;
283 float u = floor(x), v = floor(y), w = floor(z);
284 int X = int(u) & 255;
285 int Y = int(v) & 255;
286 int Z = int(w) & 255; /* FIND UNIT CUBE THAT CONTAINS POINT */
287 x -= u; /* FIND RELATIVE X,Y,Z */
288 y -= v; /* OF POINT IN CUBE. */
289 z -= w;
290 u = npfade(x); /* COMPUTE FADE CURVES */
291 v = npfade(y); /* FOR EACH OF X,Y,Z. */
292 w = npfade(z);
293 A = hash[X] + Y;
294 AA = hash[A] + Z;
295 AB = hash[A + 1] + Z; /* HASH COORDINATES OF */
296 B = hash[X + 1] + Y;
297 BA = hash[B] + Z;
298 BB = hash[B + 1] + Z; /* THE 8 CUBE CORNERS, */
299 return lerp(
300 w,
301 lerp(v,
302 lerp(u,
303 grad(hash[AA], x, y, z), /* AND ADD */
304 grad(hash[BA], x - 1, y, z)), /* BLENDED */
305 lerp(u,
306 grad(hash[AB], x, y - 1, z), /* RESULTS */
307 grad(hash[BB], x - 1, y - 1, z))), /* FROM 8 */
308 lerp(v,
309 lerp(u,
310 grad(hash[AA + 1], x, y, z - 1), /* CORNERS */
311 grad(hash[BA + 1], x - 1, y, z - 1)), /* OF CUBE */
312 lerp(u, grad(hash[AB + 1], x, y - 1, z - 1), grad(hash[BB + 1], x - 1, y - 1, z - 1))));
313}
314
315/* for use with BLI_noise_generic_noise()/BLI_noise_generic_turbulence(), returns unsigned improved
316 * perlin noise */
317static float newPerlinU(float x, float y, float z)
318{
319 return (0.5f + 0.5f * newPerlin(x, y, z));
320}
321
323
324/* -------------------------------------------------------------------- */
327
328/* Was BLI_noise_hnoise(), removed noisesize, so other functions can call it without scaling. */
329static float orgBlenderNoise(float x, float y, float z)
330{
331 float cn1, cn2, cn3, cn4, cn5, cn6, i;
332 const float *h;
333 float fx, fy, fz, ox, oy, oz, jx, jy, jz;
334 float n = 0.5;
335 int ix, iy, iz, b00, b01, b10, b11, b20, b21;
336
337 fx = floor(x);
338 fy = floor(y);
339 fz = floor(z);
340
341 ox = x - fx;
342 oy = y - fy;
343 oz = z - fz;
344
345 ix = int(fx);
346 iy = int(fy);
347 iz = int(fz);
348
349 jx = ox - 1;
350 jy = oy - 1;
351 jz = oz - 1;
352
353 cn1 = ox * ox;
354 cn2 = oy * oy;
355 cn3 = oz * oz;
356 cn4 = jx * jx;
357 cn5 = jy * jy;
358 cn6 = jz * jz;
359
360 cn1 = 1.0f - 3.0f * cn1 + 2.0f * cn1 * ox;
361 cn2 = 1.0f - 3.0f * cn2 + 2.0f * cn2 * oy;
362 cn3 = 1.0f - 3.0f * cn3 + 2.0f * cn3 * oz;
363 cn4 = 1.0f - 3.0f * cn4 - 2.0f * cn4 * jx;
364 cn5 = 1.0f - 3.0f * cn5 - 2.0f * cn5 * jy;
365 cn6 = 1.0f - 3.0f * cn6 - 2.0f * cn6 * jz;
366
367 b00 = hash[hash[ix & 255] + (iy & 255)];
368 b10 = hash[hash[(ix + 1) & 255] + (iy & 255)];
369 b01 = hash[hash[ix & 255] + ((iy + 1) & 255)];
370 b11 = hash[hash[(ix + 1) & 255] + ((iy + 1) & 255)];
371
372 b20 = iz & 255;
373 b21 = (iz + 1) & 255;
374
375 /* 0 */
376 i = (cn1 * cn2 * cn3);
377 h = hashvectf + 3 * hash[b20 + b00];
378 n += i * (h[0] * ox + h[1] * oy + h[2] * oz);
379 /* 1 */
380 i = (cn1 * cn2 * cn6);
381 h = hashvectf + 3 * hash[b21 + b00];
382 n += i * (h[0] * ox + h[1] * oy + h[2] * jz);
383 /* 2 */
384 i = (cn1 * cn5 * cn3);
385 h = hashvectf + 3 * hash[b20 + b01];
386 n += i * (h[0] * ox + h[1] * jy + h[2] * oz);
387 /* 3 */
388 i = (cn1 * cn5 * cn6);
389 h = hashvectf + 3 * hash[b21 + b01];
390 n += i * (h[0] * ox + h[1] * jy + h[2] * jz);
391 /* 4 */
392 i = cn4 * cn2 * cn3;
393 h = hashvectf + 3 * hash[b20 + b10];
394 n += i * (h[0] * jx + h[1] * oy + h[2] * oz);
395 /* 5 */
396 i = cn4 * cn2 * cn6;
397 h = hashvectf + 3 * hash[b21 + b10];
398 n += i * (h[0] * jx + h[1] * oy + h[2] * jz);
399 /* 6 */
400 i = cn4 * cn5 * cn3;
401 h = hashvectf + 3 * hash[b20 + b11];
402 n += i * (h[0] * jx + h[1] * jy + h[2] * oz);
403 /* 7 */
404 i = (cn4 * cn5 * cn6);
405 h = hashvectf + 3 * hash[b21 + b11];
406 n += i * (h[0] * jx + h[1] * jy + h[2] * jz);
407
408 if (n < 0.0f) {
409 n = 0.0f;
410 }
411 else if (n > 1.0f) {
412 n = 1.0f;
413 }
414 return n;
415}
416
417static float orgBlenderNoiseS(float x, float y, float z)
418{
419 /* NOTE: As #orgBlenderNoise(), returning signed noise. */
420
421 return (2.0f * orgBlenderNoise(x, y, z) - 1.0f);
422}
423
424float BLI_noise_hnoise(float noisesize, float x, float y, float z)
425{
426 /* NOTE: Separated from orgBlenderNoise, with scaling. */
427
428 if (noisesize == 0.0f) {
429 return 0.0f;
430 }
431 x = (1.0f + x) / noisesize;
432 y = (1.0f + y) / noisesize;
433 z = (1.0f + z) / noisesize;
434 return orgBlenderNoise(x, y, z);
435}
436
437float BLI_noise_turbulence(float noisesize, float x, float y, float z, int nr)
438{
439 float s, d = 0.5, div = 1.0;
440
441 s = BLI_noise_hnoise(noisesize, x, y, z);
442
443 while (nr > 0) {
444
445 s += d * BLI_noise_hnoise(noisesize * d, x, y, z);
446 div += d;
447 d *= 0.5f;
448
449 nr--;
450 }
451 return s / div;
452}
453
454/* ********************* FROM PERLIN HIMSELF: ******************** */
455
456static const char g_perlin_data_ub[512 + 2] = {
457 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE,
458 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32,
459 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7,
460 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57,
461 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50,
462 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E,
463 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34,
464 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D,
465 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30,
466 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23,
467 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B,
468 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D,
469 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7,
470 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0,
471 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD,
472 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D,
473 0xA2, 0xA0, 0x19, 0x3B, 0xF8, 0xEB, 0xAA, 0xEE, 0xF3, 0x1C, 0x67, 0x28, 0x1D, 0xED, 0x0, 0xDE,
474 0x95, 0x2E, 0xDC, 0x3F, 0x3A, 0x82, 0x35, 0x4D, 0x6C, 0xBA, 0x36, 0xD0, 0xF6, 0xC, 0x79, 0x32,
475 0xD1, 0x59, 0xF4, 0x8, 0x8B, 0x63, 0x89, 0x2F, 0xB8, 0xB4, 0x97, 0x83, 0xF2, 0x8F, 0x18, 0xC7,
476 0x51, 0x14, 0x65, 0x87, 0x48, 0x20, 0x42, 0xA8, 0x80, 0xB5, 0x40, 0x13, 0xB2, 0x22, 0x7E, 0x57,
477 0xBC, 0x7F, 0x6B, 0x9D, 0x86, 0x4C, 0xC8, 0xDB, 0x7C, 0xD5, 0x25, 0x4E, 0x5A, 0x55, 0x74, 0x50,
478 0xCD, 0xB3, 0x7A, 0xBB, 0xC3, 0xCB, 0xB6, 0xE2, 0xE4, 0xEC, 0xFD, 0x98, 0xB, 0x96, 0xD3, 0x9E,
479 0x5C, 0xA1, 0x64, 0xF1, 0x81, 0x61, 0xE1, 0xC4, 0x24, 0x72, 0x49, 0x8C, 0x90, 0x4B, 0x84, 0x34,
480 0x38, 0xAB, 0x78, 0xCA, 0x1F, 0x1, 0xD7, 0x93, 0x11, 0xC1, 0x58, 0xA9, 0x31, 0xF9, 0x44, 0x6D,
481 0xBF, 0x33, 0x9C, 0x5F, 0x9, 0x94, 0xA3, 0x85, 0x6, 0xC6, 0x9A, 0x1E, 0x7B, 0x46, 0x15, 0x30,
482 0x27, 0x2B, 0x1B, 0x71, 0x3C, 0x5B, 0xD6, 0x6F, 0x62, 0xAC, 0x4F, 0xC2, 0xC0, 0xE, 0xB1, 0x23,
483 0xA7, 0xDF, 0x47, 0xB0, 0x77, 0x69, 0x5, 0xE9, 0xE6, 0xE7, 0x76, 0x73, 0xF, 0xFE, 0x6E, 0x9B,
484 0x56, 0xEF, 0x12, 0xA5, 0x37, 0xFC, 0xAE, 0xD9, 0x3, 0x8E, 0xDD, 0x10, 0xB9, 0xCE, 0xC9, 0x8D,
485 0xDA, 0x2A, 0xBD, 0x68, 0x17, 0x9F, 0xBE, 0xD4, 0xA, 0xCC, 0xD2, 0xE8, 0x43, 0x3D, 0x70, 0xB7,
486 0x2, 0x7D, 0x99, 0xD8, 0xD, 0x60, 0x8A, 0x4, 0x2C, 0x3E, 0x92, 0xE5, 0xAF, 0x53, 0x7, 0xE0,
487 0x29, 0xA6, 0xC5, 0xE3, 0xF5, 0xF7, 0x4A, 0x41, 0x26, 0x6A, 0x16, 0x5E, 0x52, 0x2D, 0x21, 0xAD,
488 0xF0, 0x91, 0xFF, 0xEA, 0x54, 0xFA, 0x66, 0x1A, 0x45, 0x39, 0xCF, 0x75, 0xA4, 0x88, 0xFB, 0x5D,
489 0xA2, 0xA0,
490};
491
492static const float g_perlin_data_v3[512 + 2][3] = {
493 {0.33783, 0.715698, -0.611206}, {-0.944031, -0.326599, -0.045624},
494 {-0.101074, -0.416443, -0.903503}, {0.799286, 0.49411, -0.341949},
495 {-0.854645, 0.518036, 0.033936}, {0.42514, -0.437866, -0.792114},
496 {-0.358948, 0.597046, 0.717377}, {-0.985413, 0.144714, 0.089294},
497 {-0.601776, -0.33728, -0.723907}, {-0.449921, 0.594513, 0.666382},
498 {0.208313, -0.10791, 0.972076}, {0.575317, 0.060425, 0.815643},
499 {0.293365, -0.875702, -0.383453}, {0.293762, 0.465759, 0.834686},
500 {-0.846008, -0.233398, -0.47934}, {-0.115814, 0.143036, -0.98291},
501 {0.204681, -0.949036, -0.239532}, {0.946716, -0.263947, 0.184326},
502 {-0.235596, 0.573822, 0.784332}, {0.203705, -0.372253, -0.905487},
503 {0.756989, -0.651031, 0.055298}, {0.497803, 0.814697, -0.297363},
504 {-0.16214, 0.063995, -0.98468}, {-0.329254, 0.834381, 0.441925},
505 {0.703827, -0.527039, -0.476227}, {0.956421, 0.266113, 0.119781},
506 {0.480133, 0.482849, 0.7323}, {-0.18631, 0.961212, -0.203125},
507 {-0.748474, -0.656921, -0.090393}, {-0.085052, -0.165253, 0.982544},
508 {-0.76947, 0.628174, -0.115234}, {0.383148, 0.537659, 0.751068},
509 {0.616486, -0.668488, -0.415924}, {-0.259979, -0.630005, 0.73175},
510 {0.570953, -0.087952, 0.816223}, {-0.458008, 0.023254, 0.888611},
511 {-0.196167, 0.976563, -0.088287}, {-0.263885, -0.69812, -0.665527},
512 {0.437134, -0.892273, -0.112793}, {-0.621674, -0.230438, 0.748566},
513 {0.232422, 0.900574, -0.367249}, {0.22229, -0.796143, 0.562744},
514 {-0.665497, -0.73764, 0.11377}, {0.670135, 0.704803, 0.232605},
515 {0.895599, 0.429749, -0.114655}, {-0.11557, -0.474243, 0.872742},
516 {0.621826, 0.604004, -0.498444}, {-0.832214, 0.012756, 0.55426},
517 {-0.702484, 0.705994, -0.089661}, {-0.692017, 0.649292, 0.315399},
518 {-0.175995, -0.977997, 0.111877}, {0.096954, -0.04953, 0.994019},
519 {0.635284, -0.606689, -0.477783}, {-0.261261, -0.607422, -0.750153},
520 {0.983276, 0.165436, 0.075958}, {-0.29837, 0.404083, -0.864655},
521 {-0.638672, 0.507721, 0.578156}, {0.388214, 0.412079, 0.824249},
522 {0.556183, -0.208832, 0.804352}, {0.778442, 0.562012, 0.27951},
523 {-0.616577, 0.781921, -0.091522}, {0.196289, 0.051056, 0.979187},
524 {-0.121216, 0.207153, -0.970734}, {-0.173401, -0.384735, 0.906555},
525 {0.161499, -0.723236, -0.671387}, {0.178497, -0.006226, -0.983887},
526 {-0.126038, 0.15799, 0.97934}, {0.830475, -0.024811, 0.556458},
527 {-0.510132, -0.76944, 0.384247}, {0.81424, 0.200104, -0.544891},
528 {-0.112549, -0.393311, -0.912445}, {0.56189, 0.152222, -0.813049},
529 {0.198914, -0.254517, -0.946381}, {-0.41217, 0.690979, -0.593811},
530 {-0.407257, 0.324524, 0.853668}, {-0.690186, 0.366119, -0.624115},
531 {-0.428345, 0.844147, -0.322296}, {-0.21228, -0.297546, -0.930756},
532 {-0.273071, 0.516113, 0.811798}, {0.928314, 0.371643, 0.007233},
533 {0.785828, -0.479218, -0.390778}, {-0.704895, 0.058929, 0.706818},
534 {0.173248, 0.203583, 0.963562}, {0.422211, -0.904297, -0.062469},
535 {-0.363312, -0.182465, 0.913605}, {0.254028, -0.552307, -0.793945},
536 {-0.28891, -0.765747, -0.574554}, {0.058319, 0.291382, 0.954803},
537 {0.946136, -0.303925, 0.111267}, {-0.078156, 0.443695, -0.892731},
538 {0.182098, 0.89389, 0.409515}, {-0.680298, -0.213318, 0.701141},
539 {0.062469, 0.848389, -0.525635}, {-0.72879, -0.641846, 0.238342},
540 {-0.88089, 0.427673, 0.202637}, {-0.532501, -0.21405, 0.818878},
541 {0.948975, -0.305084, 0.07962}, {0.925446, 0.374664, 0.055817},
542 {0.820923, 0.565491, 0.079102}, {0.25882, 0.099792, -0.960724},
543 {-0.294617, 0.910522, 0.289978}, {0.137115, 0.320038, -0.937408},
544 {-0.908386, 0.345276, -0.235718}, {-0.936218, 0.138763, 0.322754},
545 {0.366577, 0.925934, -0.090637}, {0.309296, -0.686829, -0.657684},
546 {0.66983, 0.024445, 0.742065}, {-0.917999, -0.059113, -0.392059},
547 {0.365509, 0.462158, -0.807922}, {0.083374, 0.996399, -0.014801},
548 {0.593842, 0.253143, -0.763672}, {0.974976, -0.165466, 0.148285},
549 {0.918976, 0.137299, 0.369537}, {0.294952, 0.694977, 0.655731},
550 {0.943085, 0.152618, -0.295319}, {0.58783, -0.598236, 0.544495},
551 {0.203796, 0.678223, 0.705994}, {-0.478821, -0.661011, 0.577667},
552 {0.719055, -0.1698, -0.673828}, {-0.132172, -0.965332, 0.225006},
553 {-0.981873, -0.14502, 0.121979}, {0.763458, 0.579742, 0.284546},
554 {-0.893188, 0.079681, 0.442474}, {-0.795776, -0.523804, 0.303802},
555 {0.734955, 0.67804, -0.007446}, {0.15506, 0.986267, -0.056183},
556 {0.258026, 0.571503, -0.778931}, {-0.681549, -0.702087, -0.206116},
557 {-0.96286, -0.177185, 0.203613}, {-0.470978, -0.515106, 0.716095},
558 {-0.740326, 0.57135, 0.354095}, {-0.56012, -0.824982, -0.074982},
559 {-0.507874, 0.753204, 0.417969}, {-0.503113, 0.038147, 0.863342},
560 {0.594025, 0.673553, -0.439758}, {-0.119873, -0.005524, -0.992737},
561 {0.098267, -0.213776, 0.971893}, {-0.615631, 0.643951, 0.454163},
562 {0.896851, -0.441071, 0.032166}, {-0.555023, 0.750763, -0.358093},
563 {0.398773, 0.304688, 0.864929}, {-0.722961, 0.303589, 0.620544},
564 {-0.63559, -0.621948, -0.457306}, {-0.293243, 0.072327, 0.953278},
565 {-0.491638, 0.661041, -0.566772}, {-0.304199, -0.572083, -0.761688},
566 {0.908081, -0.398956, 0.127014}, {-0.523621, -0.549683, -0.650848},
567 {-0.932922, -0.19986, 0.299408}, {0.099426, 0.140869, 0.984985},
568 {-0.020325, -0.999756, -0.002319}, {0.952667, 0.280853, -0.11615},
569 {-0.971893, 0.082581, 0.220337}, {0.65921, 0.705292, -0.260651},
570 {0.733063, -0.175537, 0.657043}, {-0.555206, 0.429504, -0.712189},
571 {0.400421, -0.89859, 0.179352}, {0.750885, -0.19696, 0.630341},
572 {0.785675, -0.569336, 0.241821}, {-0.058899, -0.464111, 0.883789},
573 {0.129608, -0.94519, 0.299622}, {-0.357819, 0.907654, 0.219238},
574 {-0.842133, -0.439117, -0.312927}, {-0.313477, 0.84433, 0.434479},
575 {-0.241211, 0.053253, 0.968994}, {0.063873, 0.823273, 0.563965},
576 {0.476288, 0.862152, -0.172516}, {0.620941, -0.298126, 0.724915},
577 {0.25238, -0.749359, -0.612122}, {-0.577545, 0.386566, 0.718994},
578 {-0.406342, -0.737976, 0.538696}, {0.04718, 0.556305, 0.82959},
579 {-0.802856, 0.587463, 0.101166}, {-0.707733, -0.705963, 0.026428},
580 {0.374908, 0.68457, 0.625092}, {0.472137, 0.208405, -0.856506},
581 {-0.703064, -0.581085, -0.409821}, {-0.417206, -0.736328, 0.532623},
582 {-0.447876, -0.20285, -0.870728}, {0.086945, -0.990417, 0.107086},
583 {0.183685, 0.018341, -0.982788}, {0.560638, -0.428864, 0.708282},
584 {0.296722, -0.952576, -0.0672}, {0.135773, 0.990265, 0.030243},
585 {-0.068787, 0.654724, 0.752686}, {0.762604, -0.551758, 0.337585},
586 {-0.819611, -0.407684, 0.402466}, {-0.727844, -0.55072, -0.408539},
587 {-0.855774, -0.480011, 0.19281}, {0.693176, -0.079285, 0.716339},
588 {0.226013, 0.650116, -0.725433}, {0.246704, 0.953369, -0.173553},
589 {-0.970398, -0.239227, -0.03244}, {0.136383, -0.394318, 0.908752},
590 {0.813232, 0.558167, 0.164368}, {0.40451, 0.549042, -0.731323},
591 {-0.380249, -0.566711, 0.730865}, {0.022156, 0.932739, 0.359741},
592 {0.00824, 0.996552, -0.082306}, {0.956635, -0.065338, -0.283722},
593 {-0.743561, 0.008209, 0.668579}, {-0.859589, -0.509674, 0.035767},
594 {-0.852234, 0.363678, -0.375977}, {-0.201965, -0.970795, -0.12915},
595 {0.313477, 0.947327, 0.06546}, {-0.254028, -0.528259, 0.81015},
596 {0.628052, 0.601105, 0.49411}, {-0.494385, 0.868378, 0.037933},
597 {0.275635, -0.086426, 0.957336}, {-0.197937, 0.468903, -0.860748},
598 {0.895599, 0.399384, 0.195801}, {0.560791, 0.825012, -0.069214},
599 {0.304199, -0.849487, 0.43103}, {0.096375, 0.93576, 0.339111},
600 {-0.051422, 0.408966, -0.911072}, {0.330444, 0.942841, -0.042389},
601 {-0.452362, -0.786407, 0.420563}, {0.134308, -0.933472, -0.332489},
602 {0.80191, -0.566711, -0.188934}, {-0.987946, -0.105988, 0.112518},
603 {-0.24408, 0.892242, -0.379791}, {-0.920502, 0.229095, -0.316376},
604 {0.7789, 0.325958, 0.535706}, {-0.912872, 0.185211, -0.36377},
605 {-0.184784, 0.565369, -0.803833}, {-0.018463, 0.119537, 0.992615},
606 {-0.259247, -0.935608, 0.239532}, {-0.82373, -0.449127, -0.345947},
607 {-0.433105, 0.659515, 0.614349}, {-0.822754, 0.378845, -0.423676},
608 {0.687195, -0.674835, -0.26889}, {-0.246582, -0.800842, 0.545715},
609 {-0.729187, -0.207794, 0.651978}, {0.653534, -0.610443, -0.447388},
610 {0.492584, -0.023346, 0.869934}, {0.609039, 0.009094, -0.79306},
611 {0.962494, -0.271088, -0.00885}, {0.2659, -0.004913, 0.963959},
612 {0.651245, 0.553619, -0.518951}, {0.280548, -0.84314, 0.458618},
613 {-0.175293, -0.983215, 0.049805}, {0.035339, -0.979919, 0.196045},
614 {-0.982941, 0.164307, -0.082245}, {0.233734, -0.97226, -0.005005},
615 {-0.747253, -0.611328, 0.260437}, {0.645599, 0.592773, 0.481384},
616 {0.117706, -0.949524, -0.29068}, {-0.535004, -0.791901, -0.294312},
617 {-0.627167, -0.214447, 0.748718}, {-0.047974, -0.813477, -0.57959},
618 {-0.175537, 0.477264, -0.860992}, {0.738556, -0.414246, -0.53183},
619 {0.562561, -0.704071, 0.433289}, {-0.754944, 0.64801, -0.100586},
620 {0.114716, 0.044525, -0.992371}, {0.966003, 0.244873, -0.082764},
621 {0.33783, 0.715698, -0.611206}, {-0.944031, -0.326599, -0.045624},
622 {-0.101074, -0.416443, -0.903503}, {0.799286, 0.49411, -0.341949},
623 {-0.854645, 0.518036, 0.033936}, {0.42514, -0.437866, -0.792114},
624 {-0.358948, 0.597046, 0.717377}, {-0.985413, 0.144714, 0.089294},
625 {-0.601776, -0.33728, -0.723907}, {-0.449921, 0.594513, 0.666382},
626 {0.208313, -0.10791, 0.972076}, {0.575317, 0.060425, 0.815643},
627 {0.293365, -0.875702, -0.383453}, {0.293762, 0.465759, 0.834686},
628 {-0.846008, -0.233398, -0.47934}, {-0.115814, 0.143036, -0.98291},
629 {0.204681, -0.949036, -0.239532}, {0.946716, -0.263947, 0.184326},
630 {-0.235596, 0.573822, 0.784332}, {0.203705, -0.372253, -0.905487},
631 {0.756989, -0.651031, 0.055298}, {0.497803, 0.814697, -0.297363},
632 {-0.16214, 0.063995, -0.98468}, {-0.329254, 0.834381, 0.441925},
633 {0.703827, -0.527039, -0.476227}, {0.956421, 0.266113, 0.119781},
634 {0.480133, 0.482849, 0.7323}, {-0.18631, 0.961212, -0.203125},
635 {-0.748474, -0.656921, -0.090393}, {-0.085052, -0.165253, 0.982544},
636 {-0.76947, 0.628174, -0.115234}, {0.383148, 0.537659, 0.751068},
637 {0.616486, -0.668488, -0.415924}, {-0.259979, -0.630005, 0.73175},
638 {0.570953, -0.087952, 0.816223}, {-0.458008, 0.023254, 0.888611},
639 {-0.196167, 0.976563, -0.088287}, {-0.263885, -0.69812, -0.665527},
640 {0.437134, -0.892273, -0.112793}, {-0.621674, -0.230438, 0.748566},
641 {0.232422, 0.900574, -0.367249}, {0.22229, -0.796143, 0.562744},
642 {-0.665497, -0.73764, 0.11377}, {0.670135, 0.704803, 0.232605},
643 {0.895599, 0.429749, -0.114655}, {-0.11557, -0.474243, 0.872742},
644 {0.621826, 0.604004, -0.498444}, {-0.832214, 0.012756, 0.55426},
645 {-0.702484, 0.705994, -0.089661}, {-0.692017, 0.649292, 0.315399},
646 {-0.175995, -0.977997, 0.111877}, {0.096954, -0.04953, 0.994019},
647 {0.635284, -0.606689, -0.477783}, {-0.261261, -0.607422, -0.750153},
648 {0.983276, 0.165436, 0.075958}, {-0.29837, 0.404083, -0.864655},
649 {-0.638672, 0.507721, 0.578156}, {0.388214, 0.412079, 0.824249},
650 {0.556183, -0.208832, 0.804352}, {0.778442, 0.562012, 0.27951},
651 {-0.616577, 0.781921, -0.091522}, {0.196289, 0.051056, 0.979187},
652 {-0.121216, 0.207153, -0.970734}, {-0.173401, -0.384735, 0.906555},
653 {0.161499, -0.723236, -0.671387}, {0.178497, -0.006226, -0.983887},
654 {-0.126038, 0.15799, 0.97934}, {0.830475, -0.024811, 0.556458},
655 {-0.510132, -0.76944, 0.384247}, {0.81424, 0.200104, -0.544891},
656 {-0.112549, -0.393311, -0.912445}, {0.56189, 0.152222, -0.813049},
657 {0.198914, -0.254517, -0.946381}, {-0.41217, 0.690979, -0.593811},
658 {-0.407257, 0.324524, 0.853668}, {-0.690186, 0.366119, -0.624115},
659 {-0.428345, 0.844147, -0.322296}, {-0.21228, -0.297546, -0.930756},
660 {-0.273071, 0.516113, 0.811798}, {0.928314, 0.371643, 0.007233},
661 {0.785828, -0.479218, -0.390778}, {-0.704895, 0.058929, 0.706818},
662 {0.173248, 0.203583, 0.963562}, {0.422211, -0.904297, -0.062469},
663 {-0.363312, -0.182465, 0.913605}, {0.254028, -0.552307, -0.793945},
664 {-0.28891, -0.765747, -0.574554}, {0.058319, 0.291382, 0.954803},
665 {0.946136, -0.303925, 0.111267}, {-0.078156, 0.443695, -0.892731},
666 {0.182098, 0.89389, 0.409515}, {-0.680298, -0.213318, 0.701141},
667 {0.062469, 0.848389, -0.525635}, {-0.72879, -0.641846, 0.238342},
668 {-0.88089, 0.427673, 0.202637}, {-0.532501, -0.21405, 0.818878},
669 {0.948975, -0.305084, 0.07962}, {0.925446, 0.374664, 0.055817},
670 {0.820923, 0.565491, 0.079102}, {0.25882, 0.099792, -0.960724},
671 {-0.294617, 0.910522, 0.289978}, {0.137115, 0.320038, -0.937408},
672 {-0.908386, 0.345276, -0.235718}, {-0.936218, 0.138763, 0.322754},
673 {0.366577, 0.925934, -0.090637}, {0.309296, -0.686829, -0.657684},
674 {0.66983, 0.024445, 0.742065}, {-0.917999, -0.059113, -0.392059},
675 {0.365509, 0.462158, -0.807922}, {0.083374, 0.996399, -0.014801},
676 {0.593842, 0.253143, -0.763672}, {0.974976, -0.165466, 0.148285},
677 {0.918976, 0.137299, 0.369537}, {0.294952, 0.694977, 0.655731},
678 {0.943085, 0.152618, -0.295319}, {0.58783, -0.598236, 0.544495},
679 {0.203796, 0.678223, 0.705994}, {-0.478821, -0.661011, 0.577667},
680 {0.719055, -0.1698, -0.673828}, {-0.132172, -0.965332, 0.225006},
681 {-0.981873, -0.14502, 0.121979}, {0.763458, 0.579742, 0.284546},
682 {-0.893188, 0.079681, 0.442474}, {-0.795776, -0.523804, 0.303802},
683 {0.734955, 0.67804, -0.007446}, {0.15506, 0.986267, -0.056183},
684 {0.258026, 0.571503, -0.778931}, {-0.681549, -0.702087, -0.206116},
685 {-0.96286, -0.177185, 0.203613}, {-0.470978, -0.515106, 0.716095},
686 {-0.740326, 0.57135, 0.354095}, {-0.56012, -0.824982, -0.074982},
687 {-0.507874, 0.753204, 0.417969}, {-0.503113, 0.038147, 0.863342},
688 {0.594025, 0.673553, -0.439758}, {-0.119873, -0.005524, -0.992737},
689 {0.098267, -0.213776, 0.971893}, {-0.615631, 0.643951, 0.454163},
690 {0.896851, -0.441071, 0.032166}, {-0.555023, 0.750763, -0.358093},
691 {0.398773, 0.304688, 0.864929}, {-0.722961, 0.303589, 0.620544},
692 {-0.63559, -0.621948, -0.457306}, {-0.293243, 0.072327, 0.953278},
693 {-0.491638, 0.661041, -0.566772}, {-0.304199, -0.572083, -0.761688},
694 {0.908081, -0.398956, 0.127014}, {-0.523621, -0.549683, -0.650848},
695 {-0.932922, -0.19986, 0.299408}, {0.099426, 0.140869, 0.984985},
696 {-0.020325, -0.999756, -0.002319}, {0.952667, 0.280853, -0.11615},
697 {-0.971893, 0.082581, 0.220337}, {0.65921, 0.705292, -0.260651},
698 {0.733063, -0.175537, 0.657043}, {-0.555206, 0.429504, -0.712189},
699 {0.400421, -0.89859, 0.179352}, {0.750885, -0.19696, 0.630341},
700 {0.785675, -0.569336, 0.241821}, {-0.058899, -0.464111, 0.883789},
701 {0.129608, -0.94519, 0.299622}, {-0.357819, 0.907654, 0.219238},
702 {-0.842133, -0.439117, -0.312927}, {-0.313477, 0.84433, 0.434479},
703 {-0.241211, 0.053253, 0.968994}, {0.063873, 0.823273, 0.563965},
704 {0.476288, 0.862152, -0.172516}, {0.620941, -0.298126, 0.724915},
705 {0.25238, -0.749359, -0.612122}, {-0.577545, 0.386566, 0.718994},
706 {-0.406342, -0.737976, 0.538696}, {0.04718, 0.556305, 0.82959},
707 {-0.802856, 0.587463, 0.101166}, {-0.707733, -0.705963, 0.026428},
708 {0.374908, 0.68457, 0.625092}, {0.472137, 0.208405, -0.856506},
709 {-0.703064, -0.581085, -0.409821}, {-0.417206, -0.736328, 0.532623},
710 {-0.447876, -0.20285, -0.870728}, {0.086945, -0.990417, 0.107086},
711 {0.183685, 0.018341, -0.982788}, {0.560638, -0.428864, 0.708282},
712 {0.296722, -0.952576, -0.0672}, {0.135773, 0.990265, 0.030243},
713 {-0.068787, 0.654724, 0.752686}, {0.762604, -0.551758, 0.337585},
714 {-0.819611, -0.407684, 0.402466}, {-0.727844, -0.55072, -0.408539},
715 {-0.855774, -0.480011, 0.19281}, {0.693176, -0.079285, 0.716339},
716 {0.226013, 0.650116, -0.725433}, {0.246704, 0.953369, -0.173553},
717 {-0.970398, -0.239227, -0.03244}, {0.136383, -0.394318, 0.908752},
718 {0.813232, 0.558167, 0.164368}, {0.40451, 0.549042, -0.731323},
719 {-0.380249, -0.566711, 0.730865}, {0.022156, 0.932739, 0.359741},
720 {0.00824, 0.996552, -0.082306}, {0.956635, -0.065338, -0.283722},
721 {-0.743561, 0.008209, 0.668579}, {-0.859589, -0.509674, 0.035767},
722 {-0.852234, 0.363678, -0.375977}, {-0.201965, -0.970795, -0.12915},
723 {0.313477, 0.947327, 0.06546}, {-0.254028, -0.528259, 0.81015},
724 {0.628052, 0.601105, 0.49411}, {-0.494385, 0.868378, 0.037933},
725 {0.275635, -0.086426, 0.957336}, {-0.197937, 0.468903, -0.860748},
726 {0.895599, 0.399384, 0.195801}, {0.560791, 0.825012, -0.069214},
727 {0.304199, -0.849487, 0.43103}, {0.096375, 0.93576, 0.339111},
728 {-0.051422, 0.408966, -0.911072}, {0.330444, 0.942841, -0.042389},
729 {-0.452362, -0.786407, 0.420563}, {0.134308, -0.933472, -0.332489},
730 {0.80191, -0.566711, -0.188934}, {-0.987946, -0.105988, 0.112518},
731 {-0.24408, 0.892242, -0.379791}, {-0.920502, 0.229095, -0.316376},
732 {0.7789, 0.325958, 0.535706}, {-0.912872, 0.185211, -0.36377},
733 {-0.184784, 0.565369, -0.803833}, {-0.018463, 0.119537, 0.992615},
734 {-0.259247, -0.935608, 0.239532}, {-0.82373, -0.449127, -0.345947},
735 {-0.433105, 0.659515, 0.614349}, {-0.822754, 0.378845, -0.423676},
736 {0.687195, -0.674835, -0.26889}, {-0.246582, -0.800842, 0.545715},
737 {-0.729187, -0.207794, 0.651978}, {0.653534, -0.610443, -0.447388},
738 {0.492584, -0.023346, 0.869934}, {0.609039, 0.009094, -0.79306},
739 {0.962494, -0.271088, -0.00885}, {0.2659, -0.004913, 0.963959},
740 {0.651245, 0.553619, -0.518951}, {0.280548, -0.84314, 0.458618},
741 {-0.175293, -0.983215, 0.049805}, {0.035339, -0.979919, 0.196045},
742 {-0.982941, 0.164307, -0.082245}, {0.233734, -0.97226, -0.005005},
743 {-0.747253, -0.611328, 0.260437}, {0.645599, 0.592773, 0.481384},
744 {0.117706, -0.949524, -0.29068}, {-0.535004, -0.791901, -0.294312},
745 {-0.627167, -0.214447, 0.748718}, {-0.047974, -0.813477, -0.57959},
746 {-0.175537, 0.477264, -0.860992}, {0.738556, -0.414246, -0.53183},
747 {0.562561, -0.704071, 0.433289}, {-0.754944, 0.64801, -0.100586},
748 {0.114716, 0.044525, -0.992371}, {0.966003, 0.244873, -0.082764},
749 {0.33783, 0.715698, -0.611206}, {-0.944031, -0.326599, -0.045624},
750};
751
752#define SETUP(val, b0, b1, r0, r1) \
753 { \
754 t = val + 10000.0f; \
755 b0 = (int(t)) & 255; \
756 b1 = (b0 + 1) & 255; \
757 r0 = t - floorf(t); \
758 r1 = r0 - 1.0f; \
759 } \
760 (void)0
761
762static float noise3_perlin(const float vec[3])
763{
764 const char *p = g_perlin_data_ub;
765 const float (*g)[3] = g_perlin_data_v3;
766 int bx0, bx1, by0, by1, bz0, bz1, b00, b10, b01, b11;
767 float rx0, rx1, ry0, ry1, rz0, rz1, sx, sy, sz, a, b, c, d, t, u, v;
768 const float *q;
769
770 SETUP(vec[0], bx0, bx1, rx0, rx1);
771 SETUP(vec[1], by0, by1, ry0, ry1);
772 SETUP(vec[2], bz0, bz1, rz0, rz1);
773
774 int i = p[bx0];
775 int j = p[bx1];
776
777 b00 = p[i + by0];
778 b10 = p[j + by0];
779 b01 = p[i + by1];
780 b11 = p[j + by1];
781
782#define VALUE_AT(rx, ry, rz) ((rx) * q[0] + (ry) * q[1] + (rz) * q[2])
783#define SURVE(t) ((t) * (t) * (3.0f - 2.0f * (t)))
784
785 /* lerp moved to improved perlin above */
786
787 sx = SURVE(rx0);
788 sy = SURVE(ry0);
789 sz = SURVE(rz0);
790
791 q = g[b00 + bz0];
792 u = VALUE_AT(rx0, ry0, rz0);
793 q = g[b10 + bz0];
794 v = VALUE_AT(rx1, ry0, rz0);
795 a = lerp(sx, u, v);
796
797 q = g[b01 + bz0];
798 u = VALUE_AT(rx0, ry1, rz0);
799 q = g[b11 + bz0];
800 v = VALUE_AT(rx1, ry1, rz0);
801 b = lerp(sx, u, v);
802
803 c = lerp(sy, a, b); /* interpolate in y at lo x */
804
805 q = g[b00 + bz1];
806 u = VALUE_AT(rx0, ry0, rz1);
807 q = g[b10 + bz1];
808 v = VALUE_AT(rx1, ry0, rz1);
809 a = lerp(sx, u, v);
810
811 q = g[b01 + bz1];
812 u = VALUE_AT(rx0, ry1, rz1);
813 q = g[b11 + bz1];
814 v = VALUE_AT(rx1, ry1, rz1);
815 b = lerp(sx, u, v);
816
817 d = lerp(sy, a, b); /* interpolate in y at hi x */
818
819 return 1.5f * lerp(sz, c, d); /* interpolate in z */
820
821#undef VALUE_AT
822#undef SURVE
823}
824
825/* for use with BLI_noise_generic_noise/gTurbulence, returns signed noise */
826static float orgPerlinNoise(float x, float y, float z)
827{
828 float v[3] = {x, y, z};
829 return noise3_perlin(v);
830}
831
832/* for use with BLI_noise_generic_noise/gTurbulence, returns unsigned noise */
833static float orgPerlinNoiseU(float x, float y, float z)
834{
835 float v[3] = {x, y, z};
836 return (0.5f + 0.5f * noise3_perlin(v));
837}
838
839/* *************** CALL AS: *************** */
840
841float BLI_noise_hnoisep(float noisesize, float x, float y, float z)
842{
843 float vec[3];
844
845 vec[0] = x / noisesize;
846 vec[1] = y / noisesize;
847 vec[2] = z / noisesize;
848
849 return noise3_perlin(vec);
850}
851
853
854/* -------------------------------------------------------------------- */
857
858/* distance metrics for voronoi, e parameter only used in Minkowski */
859/* Camberra omitted, didn't seem useful */
860
861/* distance squared */
862static float dist_Squared(float x, float y, float z, float e)
863{
864 (void)e;
865 return (x * x + y * y + z * z);
866}
867/* real distance */
868static float dist_Real(float x, float y, float z, float e)
869{
870 (void)e;
871 return sqrtf(x * x + y * y + z * z);
872}
873/* Manhattan/Taxi-Cab/City-Block distance. */
874static float dist_Manhattan(float x, float y, float z, float e)
875{
876 (void)e;
877 return (fabsf(x) + fabsf(y) + fabsf(z));
878}
879/* Chebychev */
880static float dist_Chebychev(float x, float y, float z, float e)
881{
882 (void)e;
883
884 x = fabsf(x);
885 y = fabsf(y);
886 z = fabsf(z);
887 float t = (x > y) ? x : y;
888 return ((z > t) ? z : t);
889}
890
891/* minkowski preset exponent 0.5 */
892static float dist_MinkovskyH(float x, float y, float z, float e)
893{
894 float d = sqrtf(fabsf(x)) + sqrtf(fabsf(y)) + sqrtf(fabsf(z));
895 (void)e;
896 return (d * d);
897}
898
899/* minkowski preset exponent 4 */
900static float dist_Minkovsky4(float x, float y, float z, float e)
901{
902 (void)e;
903 x *= x;
904 y *= y;
905 z *= z;
906 return sqrtf(sqrtf(x * x + y * y + z * z));
907}
908
909/* Minkowski, general case, slow, maybe too slow to be useful */
910static float dist_Minkovsky(float x, float y, float z, float e)
911{
912 return powf(powf(fabsf(x), e) + powf(fabsf(y), e) + powf(fabsf(z), e), 1.0f / e);
913}
914
915void BLI_noise_voronoi(float x, float y, float z, float *da, float *pa, float me, int dtype)
916{
917 float (*distfunc)(float, float, float, float);
918 switch (dtype) {
919 case 1:
920 distfunc = dist_Squared;
921 break;
922 case 2:
923 distfunc = dist_Manhattan;
924 break;
925 case 3:
926 distfunc = dist_Chebychev;
927 break;
928 case 4:
929 distfunc = dist_MinkovskyH;
930 break;
931 case 5:
932 distfunc = dist_Minkovsky4;
933 break;
934 case 6:
935 distfunc = dist_Minkovsky;
936 break;
937 case 0:
938 default:
939 distfunc = dist_Real;
940 break;
941 }
942
943 int xi = int(floor(x));
944 int yi = int(floor(y));
945 int zi = int(floor(z));
946 da[0] = da[1] = da[2] = da[3] = 1e10f;
947 for (int xx = xi - 1; xx <= xi + 1; xx++) {
948 for (int yy = yi - 1; yy <= yi + 1; yy++) {
949 for (int zz = zi - 1; zz <= zi + 1; zz++) {
950 const float *p = HASHPNT(xx, yy, zz);
951 float xd = x - (p[0] + xx);
952 float yd = y - (p[1] + yy);
953 float zd = z - (p[2] + zz);
954 float d = distfunc(xd, yd, zd, me);
955 if (d < da[0]) {
956 da[3] = da[2];
957 da[2] = da[1];
958 da[1] = da[0];
959 da[0] = d;
960 pa[9] = pa[6];
961 pa[10] = pa[7];
962 pa[11] = pa[8];
963 pa[6] = pa[3];
964 pa[7] = pa[4];
965 pa[8] = pa[5];
966 pa[3] = pa[0];
967 pa[4] = pa[1];
968 pa[5] = pa[2];
969 pa[0] = p[0] + xx;
970 pa[1] = p[1] + yy;
971 pa[2] = p[2] + zz;
972 }
973 else if (d < da[1]) {
974 da[3] = da[2];
975 da[2] = da[1];
976 da[1] = d;
977 pa[9] = pa[6];
978 pa[10] = pa[7];
979 pa[11] = pa[8];
980 pa[6] = pa[3];
981 pa[7] = pa[4];
982 pa[8] = pa[5];
983 pa[3] = p[0] + xx;
984 pa[4] = p[1] + yy;
985 pa[5] = p[2] + zz;
986 }
987 else if (d < da[2]) {
988 da[3] = da[2];
989 da[2] = d;
990 pa[9] = pa[6];
991 pa[10] = pa[7];
992 pa[11] = pa[8];
993 pa[6] = p[0] + xx;
994 pa[7] = p[1] + yy;
995 pa[8] = p[2] + zz;
996 }
997 else if (d < da[3]) {
998 da[3] = d;
999 pa[9] = p[0] + xx;
1000 pa[10] = p[1] + yy;
1001 pa[11] = p[2] + zz;
1002 }
1003 }
1004 }
1005 }
1006}
1007
1008/* returns different feature points for use in BLI_noise_generic_noise() */
1009static float voronoi_F1(float x, float y, float z)
1010{
1011 float da[4], pa[12];
1012 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1013 return da[0];
1014}
1015
1016static float voronoi_F2(float x, float y, float z)
1017{
1018 float da[4], pa[12];
1019 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1020 return da[1];
1021}
1022
1023static float voronoi_F3(float x, float y, float z)
1024{
1025 float da[4], pa[12];
1026 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1027 return da[2];
1028}
1029
1030static float voronoi_F4(float x, float y, float z)
1031{
1032 float da[4], pa[12];
1033 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1034 return da[3];
1035}
1036
1037static float voronoi_F1F2(float x, float y, float z)
1038{
1039 float da[4], pa[12];
1040 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1041 return (da[1] - da[0]);
1042}
1043
1044/* Crackle type pattern, just a scale/clamp of F2-F1 */
1045static float voronoi_Cr(float x, float y, float z)
1046{
1047 float t = 10 * voronoi_F1F2(x, y, z);
1048 if (t > 1.0f) {
1049 return 1.0f;
1050 }
1051 return t;
1052}
1053
1059static float voronoi_F1S(float x, float y, float z)
1060{
1061 float da[4], pa[12];
1062 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1063 return (2.0f * da[0] - 1.0f);
1064}
1065
1066static float voronoi_F2S(float x, float y, float z)
1067{
1068 float da[4], pa[12];
1069 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1070 return (2.0f * da[1] - 1.0f);
1071}
1072
1073static float voronoi_F3S(float x, float y, float z)
1074{
1075 float da[4], pa[12];
1076 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1077 return (2.0f * da[2] - 1.0f);
1078}
1079
1080static float voronoi_F4S(float x, float y, float z)
1081{
1082 float da[4], pa[12];
1083 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1084 return (2.0f * da[3] - 1.0f);
1085}
1086
1087static float voronoi_F1F2S(float x, float y, float z)
1088{
1089 float da[4], pa[12];
1090 BLI_noise_voronoi(x, y, z, da, pa, 1, 0);
1091 return (2.0f * (da[1] - da[0]) - 1.0f);
1092}
1093
1094/* Crackle type pattern, just a scale/clamp of F2-F1 */
1095static float voronoi_CrS(float x, float y, float z)
1096{
1097 float t = 10 * voronoi_F1F2(x, y, z);
1098 if (t > 1.0f) {
1099 return 1.0f;
1100 }
1101 return (2.0f * t - 1.0f);
1102}
1103
1105
1106/* -------------------------------------------------------------------- */
1109
1111static float BLI_cellNoiseU(float x, float y, float z)
1112{
1113 /* avoid precision issues on unit coordinates */
1114 x = (x + 0.000001f) * 1.00001f;
1115 y = (y + 0.000001f) * 1.00001f;
1116 z = (z + 0.000001f) * 1.00001f;
1117
1118 int xi = int(floor(x));
1119 int yi = int(floor(y));
1120 int zi = int(floor(z));
1121 uint n = xi + yi * 1301 + zi * 314159;
1122 n ^= (n << 13);
1123 return (float(n * (n * n * 15731 + 789221) + 1376312589) / 4294967296.0f);
1124}
1125
1126float BLI_noise_cell(float x, float y, float z)
1127{
1128 return (2.0f * BLI_cellNoiseU(x, y, z) - 1.0f);
1129}
1130
1131void BLI_noise_cell_v3(float x, float y, float z, float r_ca[3])
1132{
1133 /* avoid precision issues on unit coordinates */
1134 x = (x + 0.000001f) * 1.00001f;
1135 y = (y + 0.000001f) * 1.00001f;
1136 z = (z + 0.000001f) * 1.00001f;
1137
1138 int xi = int(floor(x));
1139 int yi = int(floor(y));
1140 int zi = int(floor(z));
1141 const float *p = HASHPNT(xi, yi, zi);
1142 r_ca[0] = p[0];
1143 r_ca[1] = p[1];
1144 r_ca[2] = p[2];
1145}
1146
1148
1149/* -------------------------------------------------------------------- */
1152
1154 float noisesize, float x, float y, float z, bool hard, int noisebasis)
1155{
1156 float (*noisefunc)(float, float, float);
1157
1158 switch (noisebasis) {
1159 case 1:
1160 noisefunc = orgPerlinNoiseU;
1161 break;
1162 case 2:
1163 noisefunc = newPerlinU;
1164 break;
1165 case 3:
1166 noisefunc = voronoi_F1;
1167 break;
1168 case 4:
1169 noisefunc = voronoi_F2;
1170 break;
1171 case 5:
1172 noisefunc = voronoi_F3;
1173 break;
1174 case 6:
1175 noisefunc = voronoi_F4;
1176 break;
1177 case 7:
1178 noisefunc = voronoi_F1F2;
1179 break;
1180 case 8:
1181 noisefunc = voronoi_Cr;
1182 break;
1183 case 14:
1184 noisefunc = BLI_cellNoiseU;
1185 break;
1186 case 0:
1187 default: {
1188 noisefunc = orgBlenderNoise;
1189 /* add one to make return value same as BLI_noise_hnoise */
1190 x += 1;
1191 y += 1;
1192 z += 1;
1193 break;
1194 }
1195 }
1196
1197 if (noisesize != 0.0f) {
1198 noisesize = 1.0f / noisesize;
1199 x *= noisesize;
1200 y *= noisesize;
1201 z *= noisesize;
1202 }
1203
1204 if (hard) {
1205 return fabsf(2.0f * noisefunc(x, y, z) - 1.0f);
1206 }
1207 return noisefunc(x, y, z);
1208}
1209
1211 float noisesize, float x, float y, float z, int oct, bool hard, int noisebasis)
1212{
1213 float (*noisefunc)(float, float, float);
1214 switch (noisebasis) {
1215 case 1:
1216 noisefunc = orgPerlinNoiseU;
1217 break;
1218 case 2:
1219 noisefunc = newPerlinU;
1220 break;
1221 case 3:
1222 noisefunc = voronoi_F1;
1223 break;
1224 case 4:
1225 noisefunc = voronoi_F2;
1226 break;
1227 case 5:
1228 noisefunc = voronoi_F3;
1229 break;
1230 case 6:
1231 noisefunc = voronoi_F4;
1232 break;
1233 case 7:
1234 noisefunc = voronoi_F1F2;
1235 break;
1236 case 8:
1237 noisefunc = voronoi_Cr;
1238 break;
1239 case 14:
1240 noisefunc = BLI_cellNoiseU;
1241 break;
1242 case 0:
1243 default:
1244 noisefunc = orgBlenderNoise;
1245 x += 1;
1246 y += 1;
1247 z += 1;
1248 break;
1249 }
1250
1251 if (noisesize != 0.0f) {
1252 noisesize = 1.0f / noisesize;
1253 x *= noisesize;
1254 y *= noisesize;
1255 z *= noisesize;
1256 }
1257
1258 float sum = 0, amp = 1, fscale = 1;
1259 for (int i = 0; i <= oct; i++, amp *= 0.5f, fscale *= 2.0f) {
1260 float t = noisefunc(fscale * x, fscale * y, fscale * z);
1261 if (hard) {
1262 t = fabsf(2.0f * t - 1.0f);
1263 }
1264 sum += t * amp;
1265 }
1266
1267 sum *= float(1 << oct) / float((1 << (oct + 1)) - 1);
1268
1269 return sum;
1270}
1271
1273 float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
1274{
1275 /* The following code is based on Ken Musgrave's explanations and sample
1276 * source code in the book "Texturing and Modeling: A procedural approach". */
1277
1278 float (*noisefunc)(float, float, float);
1279 switch (noisebasis) {
1280 case 1:
1281 noisefunc = orgPerlinNoise;
1282 break;
1283 case 2:
1284 noisefunc = newPerlin;
1285 break;
1286 case 3:
1287 noisefunc = voronoi_F1S;
1288 break;
1289 case 4:
1290 noisefunc = voronoi_F2S;
1291 break;
1292 case 5:
1293 noisefunc = voronoi_F3S;
1294 break;
1295 case 6:
1296 noisefunc = voronoi_F4S;
1297 break;
1298 case 7:
1299 noisefunc = voronoi_F1F2S;
1300 break;
1301 case 8:
1302 noisefunc = voronoi_CrS;
1303 break;
1304 case 14:
1305 noisefunc = BLI_noise_cell;
1306 break;
1307 case 0:
1308 default: {
1309 noisefunc = orgBlenderNoiseS;
1310 break;
1311 }
1312 }
1313
1314 float value = 0.0, pwr = 1.0, pwHL = powf(lacunarity, -H);
1315 for (int i = 0; i < int(octaves); i++) {
1316 value += noisefunc(x, y, z) * pwr;
1317 pwr *= pwHL;
1318 x *= lacunarity;
1319 y *= lacunarity;
1320 z *= lacunarity;
1321 }
1322
1323 float rmd = octaves - floorf(octaves);
1324 if (rmd != 0.0f) {
1325 value += rmd * noisefunc(x, y, z) * pwr;
1326 }
1327
1328 return value;
1329
1330} /* fBm() */
1331
1333 float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
1334{
1335 /* This one is in fact rather confusing, there seem to be errors in the original source code
1336 * (in all three versions of `proc.text & mod`),
1337 * I modified it to something that made sense to me, so it might be wrong. */
1338
1339 float (*noisefunc)(float, float, float);
1340 switch (noisebasis) {
1341 case 1:
1342 noisefunc = orgPerlinNoise;
1343 break;
1344 case 2:
1345 noisefunc = newPerlin;
1346 break;
1347 case 3:
1348 noisefunc = voronoi_F1S;
1349 break;
1350 case 4:
1351 noisefunc = voronoi_F2S;
1352 break;
1353 case 5:
1354 noisefunc = voronoi_F3S;
1355 break;
1356 case 6:
1357 noisefunc = voronoi_F4S;
1358 break;
1359 case 7:
1360 noisefunc = voronoi_F1F2S;
1361 break;
1362 case 8:
1363 noisefunc = voronoi_CrS;
1364 break;
1365 case 14:
1366 noisefunc = BLI_noise_cell;
1367 break;
1368 case 0:
1369 default: {
1370 noisefunc = orgBlenderNoiseS;
1371 break;
1372 }
1373 }
1374
1375 float value = 1.0, pwr = 1.0, pwHL = powf(lacunarity, -H);
1376 for (int i = 0; i < int(octaves); i++) {
1377 value *= (pwr * noisefunc(x, y, z) + 1.0f);
1378 pwr *= pwHL;
1379 x *= lacunarity;
1380 y *= lacunarity;
1381 z *= lacunarity;
1382 }
1383 float rmd = octaves - floorf(octaves);
1384 if (rmd != 0.0f) {
1385 value *= (rmd * noisefunc(x, y, z) * pwr + 1.0f);
1386 }
1387
1388 return value;
1389}
1390
1392 float y,
1393 float z,
1394 float H,
1395 float lacunarity,
1396 float octaves,
1397 float offset,
1398 int noisebasis)
1399{
1400 float (*noisefunc)(float, float, float);
1401 switch (noisebasis) {
1402 case 1:
1403 noisefunc = orgPerlinNoise;
1404 break;
1405 case 2:
1406 noisefunc = newPerlin;
1407 break;
1408 case 3:
1409 noisefunc = voronoi_F1S;
1410 break;
1411 case 4:
1412 noisefunc = voronoi_F2S;
1413 break;
1414 case 5:
1415 noisefunc = voronoi_F3S;
1416 break;
1417 case 6:
1418 noisefunc = voronoi_F4S;
1419 break;
1420 case 7:
1421 noisefunc = voronoi_F1F2S;
1422 break;
1423 case 8:
1424 noisefunc = voronoi_CrS;
1425 break;
1426 case 14:
1427 noisefunc = BLI_noise_cell;
1428 break;
1429 case 0:
1430 default: {
1431 noisefunc = orgBlenderNoiseS;
1432 break;
1433 }
1434 }
1435
1436 /* first unscaled octave of function; later octaves are scaled */
1437 float value = offset + noisefunc(x, y, z);
1438 x *= lacunarity;
1439 y *= lacunarity;
1440 z *= lacunarity;
1441
1442 float pwHL = powf(lacunarity, -H);
1443 float pwr = pwHL; /* starts with i=1 instead of 0 */
1444 for (int i = 1; i < int(octaves); i++) {
1445 float increment = (noisefunc(x, y, z) + offset) * pwr * value;
1446 value += increment;
1447 pwr *= pwHL;
1448 x *= lacunarity;
1449 y *= lacunarity;
1450 z *= lacunarity;
1451 }
1452
1453 float rmd = octaves - floorf(octaves);
1454 if (rmd != 0.0f) {
1455 float increment = (noisefunc(x, y, z) + offset) * pwr * value;
1456 value += rmd * increment;
1457 }
1458 return value;
1459}
1460
1462 float y,
1463 float z,
1464 float H,
1465 float lacunarity,
1466 float octaves,
1467 float offset,
1468 float gain,
1469 int noisebasis)
1470{
1471 float (*noisefunc)(float, float, float);
1472 switch (noisebasis) {
1473 case 1:
1474 noisefunc = orgPerlinNoise;
1475 break;
1476 case 2:
1477 noisefunc = newPerlin;
1478 break;
1479 case 3:
1480 noisefunc = voronoi_F1S;
1481 break;
1482 case 4:
1483 noisefunc = voronoi_F2S;
1484 break;
1485 case 5:
1486 noisefunc = voronoi_F3S;
1487 break;
1488 case 6:
1489 noisefunc = voronoi_F4S;
1490 break;
1491 case 7:
1492 noisefunc = voronoi_F1F2S;
1493 break;
1494 case 8:
1495 noisefunc = voronoi_CrS;
1496 break;
1497 case 14:
1498 noisefunc = BLI_noise_cell;
1499 break;
1500 case 0:
1501 default: {
1502 noisefunc = orgBlenderNoiseS;
1503 break;
1504 }
1505 }
1506
1507 float result = noisefunc(x, y, z) + offset;
1508 float weight = gain * result;
1509 x *= lacunarity;
1510 y *= lacunarity;
1511 z *= lacunarity;
1512
1513 float pwHL = powf(lacunarity, -H);
1514 float pwr = pwHL; /* starts with i=1 instead of 0 */
1515 for (int i = 1; (weight > 0.001f) && (i < int(octaves)); i++) {
1516 weight = std::min(weight, 1.0f);
1517 float signal = (noisefunc(x, y, z) + offset) * pwr;
1518 pwr *= pwHL;
1519 result += weight * signal;
1520 weight *= gain * signal;
1521 x *= lacunarity;
1522 y *= lacunarity;
1523 z *= lacunarity;
1524 }
1525
1526 float rmd = octaves - floorf(octaves);
1527 if (rmd != 0.0f) {
1528 result += rmd * ((noisefunc(x, y, z) + offset) * pwr);
1529 }
1530
1531 return result;
1532
1533} /* HybridMultifractal() */
1534
1536 float y,
1537 float z,
1538 float H,
1539 float lacunarity,
1540 float octaves,
1541 float offset,
1542 float gain,
1543 int noisebasis)
1544{
1545 float (*noisefunc)(float, float, float);
1546 switch (noisebasis) {
1547 case 1:
1548 noisefunc = orgPerlinNoise;
1549 break;
1550 case 2:
1551 noisefunc = newPerlin;
1552 break;
1553 case 3:
1554 noisefunc = voronoi_F1S;
1555 break;
1556 case 4:
1557 noisefunc = voronoi_F2S;
1558 break;
1559 case 5:
1560 noisefunc = voronoi_F3S;
1561 break;
1562 case 6:
1563 noisefunc = voronoi_F4S;
1564 break;
1565 case 7:
1566 noisefunc = voronoi_F1F2S;
1567 break;
1568 case 8:
1569 noisefunc = voronoi_CrS;
1570 break;
1571 case 14:
1572 noisefunc = BLI_noise_cell;
1573 break;
1574 case 0:
1575 default: {
1576 noisefunc = orgBlenderNoiseS;
1577 break;
1578 }
1579 }
1580
1581 float signal = powf(offset - fabsf(noisefunc(x, y, z)), 2);
1582 float result = signal;
1583 float pwHL = powf(lacunarity, -H);
1584 float pwr = pwHL; /* starts with i=1 instead of 0 */
1585 for (int i = 1; i < int(octaves); i++) {
1586 x *= lacunarity;
1587 y *= lacunarity;
1588 z *= lacunarity;
1589 float weight = signal * gain;
1590 if (weight > 1.0f) {
1591 weight = 1.0f;
1592 }
1593 else if (weight < 0.0f) {
1594 weight = 0.0f;
1595 }
1596 signal = offset - fabsf(noisefunc(x, y, z));
1597 signal *= signal;
1598 signal *= weight;
1599 result += signal * pwr;
1600 pwr *= pwHL;
1601 }
1602
1603 return result;
1604} /* RidgedMultifractal() */
1605
1607 float x, float y, float z, float distortion, int nbas1, int nbas2)
1608{
1609 float (*noisefunc1)(float, float, float);
1610 switch (nbas1) {
1611 case 1:
1612 noisefunc1 = orgPerlinNoise;
1613 break;
1614 case 2:
1615 noisefunc1 = newPerlin;
1616 break;
1617 case 3:
1618 noisefunc1 = voronoi_F1S;
1619 break;
1620 case 4:
1621 noisefunc1 = voronoi_F2S;
1622 break;
1623 case 5:
1624 noisefunc1 = voronoi_F3S;
1625 break;
1626 case 6:
1627 noisefunc1 = voronoi_F4S;
1628 break;
1629 case 7:
1630 noisefunc1 = voronoi_F1F2S;
1631 break;
1632 case 8:
1633 noisefunc1 = voronoi_CrS;
1634 break;
1635 case 14:
1636 noisefunc1 = BLI_noise_cell;
1637 break;
1638 case 0:
1639 default: {
1640 noisefunc1 = orgBlenderNoiseS;
1641 break;
1642 }
1643 }
1644
1645 float (*noisefunc2)(float, float, float);
1646 switch (nbas2) {
1647 case 1:
1648 noisefunc2 = orgPerlinNoise;
1649 break;
1650 case 2:
1651 noisefunc2 = newPerlin;
1652 break;
1653 case 3:
1654 noisefunc2 = voronoi_F1S;
1655 break;
1656 case 4:
1657 noisefunc2 = voronoi_F2S;
1658 break;
1659 case 5:
1660 noisefunc2 = voronoi_F3S;
1661 break;
1662 case 6:
1663 noisefunc2 = voronoi_F4S;
1664 break;
1665 case 7:
1666 noisefunc2 = voronoi_F1F2S;
1667 break;
1668 case 8:
1669 noisefunc2 = voronoi_CrS;
1670 break;
1671 case 14:
1672 noisefunc2 = BLI_noise_cell;
1673 break;
1674 case 0:
1675 default: {
1676 noisefunc2 = orgBlenderNoiseS;
1677 break;
1678 }
1679 }
1680
1681 /* get a random vector and scale the randomization */
1682 float rv[3] = {
1683 rv[0] = noisefunc1(x + 13.5f, y + 13.5f, z + 13.5f) * distortion,
1684 rv[1] = noisefunc1(x, y, z) * distortion,
1685 rv[2] = noisefunc1(x - 13.5f, y - 13.5f, z - 13.5f) * distortion,
1686 };
1687
1688 return noisefunc2(x + rv[0], y + rv[1], z + rv[2]); /* distorted-domain noise */
1689}
1690
#define BLI_INLINE
float BLI_noise_cell(float x, float y, float z)
Definition noise_c.cc:1126
const uchar BLI_noise_hash_uchar_512[512]
Definition noise_c.cc:120
unsigned char uchar
unsigned int uint
#define X
#define Z
#define Y
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
#define A
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
static T sum(const btAlignedObjectArray< T > &items)
nullptr float
#define powf(x, y)
#define floor
#define B
#define H(x, y, z)
static const float g_perlin_data_v3[512+2][3]
Definition noise_c.cc:492
static float voronoi_F4(float x, float y, float z)
Definition noise_c.cc:1030
#define VALUE_AT(rx, ry, rz)
static float dist_Minkovsky4(float x, float y, float z, float e)
Definition noise_c.cc:900
float BLI_noise_mg_hetero_terrain(float x, float y, float z, float H, float lacunarity, float octaves, float offset, int noisebasis)
Definition noise_c.cc:1391
static float dist_Real(float x, float y, float z, float e)
Definition noise_c.cc:868
static float orgPerlinNoise(float x, float y, float z)
Definition noise_c.cc:826
static float orgBlenderNoiseS(float x, float y, float z)
Definition noise_c.cc:417
static float dist_Minkovsky(float x, float y, float z, float e)
Definition noise_c.cc:910
static float newPerlinU(float x, float y, float z)
Definition noise_c.cc:317
float BLI_noise_mg_multi_fractal(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
Definition noise_c.cc:1332
static float noise3_perlin(const float vec[3])
Definition noise_c.cc:762
float BLI_noise_mg_ridged_multi_fractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis)
Definition noise_c.cc:1535
static float newPerlin(float x, float y, float z)
Definition noise_c.cc:280
static float voronoi_F1F2S(float x, float y, float z)
Definition noise_c.cc:1087
static float voronoi_CrS(float x, float y, float z)
Definition noise_c.cc:1095
static float orgBlenderNoise(float x, float y, float z)
Definition noise_c.cc:329
float BLI_noise_mg_variable_lacunarity(float x, float y, float z, float distortion, int nbas1, int nbas2)
Definition noise_c.cc:1606
static float orgPerlinNoiseU(float x, float y, float z)
Definition noise_c.cc:833
#define hash
Definition noise_c.cc:154
float BLI_noise_cell(float x, float y, float z)
Definition noise_c.cc:1126
static float voronoi_F1F2(float x, float y, float z)
Definition noise_c.cc:1037
float BLI_noise_generic_noise(float noisesize, float x, float y, float z, bool hard, int noisebasis)
Definition noise_c.cc:1153
static float voronoi_F1S(float x, float y, float z)
Definition noise_c.cc:1059
static const float hashpntf[768]
Definition noise_c.cc:31
static float voronoi_Cr(float x, float y, float z)
Definition noise_c.cc:1045
BLI_INLINE float npfade(float t)
Definition noise_c.cc:266
static float voronoi_F1(float x, float y, float z)
Definition noise_c.cc:1009
static float voronoi_F4S(float x, float y, float z)
Definition noise_c.cc:1080
static float dist_Squared(float x, float y, float z, float e)
Definition noise_c.cc:862
float BLI_noise_turbulence(float noisesize, float x, float y, float z, int nr)
Definition noise_c.cc:437
static float voronoi_F2S(float x, float y, float z)
Definition noise_c.cc:1066
static float dist_MinkovskyH(float x, float y, float z, float e)
Definition noise_c.cc:892
static float voronoi_F2(float x, float y, float z)
Definition noise_c.cc:1016
static const char g_perlin_data_ub[512+2]
Definition noise_c.cc:456
static const float hashvectf[768]
Definition noise_c.cc:156
float BLI_noise_hnoisep(float noisesize, float x, float y, float z)
Definition noise_c.cc:841
void BLI_noise_voronoi(float x, float y, float z, float *da, float *pa, float me, int dtype)
Definition noise_c.cc:915
static float voronoi_F3S(float x, float y, float z)
Definition noise_c.cc:1073
BLI_INLINE float grad(int hash_val, float x, float y, float z)
Definition noise_c.cc:271
float BLI_noise_hnoise(float noisesize, float x, float y, float z)
Definition noise_c.cc:424
static float dist_Manhattan(float x, float y, float z, float e)
Definition noise_c.cc:874
#define SETUP(val, b0, b1, r0, r1)
Definition noise_c.cc:752
float BLI_noise_mg_fbm(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
Definition noise_c.cc:1272
#define SURVE(t)
static float dist_Chebychev(float x, float y, float z, float e)
Definition noise_c.cc:880
void BLI_noise_cell_v3(float x, float y, float z, float r_ca[3])
Definition noise_c.cc:1131
static float BLI_cellNoiseU(float x, float y, float z)
Definition noise_c.cc:1111
float BLI_noise_mg_hybrid_multi_fractal(float x, float y, float z, float H, float lacunarity, float octaves, float offset, float gain, int noisebasis)
Definition noise_c.cc:1461
static float voronoi_F3(float x, float y, float z)
Definition noise_c.cc:1023
float BLI_noise_generic_turbulence(float noisesize, float x, float y, float z, int oct, bool hard, int noisebasis)
Definition noise_c.cc:1210
#define HASHPNT(x, y, z)
Definition noise_c.cc:30
#define floorf
#define fabsf
#define sqrtf
#define lerp(a, b, t)
Definition smaa.cc:314
i
Definition text_draw.cc:230