Blender V4.3
noise.c
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
9#include <math.h>
10
11#include "BLI_compiler_compat.h"
12#include "BLI_sys_types.h"
13
14#include "BLI_noise.h" /* Own include. */
15
16/* local */
17static float noise3_perlin(const float vec[3]);
18// static float turbulence_perlin(const float point[3], float lofreq, float hifreq);
19// static float turbulencep(float noisesize, float x, float y, float z, int nr);
20
21/* UNUSED */
22// #define HASHVEC(x, y, z) hashvectf + 3 * hash[(hash[(hash[(z) & 255] + (y)) & 255] + (x)) & 255]
23
24/* -------------------------------------------------------------------- */
28/* needed for voronoi */
29#define HASHPNT(x, y, z) hashpntf + 3 * hash[(hash[(hash[(z) & 255] + (y)) & 255] + (x)) & 255]
30static const float hashpntf[768] = {
31 0.536902, 0.020915, 0.501445, 0.216316, 0.517036, 0.822466, 0.965315, 0.377313, 0.678764,
32 0.744545, 0.097731, 0.396357, 0.247202, 0.520897, 0.613396, 0.542124, 0.146813, 0.255489,
33 0.810868, 0.638641, 0.980742, 0.292316, 0.357948, 0.114382, 0.861377, 0.629634, 0.722530,
34 0.714103, 0.048549, 0.075668, 0.564920, 0.162026, 0.054466, 0.411738, 0.156897, 0.887657,
35 0.599368, 0.074249, 0.170277, 0.225799, 0.393154, 0.301348, 0.057434, 0.293849, 0.442745,
36 0.150002, 0.398732, 0.184582, 0.915200, 0.630984, 0.974040, 0.117228, 0.795520, 0.763238,
37 0.158982, 0.616211, 0.250825, 0.906539, 0.316874, 0.676205, 0.234720, 0.667673, 0.792225,
38 0.273671, 0.119363, 0.199131, 0.856716, 0.828554, 0.900718, 0.705960, 0.635923, 0.989433,
39 0.027261, 0.283507, 0.113426, 0.388115, 0.900176, 0.637741, 0.438802, 0.715490, 0.043692,
40 0.202640, 0.378325, 0.450325, 0.471832, 0.147803, 0.906899, 0.524178, 0.784981, 0.051483,
41 0.893369, 0.596895, 0.275635, 0.391483, 0.844673, 0.103061, 0.257322, 0.708390, 0.504091,
42 0.199517, 0.660339, 0.376071, 0.038880, 0.531293, 0.216116, 0.138672, 0.907737, 0.807994,
43 0.659582, 0.915264, 0.449075, 0.627128, 0.480173, 0.380942, 0.018843, 0.211808, 0.569701,
44 0.082294, 0.689488, 0.573060, 0.593859, 0.216080, 0.373159, 0.108117, 0.595539, 0.021768,
45 0.380297, 0.948125, 0.377833, 0.319699, 0.315249, 0.972805, 0.792270, 0.445396, 0.845323,
46 0.372186, 0.096147, 0.689405, 0.423958, 0.055675, 0.117940, 0.328456, 0.605808, 0.631768,
47 0.372170, 0.213723, 0.032700, 0.447257, 0.440661, 0.728488, 0.299853, 0.148599, 0.649212,
48 0.498381, 0.049921, 0.496112, 0.607142, 0.562595, 0.990246, 0.739659, 0.108633, 0.978156,
49 0.209814, 0.258436, 0.876021, 0.309260, 0.600673, 0.713597, 0.576967, 0.641402, 0.853930,
50 0.029173, 0.418111, 0.581593, 0.008394, 0.589904, 0.661574, 0.979326, 0.275724, 0.111109,
51 0.440472, 0.120839, 0.521602, 0.648308, 0.284575, 0.204501, 0.153286, 0.822444, 0.300786,
52 0.303906, 0.364717, 0.209038, 0.916831, 0.900245, 0.600685, 0.890002, 0.581660, 0.431154,
53 0.705569, 0.551250, 0.417075, 0.403749, 0.696652, 0.292652, 0.911372, 0.690922, 0.323718,
54 0.036773, 0.258976, 0.274265, 0.225076, 0.628965, 0.351644, 0.065158, 0.080340, 0.467271,
55 0.130643, 0.385914, 0.919315, 0.253821, 0.966163, 0.017439, 0.392610, 0.478792, 0.978185,
56 0.072691, 0.982009, 0.097987, 0.731533, 0.401233, 0.107570, 0.349587, 0.479122, 0.700598,
57 0.481751, 0.788429, 0.706864, 0.120086, 0.562691, 0.981797, 0.001223, 0.192120, 0.451543,
58 0.173092, 0.108960, 0.549594, 0.587892, 0.657534, 0.396365, 0.125153, 0.666420, 0.385823,
59 0.890916, 0.436729, 0.128114, 0.369598, 0.759096, 0.044677, 0.904752, 0.088052, 0.621148,
60 0.005047, 0.452331, 0.162032, 0.494238, 0.523349, 0.741829, 0.698450, 0.452316, 0.563487,
61 0.819776, 0.492160, 0.004210, 0.647158, 0.551475, 0.362995, 0.177937, 0.814722, 0.727729,
62 0.867126, 0.997157, 0.108149, 0.085726, 0.796024, 0.665075, 0.362462, 0.323124, 0.043718,
63 0.042357, 0.315030, 0.328954, 0.870845, 0.683186, 0.467922, 0.514894, 0.809971, 0.631979,
64 0.176571, 0.366320, 0.850621, 0.505555, 0.749551, 0.750830, 0.401714, 0.481216, 0.438393,
65 0.508832, 0.867971, 0.654581, 0.058204, 0.566454, 0.084124, 0.548539, 0.902690, 0.779571,
66 0.562058, 0.048082, 0.863109, 0.079290, 0.713559, 0.783496, 0.265266, 0.672089, 0.786939,
67 0.143048, 0.086196, 0.876129, 0.408708, 0.229312, 0.629995, 0.206665, 0.207308, 0.710079,
68 0.341704, 0.264921, 0.028748, 0.629222, 0.470173, 0.726228, 0.125243, 0.328249, 0.794187,
69 0.741340, 0.489895, 0.189396, 0.724654, 0.092841, 0.039809, 0.860126, 0.247701, 0.655331,
70 0.964121, 0.672536, 0.044522, 0.690567, 0.837238, 0.631520, 0.953734, 0.352484, 0.289026,
71 0.034152, 0.852575, 0.098454, 0.795529, 0.452181, 0.826159, 0.186993, 0.820725, 0.440328,
72 0.922137, 0.704592, 0.915437, 0.738183, 0.733461, 0.193798, 0.929213, 0.161390, 0.318547,
73 0.888751, 0.430968, 0.740837, 0.193544, 0.872253, 0.563074, 0.274598, 0.347805, 0.666176,
74 0.449831, 0.800991, 0.588727, 0.052296, 0.714761, 0.420620, 0.570325, 0.057550, 0.210888,
75 0.407312, 0.662848, 0.924382, 0.895958, 0.775198, 0.688605, 0.025721, 0.301913, 0.791408,
76 0.500602, 0.831984, 0.828509, 0.642093, 0.494174, 0.525880, 0.446365, 0.440063, 0.763114,
77 0.630358, 0.223943, 0.333806, 0.906033, 0.498306, 0.241278, 0.427640, 0.772683, 0.198082,
78 0.225379, 0.503894, 0.436599, 0.016503, 0.803725, 0.189878, 0.291095, 0.499114, 0.151573,
79 0.079031, 0.904618, 0.708535, 0.273900, 0.067419, 0.317124, 0.936499, 0.716511, 0.543845,
80 0.939909, 0.826574, 0.715090, 0.154864, 0.750150, 0.845808, 0.648108, 0.556564, 0.644757,
81 0.140873, 0.799167, 0.632989, 0.444245, 0.471978, 0.435910, 0.359793, 0.216241, 0.007633,
82 0.337236, 0.857863, 0.380247, 0.092517, 0.799973, 0.919000, 0.296798, 0.096989, 0.854831,
83 0.165369, 0.568475, 0.216855, 0.020457, 0.835511, 0.538039, 0.999742, 0.620226, 0.244053,
84 0.060399, 0.323007, 0.294874, 0.988899, 0.384919, 0.735655, 0.773428, 0.549776, 0.292882,
85 0.660611, 0.593507, 0.621118, 0.175269, 0.682119, 0.794493, 0.868197, 0.632150, 0.807823,
86 0.509656, 0.482035, 0.001780, 0.259126, 0.358002, 0.280263, 0.192985, 0.290367, 0.208111,
87 0.917633, 0.114422, 0.925491, 0.981110, 0.255570, 0.974862, 0.016629, 0.552599, 0.575741,
88 0.612978, 0.615965, 0.803615, 0.772334, 0.089745, 0.838812, 0.634542, 0.113709, 0.755832,
89 0.577589, 0.667489, 0.529834, 0.325660, 0.817597, 0.316557, 0.335093, 0.737363, 0.260951,
90 0.737073, 0.049540, 0.735541, 0.988891, 0.299116, 0.147695, 0.417271, 0.940811, 0.524160,
91 0.857968, 0.176403, 0.244835, 0.485759, 0.033353, 0.280319, 0.750688, 0.755809, 0.924208,
92 0.095956, 0.962504, 0.275584, 0.173715, 0.942716, 0.706721, 0.078464, 0.576716, 0.804667,
93 0.559249, 0.900611, 0.646904, 0.432111, 0.927885, 0.383277, 0.269973, 0.114244, 0.574867,
94 0.150703, 0.241855, 0.272871, 0.199950, 0.079719, 0.868566, 0.962833, 0.789122, 0.320025,
95 0.905554, 0.234876, 0.991356, 0.061913, 0.732911, 0.785960, 0.874074, 0.069035, 0.658632,
96 0.309901, 0.023676, 0.791603, 0.764661, 0.661278, 0.319583, 0.829650, 0.117091, 0.903124,
97 0.982098, 0.161631, 0.193576, 0.670428, 0.857390, 0.003760, 0.572578, 0.222162, 0.114551,
98 0.420118, 0.530404, 0.470682, 0.525527, 0.764281, 0.040596, 0.443275, 0.501124, 0.816161,
99 0.417467, 0.332172, 0.447565, 0.614591, 0.559246, 0.805295, 0.226342, 0.155065, 0.714630,
100 0.160925, 0.760001, 0.453456, 0.093869, 0.406092, 0.264801, 0.720370, 0.743388, 0.373269,
101 0.403098, 0.911923, 0.897249, 0.147038, 0.753037, 0.516093, 0.739257, 0.175018, 0.045768,
102 0.735857, 0.801330, 0.927708, 0.240977, 0.591870, 0.921831, 0.540733, 0.149100, 0.423152,
103 0.806876, 0.397081, 0.061100, 0.811630, 0.044899, 0.460915, 0.961202, 0.822098, 0.971524,
104 0.867608, 0.773604, 0.226616, 0.686286, 0.926972, 0.411613, 0.267873, 0.081937, 0.226124,
105 0.295664, 0.374594, 0.533240, 0.237876, 0.669629, 0.599083, 0.513081, 0.878719, 0.201577,
106 0.721296, 0.495038, 0.079760, 0.965959, 0.233090, 0.052496, 0.714748, 0.887844, 0.308724,
107 0.972885, 0.723337, 0.453089, 0.914474, 0.704063, 0.823198, 0.834769, 0.906561, 0.919600,
108 0.100601, 0.307564, 0.901977, 0.468879, 0.265376, 0.885188, 0.683875, 0.868623, 0.081032,
109 0.466835, 0.199087, 0.663437, 0.812241, 0.311337, 0.821361, 0.356628, 0.898054, 0.160781,
110 0.222539, 0.714889, 0.490287, 0.984915, 0.951755, 0.964097, 0.641795, 0.815472, 0.852732,
111 0.862074, 0.051108, 0.440139, 0.323207, 0.517171, 0.562984, 0.115295, 0.743103, 0.977914,
112 0.337596, 0.440694, 0.535879, 0.959427, 0.351427, 0.704361, 0.010826, 0.131162, 0.577080,
113 0.349572, 0.774892, 0.425796, 0.072697, 0.500001, 0.267322, 0.909654, 0.206176, 0.223987,
114 0.937698, 0.323423, 0.117501, 0.490308, 0.474372, 0.689943, 0.168671, 0.719417, 0.188928,
115 0.330464, 0.265273, 0.446271, 0.171933, 0.176133, 0.474616, 0.140182, 0.114246, 0.905043,
116 0.713870, 0.555261, 0.951333,
117};
118
119extern const uchar BLI_noise_hash_uchar_512[512]; /* Quiet warning. */
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
257/* -------------------------------------------------------------------- */
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
324/* -------------------------------------------------------------------- */
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
854/* -------------------------------------------------------------------- */
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
1106/* -------------------------------------------------------------------- */
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
1149/* -------------------------------------------------------------------- */
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 if (weight > 1.0f) {
1517 weight = 1.0f;
1518 }
1519 float signal = (noisefunc(x, y, z) + offset) * pwr;
1520 pwr *= pwHL;
1521 result += weight * signal;
1522 weight *= gain * signal;
1523 x *= lacunarity;
1524 y *= lacunarity;
1525 z *= lacunarity;
1526 }
1527
1528 float rmd = octaves - floorf(octaves);
1529 if (rmd != 0.0f) {
1530 result += rmd * ((noisefunc(x, y, z) + offset) * pwr);
1531 }
1532
1533 return result;
1534
1535} /* HybridMultifractal() */
1536
1538 float y,
1539 float z,
1540 float H,
1541 float lacunarity,
1542 float octaves,
1543 float offset,
1544 float gain,
1545 int noisebasis)
1546{
1547 float (*noisefunc)(float, float, float);
1548 switch (noisebasis) {
1549 case 1:
1550 noisefunc = orgPerlinNoise;
1551 break;
1552 case 2:
1553 noisefunc = newPerlin;
1554 break;
1555 case 3:
1556 noisefunc = voronoi_F1S;
1557 break;
1558 case 4:
1559 noisefunc = voronoi_F2S;
1560 break;
1561 case 5:
1562 noisefunc = voronoi_F3S;
1563 break;
1564 case 6:
1565 noisefunc = voronoi_F4S;
1566 break;
1567 case 7:
1568 noisefunc = voronoi_F1F2S;
1569 break;
1570 case 8:
1571 noisefunc = voronoi_CrS;
1572 break;
1573 case 14:
1574 noisefunc = BLI_noise_cell;
1575 break;
1576 case 0:
1577 default: {
1578 noisefunc = orgBlenderNoiseS;
1579 break;
1580 }
1581 }
1582
1583 float signal = powf(offset - fabsf(noisefunc(x, y, z)), 2);
1584 float result = signal;
1585 float pwHL = powf(lacunarity, -H);
1586 float pwr = pwHL; /* starts with i=1 instead of 0 */
1587 for (int i = 1; i < (int)octaves; i++) {
1588 x *= lacunarity;
1589 y *= lacunarity;
1590 z *= lacunarity;
1591 float weight = signal * gain;
1592 if (weight > 1.0f) {
1593 weight = 1.0f;
1594 }
1595 else if (weight < 0.0f) {
1596 weight = 0.0f;
1597 }
1598 signal = offset - fabsf(noisefunc(x, y, z));
1599 signal *= signal;
1600 signal *= weight;
1601 result += signal * pwr;
1602 pwr *= pwHL;
1603 }
1604
1605 return result;
1606} /* RidgedMultifractal() */
1607
1609 float x, float y, float z, float distortion, int nbas1, int nbas2)
1610{
1611 float (*noisefunc1)(float, float, float);
1612 switch (nbas1) {
1613 case 1:
1614 noisefunc1 = orgPerlinNoise;
1615 break;
1616 case 2:
1617 noisefunc1 = newPerlin;
1618 break;
1619 case 3:
1620 noisefunc1 = voronoi_F1S;
1621 break;
1622 case 4:
1623 noisefunc1 = voronoi_F2S;
1624 break;
1625 case 5:
1626 noisefunc1 = voronoi_F3S;
1627 break;
1628 case 6:
1629 noisefunc1 = voronoi_F4S;
1630 break;
1631 case 7:
1632 noisefunc1 = voronoi_F1F2S;
1633 break;
1634 case 8:
1635 noisefunc1 = voronoi_CrS;
1636 break;
1637 case 14:
1638 noisefunc1 = BLI_noise_cell;
1639 break;
1640 case 0:
1641 default: {
1642 noisefunc1 = orgBlenderNoiseS;
1643 break;
1644 }
1645 }
1646
1647 float (*noisefunc2)(float, float, float);
1648 switch (nbas2) {
1649 case 1:
1650 noisefunc2 = orgPerlinNoise;
1651 break;
1652 case 2:
1653 noisefunc2 = newPerlin;
1654 break;
1655 case 3:
1656 noisefunc2 = voronoi_F1S;
1657 break;
1658 case 4:
1659 noisefunc2 = voronoi_F2S;
1660 break;
1661 case 5:
1662 noisefunc2 = voronoi_F3S;
1663 break;
1664 case 6:
1665 noisefunc2 = voronoi_F4S;
1666 break;
1667 case 7:
1668 noisefunc2 = voronoi_F1F2S;
1669 break;
1670 case 8:
1671 noisefunc2 = voronoi_CrS;
1672 break;
1673 case 14:
1674 noisefunc2 = BLI_noise_cell;
1675 break;
1676 case 0:
1677 default: {
1678 noisefunc2 = orgBlenderNoiseS;
1679 break;
1680 }
1681 }
1682
1683 /* get a random vector and scale the randomization */
1684 float rv[3] = {
1685 rv[0] = noisefunc1(x + 13.5f, y + 13.5f, z + 13.5f) * distortion,
1686 rv[1] = noisefunc1(x, y, z) * distortion,
1687 rv[2] = noisefunc1(x - 13.5f, y - 13.5f, z - 13.5f) * distortion,
1688 };
1689
1690 return noisefunc2(x + rv[0], y + rv[1], z + rv[2]); /* distorted-domain noise */
1691}
1692
#define BLI_INLINE
unsigned char uchar
unsigned int uint
#define lerp(a, b, t)
#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)
local_group_size(16, 16) .push_constant(Type b
#define powf(x, y)
#define floorf(x)
#define fabsf(x)
#define sqrtf(x)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
ccl_device_inline float2 floor(const float2 a)
#define B
#define H(x, y, z)
static const float g_perlin_data_v3[512+2][3]
Definition noise.c:492
static float voronoi_F4(float x, float y, float z)
Definition noise.c:1030
#define VALUE_AT(rx, ry, rz)
static float dist_Minkovsky4(float x, float y, float z, float e)
Definition noise.c: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:1391
static float dist_Real(float x, float y, float z, float e)
Definition noise.c:868
static float orgPerlinNoise(float x, float y, float z)
Definition noise.c:826
static float orgBlenderNoiseS(float x, float y, float z)
Definition noise.c:417
static float dist_Minkovsky(float x, float y, float z, float e)
Definition noise.c:910
static float newPerlinU(float x, float y, float z)
Definition noise.c:317
float BLI_noise_mg_multi_fractal(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
Definition noise.c:1332
static float noise3_perlin(const float vec[3])
Definition noise.c: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:1537
static float newPerlin(float x, float y, float z)
Definition noise.c:280
static float voronoi_F1F2S(float x, float y, float z)
Definition noise.c:1087
static float voronoi_CrS(float x, float y, float z)
Definition noise.c:1095
static float orgBlenderNoise(float x, float y, float z)
Definition noise.c:329
float BLI_noise_mg_variable_lacunarity(float x, float y, float z, float distortion, int nbas1, int nbas2)
Definition noise.c:1608
static float orgPerlinNoiseU(float x, float y, float z)
Definition noise.c:833
#define hash
Definition noise.c:154
float BLI_noise_cell(float x, float y, float z)
Definition noise.c:1126
static float voronoi_F1F2(float x, float y, float z)
Definition noise.c:1037
float BLI_noise_generic_noise(float noisesize, float x, float y, float z, bool hard, int noisebasis)
Definition noise.c:1153
static float voronoi_F1S(float x, float y, float z)
Definition noise.c:1059
static const float hashpntf[768]
Definition noise.c:30
static float voronoi_Cr(float x, float y, float z)
Definition noise.c:1045
BLI_INLINE float npfade(float t)
Definition noise.c:266
static float voronoi_F1(float x, float y, float z)
Definition noise.c:1009
static float voronoi_F4S(float x, float y, float z)
Definition noise.c:1080
static float dist_Squared(float x, float y, float z, float e)
Definition noise.c:862
float BLI_noise_turbulence(float noisesize, float x, float y, float z, int nr)
Definition noise.c:437
static float voronoi_F2S(float x, float y, float z)
Definition noise.c:1066
static float dist_MinkovskyH(float x, float y, float z, float e)
Definition noise.c:892
static float voronoi_F2(float x, float y, float z)
Definition noise.c:1016
static const char g_perlin_data_ub[512+2]
Definition noise.c:456
static const float hashvectf[768]
Definition noise.c:156
float BLI_noise_hnoisep(float noisesize, float x, float y, float z)
Definition noise.c:841
void BLI_noise_voronoi(float x, float y, float z, float *da, float *pa, float me, int dtype)
Definition noise.c:915
static float voronoi_F3S(float x, float y, float z)
Definition noise.c:1073
BLI_INLINE float grad(int hash_val, float x, float y, float z)
Definition noise.c:271
float BLI_noise_hnoise(float noisesize, float x, float y, float z)
Definition noise.c:424
static float dist_Manhattan(float x, float y, float z, float e)
Definition noise.c:874
#define SETUP(val, b0, b1, r0, r1)
Definition noise.c:752
float BLI_noise_mg_fbm(float x, float y, float z, float H, float lacunarity, float octaves, int noisebasis)
Definition noise.c:1272
#define SURVE(t)
static float dist_Chebychev(float x, float y, float z, float e)
Definition noise.c:880
void BLI_noise_cell_v3(float x, float y, float z, float r_ca[3])
Definition noise.c:1131
static float BLI_cellNoiseU(float x, float y, float z)
Definition noise.c:1111
const uchar BLI_noise_hash_uchar_512[512]
Definition noise.c:120
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:1461
static float voronoi_F3(float x, float y, float z)
Definition noise.c:1023
float BLI_noise_generic_turbulence(float noisesize, float x, float y, float z, int oct, bool hard, int noisebasis)
Definition noise.c:1210
#define HASHPNT(x, y, z)
Definition noise.c:29