12 float precision_correction = 0.5 *
float(
fabs(co) >= 1000000.0);
15 float p =
fmod(co, 100000.0) + precision_correction;
17 return noise(
"noise", p);
22 vector2 precision_correction = 0.5 * vector2(
float(
fabs(co.x) >= 1000000.0),
23 float(
fabs(co.y) >= 1000000.0));
27 vector2 p =
fmod(co, 100000.0) + precision_correction;
29 return noise(
"noise", p.x, p.y);
35 float(
fabs(co.y) >= 1000000.0),
36 float(
fabs(co.z) >= 1000000.0));
40 vector3 p =
fmod(co, 100000.0) + precision_correction;
42 return noise(
"noise", p);
47 vector4 precision_correction = 0.5 * vector4(
float(
fabs(co.x) >= 1000000.0),
48 float(
fabs(co.y) >= 1000000.0),
49 float(
fabs(co.z) >= 1000000.0),
50 float(
fabs(co.w) >= 1000000.0));
54 vector4 p =
fmod(co, 100000.0) + precision_correction;
61 float precision_correction = 0.5 *
float(
fabs(co) >= 1000000.0);
64 float p =
fmod(co, 100000.0) + precision_correction;
66 return noise(
"snoise", p);
71 vector2 precision_correction = 0.5 * vector2(
float(
fabs(co.x) >= 1000000.0),
72 float(
fabs(co.y) >= 1000000.0));
76 vector2 p =
fmod(co, 100000.0) + precision_correction;
78 return noise(
"snoise", p.x, p.y);
84 float(
fabs(co.y) >= 1000000.0),
85 float(
fabs(co.z) >= 1000000.0));
89 vector3 p =
fmod(co, 100000.0) + precision_correction;
91 return noise(
"snoise", p);
96 vector4 precision_correction = 0.5 * vector4(
float(
fabs(co.x) >= 1000000.0),
97 float(
fabs(co.y) >= 1000000.0),
98 float(
fabs(co.z) >= 1000000.0),
99 float(
fabs(co.w) >= 1000000.0));
103 vector4 p =
fmod(co, 100000.0) + precision_correction;
108#define NOISE_FBM(T) \
109 float noise_fbm(T co, float detail, float roughness, float lacunarity, int use_normalize) \
112 float fscale = 1.0; \
114 float maxamp = 0.0; \
117 for (int i = 0; i <= int(detail); i++) { \
118 float t = safe_snoise(fscale * p); \
122 fscale *= lacunarity; \
124 float rmd = detail - floor(detail); \
126 float t = safe_snoise(fscale * p); \
127 float sum2 = sum + t * amp; \
128 return use_normalize ? \
129 mix(0.5 * sum / maxamp + 0.5, 0.5 * sum2 / (maxamp + amp) + 0.5, rmd) : \
130 mix(sum, sum2, rmd); \
133 return use_normalize ? 0.5 * sum / maxamp + 0.5 : sum; \
137#define NOISE_MULTI_FRACTAL(T) \
138 float noise_multi_fractal(T co, float detail, float roughness, float lacunarity) \
144 for (int i = 0; i <= (int)detail; i++) { \
145 value *= (pwr * safe_snoise(p) + 1.0); \
150 float rmd = detail - floor(detail); \
152 value *= (rmd * pwr * safe_snoise(p) + 1.0); \
158#define NOISE_HETERO_TERRAIN(T) \
159 float noise_hetero_terrain(T co, float detail, float roughness, float lacunarity, float offset) \
162 float pwr = roughness; \
165 float value = offset + safe_snoise(p); \
168 for (int i = 1; i <= (int)detail; i++) { \
169 float increment = (safe_snoise(p) + offset) * pwr * value; \
170 value += increment; \
175 float rmd = detail - floor(detail); \
177 float increment = (safe_snoise(p) + offset) * pwr * value; \
178 value += rmd * increment; \
184#define NOISE_HYBRID_MULTI_FRACTAL(T) \
185 float noise_hybrid_multi_fractal( \
186 T co, float detail, float roughness, float lacunarity, float offset, float gain) \
191 float weight = 1.0; \
193 for (int i = 0; (weight > 0.001) && (i <= (int)detail); i++) { \
194 if (weight > 1.0) { \
198 float signal = (safe_snoise(p) + offset) * pwr; \
200 value += weight * signal; \
201 weight *= gain * signal; \
205 float rmd = detail - floor(detail); \
206 if ((rmd != 0.0) && (weight > 0.001)) { \
207 if (weight > 1.0) { \
210 float signal = (safe_snoise(p) + offset) * pwr; \
211 value += rmd * weight * signal; \
217#define NOISE_RIDGED_MULTI_FRACTAL(T) \
218 float noise_ridged_multi_fractal( \
219 T co, float detail, float roughness, float lacunarity, float offset, float gain) \
222 float pwr = roughness; \
224 float signal = offset - fabs(safe_snoise(p)); \
226 float value = signal; \
227 float weight = 1.0; \
229 for (int i = 1; i <= (int)detail; i++) { \
231 weight = clamp(signal * gain, 0.0, 1.0); \
232 signal = offset - fabs(safe_snoise(p)); \
235 value += signal * pwr; \
draw_view in_light_buf[] float
ccl_device_inline float2 fmod(const float2 a, const float b)
ccl_device_inline float2 fabs(const float2 a)
float safe_snoise(float co)
float safe_noise(float co)
#define NOISE_MULTI_FRACTAL(T)
#define NOISE_HETERO_TERRAIN(T)
#define NOISE_HYBRID_MULTI_FRACTAL(T)
#define NOISE_RIDGED_MULTI_FRACTAL(T)