Blender  V2.93
svm_musgrave.h
Go to the documentation of this file.
1 /*
2  * Copyright 2011-2013 Blender Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
18 
19 /* 1D Musgrave fBm
20  *
21  * H: fractal increment parameter
22  * lacunarity: gap between successive frequencies
23  * octaves: number of frequencies in the fBm
24  *
25  * from "Texturing and Modelling: A procedural approach"
26  */
27 
29  float H,
30  float lacunarity,
31  float octaves)
32 {
33  float p = co;
34  float value = 0.0f;
35  float pwr = 1.0f;
36  float pwHL = powf(lacunarity, -H);
37 
38  for (int i = 0; i < float_to_int(octaves); i++) {
39  value += snoise_1d(p) * pwr;
40  pwr *= pwHL;
41  p *= lacunarity;
42  }
43 
44  float rmd = octaves - floorf(octaves);
45  if (rmd != 0.0f) {
46  value += rmd * snoise_1d(p) * pwr;
47  }
48 
49  return value;
50 }
51 
52 /* 1D Musgrave Multifractal
53  *
54  * H: highest fractal dimension
55  * lacunarity: gap between successive frequencies
56  * octaves: number of frequencies in the fBm
57  */
58 
60  float H,
61  float lacunarity,
62  float octaves)
63 {
64  float p = co;
65  float value = 1.0f;
66  float pwr = 1.0f;
67  float pwHL = powf(lacunarity, -H);
68 
69  for (int i = 0; i < float_to_int(octaves); i++) {
70  value *= (pwr * snoise_1d(p) + 1.0f);
71  pwr *= pwHL;
72  p *= lacunarity;
73  }
74 
75  float rmd = octaves - floorf(octaves);
76  if (rmd != 0.0f) {
77  value *= (rmd * pwr * snoise_1d(p) + 1.0f); /* correct? */
78  }
79 
80  return value;
81 }
82 
83 /* 1D Musgrave Heterogeneous Terrain
84  *
85  * H: fractal dimension of the roughest area
86  * lacunarity: gap between successive frequencies
87  * octaves: number of frequencies in the fBm
88  * offset: raises the terrain from `sea level'
89  */
90 
92  float co, float H, float lacunarity, float octaves, float offset)
93 {
94  float p = co;
95  float pwHL = powf(lacunarity, -H);
96  float pwr = pwHL;
97 
98  /* first unscaled octave of function; later octaves are scaled */
99  float value = offset + snoise_1d(p);
100  p *= lacunarity;
101 
102  for (int i = 1; i < float_to_int(octaves); i++) {
103  float increment = (snoise_1d(p) + offset) * pwr * value;
104  value += increment;
105  pwr *= pwHL;
106  p *= lacunarity;
107  }
108 
109  float rmd = octaves - floorf(octaves);
110  if (rmd != 0.0f) {
111  float increment = (snoise_1d(p) + offset) * pwr * value;
112  value += rmd * increment;
113  }
114 
115  return value;
116 }
117 
118 /* 1D Hybrid Additive/Multiplicative Multifractal Terrain
119  *
120  * H: fractal dimension of the roughest area
121  * lacunarity: gap between successive frequencies
122  * octaves: number of frequencies in the fBm
123  * offset: raises the terrain from `sea level'
124  */
125 
127  float co, float H, float lacunarity, float octaves, float offset, float gain)
128 {
129  float p = co;
130  float pwHL = powf(lacunarity, -H);
131  float pwr = pwHL;
132 
133  float value = snoise_1d(p) + offset;
134  float weight = gain * value;
135  p *= lacunarity;
136 
137  for (int i = 1; (weight > 0.001f) && (i < float_to_int(octaves)); i++) {
138  if (weight > 1.0f) {
139  weight = 1.0f;
140  }
141 
142  float signal = (snoise_1d(p) + offset) * pwr;
143  pwr *= pwHL;
144  value += weight * signal;
145  weight *= gain * signal;
146  p *= lacunarity;
147  }
148 
149  float rmd = octaves - floorf(octaves);
150  if (rmd != 0.0f) {
151  value += rmd * ((snoise_1d(p) + offset) * pwr);
152  }
153 
154  return value;
155 }
156 
157 /* 1D Ridged Multifractal Terrain
158  *
159  * H: fractal dimension of the roughest area
160  * lacunarity: gap between successive frequencies
161  * octaves: number of frequencies in the fBm
162  * offset: raises the terrain from `sea level'
163  */
164 
166  float co, float H, float lacunarity, float octaves, float offset, float gain)
167 {
168  float p = co;
169  float pwHL = powf(lacunarity, -H);
170  float pwr = pwHL;
171 
172  float signal = offset - fabsf(snoise_1d(p));
173  signal *= signal;
174  float value = signal;
175  float weight = 1.0f;
176 
177  for (int i = 1; i < float_to_int(octaves); i++) {
178  p *= lacunarity;
179  weight = saturate(signal * gain);
180  signal = offset - fabsf(snoise_1d(p));
181  signal *= signal;
182  signal *= weight;
183  value += signal * pwr;
184  pwr *= pwHL;
185  }
186 
187  return value;
188 }
189 
190 /* 2D Musgrave fBm
191  *
192  * H: fractal increment parameter
193  * lacunarity: gap between successive frequencies
194  * octaves: number of frequencies in the fBm
195  *
196  * from "Texturing and Modelling: A procedural approach"
197  */
198 
200  float H,
201  float lacunarity,
202  float octaves)
203 {
204  float2 p = co;
205  float value = 0.0f;
206  float pwr = 1.0f;
207  float pwHL = powf(lacunarity, -H);
208 
209  for (int i = 0; i < float_to_int(octaves); i++) {
210  value += snoise_2d(p) * pwr;
211  pwr *= pwHL;
212  p *= lacunarity;
213  }
214 
215  float rmd = octaves - floorf(octaves);
216  if (rmd != 0.0f) {
217  value += rmd * snoise_2d(p) * pwr;
218  }
219 
220  return value;
221 }
222 
223 /* 2D Musgrave Multifractal
224  *
225  * H: highest fractal dimension
226  * lacunarity: gap between successive frequencies
227  * octaves: number of frequencies in the fBm
228  */
229 
231  float H,
232  float lacunarity,
233  float octaves)
234 {
235  float2 p = co;
236  float value = 1.0f;
237  float pwr = 1.0f;
238  float pwHL = powf(lacunarity, -H);
239 
240  for (int i = 0; i < float_to_int(octaves); i++) {
241  value *= (pwr * snoise_2d(p) + 1.0f);
242  pwr *= pwHL;
243  p *= lacunarity;
244  }
245 
246  float rmd = octaves - floorf(octaves);
247  if (rmd != 0.0f) {
248  value *= (rmd * pwr * snoise_2d(p) + 1.0f); /* correct? */
249  }
250 
251  return value;
252 }
253 
254 /* 2D Musgrave Heterogeneous Terrain
255  *
256  * H: fractal dimension of the roughest area
257  * lacunarity: gap between successive frequencies
258  * octaves: number of frequencies in the fBm
259  * offset: raises the terrain from `sea level'
260  */
261 
263  float2 co, float H, float lacunarity, float octaves, float offset)
264 {
265  float2 p = co;
266  float pwHL = powf(lacunarity, -H);
267  float pwr = pwHL;
268 
269  /* first unscaled octave of function; later octaves are scaled */
270  float value = offset + snoise_2d(p);
271  p *= lacunarity;
272 
273  for (int i = 1; i < float_to_int(octaves); i++) {
274  float increment = (snoise_2d(p) + offset) * pwr * value;
275  value += increment;
276  pwr *= pwHL;
277  p *= lacunarity;
278  }
279 
280  float rmd = octaves - floorf(octaves);
281  if (rmd != 0.0f) {
282  float increment = (snoise_2d(p) + offset) * pwr * value;
283  value += rmd * increment;
284  }
285 
286  return value;
287 }
288 
289 /* 2D Hybrid Additive/Multiplicative Multifractal Terrain
290  *
291  * H: fractal dimension of the roughest area
292  * lacunarity: gap between successive frequencies
293  * octaves: number of frequencies in the fBm
294  * offset: raises the terrain from `sea level'
295  */
296 
298  float2 co, float H, float lacunarity, float octaves, float offset, float gain)
299 {
300  float2 p = co;
301  float pwHL = powf(lacunarity, -H);
302  float pwr = pwHL;
303 
304  float value = snoise_2d(p) + offset;
305  float weight = gain * value;
306  p *= lacunarity;
307 
308  for (int i = 1; (weight > 0.001f) && (i < float_to_int(octaves)); i++) {
309  if (weight > 1.0f) {
310  weight = 1.0f;
311  }
312 
313  float signal = (snoise_2d(p) + offset) * pwr;
314  pwr *= pwHL;
315  value += weight * signal;
316  weight *= gain * signal;
317  p *= lacunarity;
318  }
319 
320  float rmd = octaves - floorf(octaves);
321  if (rmd != 0.0f) {
322  value += rmd * ((snoise_2d(p) + offset) * pwr);
323  }
324 
325  return value;
326 }
327 
328 /* 2D Ridged Multifractal Terrain
329  *
330  * H: fractal dimension of the roughest area
331  * lacunarity: gap between successive frequencies
332  * octaves: number of frequencies in the fBm
333  * offset: raises the terrain from `sea level'
334  */
335 
337  float2 co, float H, float lacunarity, float octaves, float offset, float gain)
338 {
339  float2 p = co;
340  float pwHL = powf(lacunarity, -H);
341  float pwr = pwHL;
342 
343  float signal = offset - fabsf(snoise_2d(p));
344  signal *= signal;
345  float value = signal;
346  float weight = 1.0f;
347 
348  for (int i = 1; i < float_to_int(octaves); i++) {
349  p *= lacunarity;
350  weight = saturate(signal * gain);
351  signal = offset - fabsf(snoise_2d(p));
352  signal *= signal;
353  signal *= weight;
354  value += signal * pwr;
355  pwr *= pwHL;
356  }
357 
358  return value;
359 }
360 
361 /* 3D Musgrave fBm
362  *
363  * H: fractal increment parameter
364  * lacunarity: gap between successive frequencies
365  * octaves: number of frequencies in the fBm
366  *
367  * from "Texturing and Modelling: A procedural approach"
368  */
369 
371  float H,
372  float lacunarity,
373  float octaves)
374 {
375  float3 p = co;
376  float value = 0.0f;
377  float pwr = 1.0f;
378  float pwHL = powf(lacunarity, -H);
379 
380  for (int i = 0; i < float_to_int(octaves); i++) {
381  value += snoise_3d(p) * pwr;
382  pwr *= pwHL;
383  p *= lacunarity;
384  }
385 
386  float rmd = octaves - floorf(octaves);
387  if (rmd != 0.0f) {
388  value += rmd * snoise_3d(p) * pwr;
389  }
390 
391  return value;
392 }
393 
394 /* 3D Musgrave Multifractal
395  *
396  * H: highest fractal dimension
397  * lacunarity: gap between successive frequencies
398  * octaves: number of frequencies in the fBm
399  */
400 
402  float H,
403  float lacunarity,
404  float octaves)
405 {
406  float3 p = co;
407  float value = 1.0f;
408  float pwr = 1.0f;
409  float pwHL = powf(lacunarity, -H);
410 
411  for (int i = 0; i < float_to_int(octaves); i++) {
412  value *= (pwr * snoise_3d(p) + 1.0f);
413  pwr *= pwHL;
414  p *= lacunarity;
415  }
416 
417  float rmd = octaves - floorf(octaves);
418  if (rmd != 0.0f) {
419  value *= (rmd * pwr * snoise_3d(p) + 1.0f); /* correct? */
420  }
421 
422  return value;
423 }
424 
425 /* 3D Musgrave Heterogeneous Terrain
426  *
427  * H: fractal dimension of the roughest area
428  * lacunarity: gap between successive frequencies
429  * octaves: number of frequencies in the fBm
430  * offset: raises the terrain from `sea level'
431  */
432 
434  float3 co, float H, float lacunarity, float octaves, float offset)
435 {
436  float3 p = co;
437  float pwHL = powf(lacunarity, -H);
438  float pwr = pwHL;
439 
440  /* first unscaled octave of function; later octaves are scaled */
441  float value = offset + snoise_3d(p);
442  p *= lacunarity;
443 
444  for (int i = 1; i < float_to_int(octaves); i++) {
445  float increment = (snoise_3d(p) + offset) * pwr * value;
446  value += increment;
447  pwr *= pwHL;
448  p *= lacunarity;
449  }
450 
451  float rmd = octaves - floorf(octaves);
452  if (rmd != 0.0f) {
453  float increment = (snoise_3d(p) + offset) * pwr * value;
454  value += rmd * increment;
455  }
456 
457  return value;
458 }
459 
460 /* 3D Hybrid Additive/Multiplicative Multifractal Terrain
461  *
462  * H: fractal dimension of the roughest area
463  * lacunarity: gap between successive frequencies
464  * octaves: number of frequencies in the fBm
465  * offset: raises the terrain from `sea level'
466  */
467 
469  float3 co, float H, float lacunarity, float octaves, float offset, float gain)
470 {
471  float3 p = co;
472  float pwHL = powf(lacunarity, -H);
473  float pwr = pwHL;
474 
475  float value = snoise_3d(p) + offset;
476  float weight = gain * value;
477  p *= lacunarity;
478 
479  for (int i = 1; (weight > 0.001f) && (i < float_to_int(octaves)); i++) {
480  if (weight > 1.0f) {
481  weight = 1.0f;
482  }
483 
484  float signal = (snoise_3d(p) + offset) * pwr;
485  pwr *= pwHL;
486  value += weight * signal;
487  weight *= gain * signal;
488  p *= lacunarity;
489  }
490 
491  float rmd = octaves - floorf(octaves);
492  if (rmd != 0.0f) {
493  value += rmd * ((snoise_3d(p) + offset) * pwr);
494  }
495 
496  return value;
497 }
498 
499 /* 3D Ridged Multifractal Terrain
500  *
501  * H: fractal dimension of the roughest area
502  * lacunarity: gap between successive frequencies
503  * octaves: number of frequencies in the fBm
504  * offset: raises the terrain from `sea level'
505  */
506 
508  float3 co, float H, float lacunarity, float octaves, float offset, float gain)
509 {
510  float3 p = co;
511  float pwHL = powf(lacunarity, -H);
512  float pwr = pwHL;
513 
514  float signal = offset - fabsf(snoise_3d(p));
515  signal *= signal;
516  float value = signal;
517  float weight = 1.0f;
518 
519  for (int i = 1; i < float_to_int(octaves); i++) {
520  p *= lacunarity;
521  weight = saturate(signal * gain);
522  signal = offset - fabsf(snoise_3d(p));
523  signal *= signal;
524  signal *= weight;
525  value += signal * pwr;
526  pwr *= pwHL;
527  }
528 
529  return value;
530 }
531 
532 /* 4D Musgrave fBm
533  *
534  * H: fractal increment parameter
535  * lacunarity: gap between successive frequencies
536  * octaves: number of frequencies in the fBm
537  *
538  * from "Texturing and Modelling: A procedural approach"
539  */
540 
542  float H,
543  float lacunarity,
544  float octaves)
545 {
546  float4 p = co;
547  float value = 0.0f;
548  float pwr = 1.0f;
549  float pwHL = powf(lacunarity, -H);
550 
551  for (int i = 0; i < float_to_int(octaves); i++) {
552  value += snoise_4d(p) * pwr;
553  pwr *= pwHL;
554  p *= lacunarity;
555  }
556 
557  float rmd = octaves - floorf(octaves);
558  if (rmd != 0.0f) {
559  value += rmd * snoise_4d(p) * pwr;
560  }
561 
562  return value;
563 }
564 
565 /* 4D Musgrave Multifractal
566  *
567  * H: highest fractal dimension
568  * lacunarity: gap between successive frequencies
569  * octaves: number of frequencies in the fBm
570  */
571 
573  float H,
574  float lacunarity,
575  float octaves)
576 {
577  float4 p = co;
578  float value = 1.0f;
579  float pwr = 1.0f;
580  float pwHL = powf(lacunarity, -H);
581 
582  for (int i = 0; i < float_to_int(octaves); i++) {
583  value *= (pwr * snoise_4d(p) + 1.0f);
584  pwr *= pwHL;
585  p *= lacunarity;
586  }
587 
588  float rmd = octaves - floorf(octaves);
589  if (rmd != 0.0f) {
590  value *= (rmd * pwr * snoise_4d(p) + 1.0f); /* correct? */
591  }
592 
593  return value;
594 }
595 
596 /* 4D Musgrave Heterogeneous Terrain
597  *
598  * H: fractal dimension of the roughest area
599  * lacunarity: gap between successive frequencies
600  * octaves: number of frequencies in the fBm
601  * offset: raises the terrain from `sea level'
602  */
603 
605  float4 co, float H, float lacunarity, float octaves, float offset)
606 {
607  float4 p = co;
608  float pwHL = powf(lacunarity, -H);
609  float pwr = pwHL;
610 
611  /* first unscaled octave of function; later octaves are scaled */
612  float value = offset + snoise_4d(p);
613  p *= lacunarity;
614 
615  for (int i = 1; i < float_to_int(octaves); i++) {
616  float increment = (snoise_4d(p) + offset) * pwr * value;
617  value += increment;
618  pwr *= pwHL;
619  p *= lacunarity;
620  }
621 
622  float rmd = octaves - floorf(octaves);
623  if (rmd != 0.0f) {
624  float increment = (snoise_4d(p) + offset) * pwr * value;
625  value += rmd * increment;
626  }
627 
628  return value;
629 }
630 
631 /* 4D Hybrid Additive/Multiplicative Multifractal Terrain
632  *
633  * H: fractal dimension of the roughest area
634  * lacunarity: gap between successive frequencies
635  * octaves: number of frequencies in the fBm
636  * offset: raises the terrain from `sea level'
637  */
638 
640  float4 co, float H, float lacunarity, float octaves, float offset, float gain)
641 {
642  float4 p = co;
643  float pwHL = powf(lacunarity, -H);
644  float pwr = pwHL;
645 
646  float value = snoise_4d(p) + offset;
647  float weight = gain * value;
648  p *= lacunarity;
649 
650  for (int i = 1; (weight > 0.001f) && (i < float_to_int(octaves)); i++) {
651  if (weight > 1.0f) {
652  weight = 1.0f;
653  }
654 
655  float signal = (snoise_4d(p) + offset) * pwr;
656  pwr *= pwHL;
657  value += weight * signal;
658  weight *= gain * signal;
659  p *= lacunarity;
660  }
661 
662  float rmd = octaves - floorf(octaves);
663  if (rmd != 0.0f) {
664  value += rmd * ((snoise_4d(p) + offset) * pwr);
665  }
666 
667  return value;
668 }
669 
670 /* 4D Ridged Multifractal Terrain
671  *
672  * H: fractal dimension of the roughest area
673  * lacunarity: gap between successive frequencies
674  * octaves: number of frequencies in the fBm
675  * offset: raises the terrain from `sea level'
676  */
677 
679  float4 co, float H, float lacunarity, float octaves, float offset, float gain)
680 {
681  float4 p = co;
682  float pwHL = powf(lacunarity, -H);
683  float pwr = pwHL;
684 
685  float signal = offset - fabsf(snoise_4d(p));
686  signal *= signal;
687  float value = signal;
688  float weight = 1.0f;
689 
690  for (int i = 1; i < float_to_int(octaves); i++) {
691  p *= lacunarity;
692  weight = saturate(signal * gain);
693  signal = offset - fabsf(snoise_4d(p));
694  signal *= signal;
695  signal *= weight;
696  value += signal * pwr;
697  pwr *= pwHL;
698  }
699 
700  return value;
701 }
702 
703 ccl_device void svm_node_tex_musgrave(KernelGlobals *kg,
704  ShaderData *sd,
705  float *stack,
706  uint offsets1,
707  uint offsets2,
708  uint offsets3,
709  int *offset)
710 {
711  uint type, dimensions, co_stack_offset, w_stack_offset;
712  uint scale_stack_offset, detail_stack_offset, dimension_stack_offset, lacunarity_stack_offset;
713  uint offset_stack_offset, gain_stack_offset, fac_stack_offset;
714 
715  svm_unpack_node_uchar4(offsets1, &type, &dimensions, &co_stack_offset, &w_stack_offset);
716  svm_unpack_node_uchar4(offsets2,
717  &scale_stack_offset,
718  &detail_stack_offset,
719  &dimension_stack_offset,
720  &lacunarity_stack_offset);
721  svm_unpack_node_uchar3(offsets3, &offset_stack_offset, &gain_stack_offset, &fac_stack_offset);
722 
723  uint4 defaults1 = read_node(kg, offset);
724  uint4 defaults2 = read_node(kg, offset);
725 
726  float3 co = stack_load_float3(stack, co_stack_offset);
727  float w = stack_load_float_default(stack, w_stack_offset, defaults1.x);
728  float scale = stack_load_float_default(stack, scale_stack_offset, defaults1.y);
729  float detail = stack_load_float_default(stack, detail_stack_offset, defaults1.z);
730  float dimension = stack_load_float_default(stack, dimension_stack_offset, defaults1.w);
731  float lacunarity = stack_load_float_default(stack, lacunarity_stack_offset, defaults2.x);
732  float foffset = stack_load_float_default(stack, offset_stack_offset, defaults2.y);
733  float gain = stack_load_float_default(stack, gain_stack_offset, defaults2.z);
734 
735  dimension = fmaxf(dimension, 1e-5f);
736  detail = clamp(detail, 0.0f, 16.0f);
737  lacunarity = fmaxf(lacunarity, 1e-5f);
738 
739  float fac;
740 
741  switch (dimensions) {
742  case 1: {
743  float p = w * scale;
744  switch ((NodeMusgraveType)type) {
746  fac = noise_musgrave_multi_fractal_1d(p, dimension, lacunarity, detail);
747  break;
748  case NODE_MUSGRAVE_FBM:
749  fac = noise_musgrave_fBm_1d(p, dimension, lacunarity, detail);
750  break;
753  p, dimension, lacunarity, detail, foffset, gain);
754  break;
757  p, dimension, lacunarity, detail, foffset, gain);
758  break;
760  fac = noise_musgrave_hetero_terrain_1d(p, dimension, lacunarity, detail, foffset);
761  break;
762  default:
763  fac = 0.0f;
764  }
765  break;
766  }
767  case 2: {
768  float2 p = make_float2(co.x, co.y) * scale;
769  switch ((NodeMusgraveType)type) {
771  fac = noise_musgrave_multi_fractal_2d(p, dimension, lacunarity, detail);
772  break;
773  case NODE_MUSGRAVE_FBM:
774  fac = noise_musgrave_fBm_2d(p, dimension, lacunarity, detail);
775  break;
778  p, dimension, lacunarity, detail, foffset, gain);
779  break;
782  p, dimension, lacunarity, detail, foffset, gain);
783  break;
785  fac = noise_musgrave_hetero_terrain_2d(p, dimension, lacunarity, detail, foffset);
786  break;
787  default:
788  fac = 0.0f;
789  }
790  break;
791  }
792  case 3: {
793  float3 p = co * scale;
794  switch ((NodeMusgraveType)type) {
796  fac = noise_musgrave_multi_fractal_3d(p, dimension, lacunarity, detail);
797  break;
798  case NODE_MUSGRAVE_FBM:
799  fac = noise_musgrave_fBm_3d(p, dimension, lacunarity, detail);
800  break;
803  p, dimension, lacunarity, detail, foffset, gain);
804  break;
807  p, dimension, lacunarity, detail, foffset, gain);
808  break;
810  fac = noise_musgrave_hetero_terrain_3d(p, dimension, lacunarity, detail, foffset);
811  break;
812  default:
813  fac = 0.0f;
814  }
815  break;
816  }
817  case 4: {
818  float4 p = make_float4(co.x, co.y, co.z, w) * scale;
819  switch ((NodeMusgraveType)type) {
821  fac = noise_musgrave_multi_fractal_4d(p, dimension, lacunarity, detail);
822  break;
823  case NODE_MUSGRAVE_FBM:
824  fac = noise_musgrave_fBm_4d(p, dimension, lacunarity, detail);
825  break;
828  p, dimension, lacunarity, detail, foffset, gain);
829  break;
832  p, dimension, lacunarity, detail, foffset, gain);
833  break;
835  fac = noise_musgrave_hetero_terrain_4d(p, dimension, lacunarity, detail, foffset);
836  break;
837  default:
838  fac = 0.0f;
839  }
840  break;
841  }
842  default:
843  fac = 0.0f;
844  }
845 
846  stack_store_float(stack, fac_stack_offset, fac);
847 }
848 
unsigned int uint
Definition: BLI_sys_types.h:83
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btQuadWord.h:119
CCL_NAMESPACE_BEGIN ccl_device_inline float3 stack_load_float3(float *stack, uint a)
ccl_device_inline uint4 read_node(KernelGlobals *kg, int *offset)
ccl_device_inline float stack_load_float_default(float *stack, uint a, uint value)
ccl_device_forceinline void svm_unpack_node_uchar3(uint i, uint *x, uint *y, uint *z)
ccl_device_forceinline void svm_unpack_node_uchar4(uint i, uint *x, uint *y, uint *z, uint *w)
ccl_device_inline void stack_store_float(float *stack, uint a, float f)
#define ccl_device
#define ccl_device_noinline_cpu
#define powf(x, y)
#define CCL_NAMESPACE_END
#define fmaxf(x, y)
#define make_float2(x, y)
#define floorf(x)
#define make_float4(x, y, z, w)
#define fabsf(x)
ShaderData
float z
Definition: sky_float3.h:35
float y
Definition: sky_float3.h:35
float x
Definition: sky_float3.h:35
ccl_device_noinline_cpu float noise_musgrave_hetero_terrain_4d(float4 co, float H, float lacunarity, float octaves, float offset)
Definition: svm_musgrave.h:604
ccl_device_noinline_cpu float noise_musgrave_ridged_multi_fractal_1d(float co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:165
ccl_device_noinline_cpu float noise_musgrave_ridged_multi_fractal_4d(float4 co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:678
ccl_device_noinline_cpu float noise_musgrave_ridged_multi_fractal_2d(float2 co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:336
ccl_device_noinline_cpu float noise_musgrave_multi_fractal_2d(float2 co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:230
ccl_device_noinline_cpu float noise_musgrave_fBm_3d(float3 co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:370
ccl_device_noinline_cpu float noise_musgrave_multi_fractal_1d(float co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:59
ccl_device_noinline_cpu float noise_musgrave_multi_fractal_3d(float3 co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:401
ccl_device_noinline_cpu float noise_musgrave_hetero_terrain_3d(float3 co, float H, float lacunarity, float octaves, float offset)
Definition: svm_musgrave.h:433
ccl_device_noinline_cpu float noise_musgrave_fBm_2d(float2 co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:199
ccl_device_noinline_cpu float noise_musgrave_hybrid_multi_fractal_2d(float2 co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:297
ccl_device_noinline_cpu float noise_musgrave_multi_fractal_4d(float4 co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:572
ccl_device_noinline_cpu float noise_musgrave_ridged_multi_fractal_3d(float3 co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:507
ccl_device_noinline_cpu float noise_musgrave_hybrid_multi_fractal_1d(float co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:126
ccl_device_noinline_cpu float noise_musgrave_hybrid_multi_fractal_3d(float3 co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:468
ccl_device_noinline_cpu float noise_musgrave_hetero_terrain_1d(float co, float H, float lacunarity, float octaves, float offset)
Definition: svm_musgrave.h:91
ccl_device_noinline_cpu float noise_musgrave_hetero_terrain_2d(float2 co, float H, float lacunarity, float octaves, float offset)
Definition: svm_musgrave.h:262
ccl_device_noinline_cpu float noise_musgrave_fBm_4d(float4 co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:541
ccl_device void svm_node_tex_musgrave(KernelGlobals *kg, ShaderData *sd, float *stack, uint offsets1, uint offsets2, uint offsets3, int *offset)
Definition: svm_musgrave.h:703
CCL_NAMESPACE_BEGIN ccl_device_noinline_cpu float noise_musgrave_fBm_1d(float co, float H, float lacunarity, float octaves)
Definition: svm_musgrave.h:28
ccl_device_noinline_cpu float noise_musgrave_hybrid_multi_fractal_4d(float4 co, float H, float lacunarity, float octaves, float offset, float gain)
Definition: svm_musgrave.h:639
ccl_device_inline float snoise_1d(float p)
Definition: svm_noise.h:702
ccl_device_inline float snoise_2d(float2 p)
Definition: svm_noise.h:712
ccl_device_inline float snoise_3d(float3 p)
Definition: svm_noise.h:722
ccl_device_inline float snoise_4d(float4 p)
Definition: svm_noise.h:732
NodeMusgraveType
Definition: svm_types.h:396
@ NODE_MUSGRAVE_MULTIFRACTAL
Definition: svm_types.h:397
@ NODE_MUSGRAVE_RIDGED_MULTIFRACTAL
Definition: svm_types.h:400
@ NODE_MUSGRAVE_HYBRID_MULTIFRACTAL
Definition: svm_types.h:399
@ NODE_MUSGRAVE_HETERO_TERRAIN
Definition: svm_types.h:401
@ NODE_MUSGRAVE_FBM
Definition: svm_types.h:398
ccl_device_inline float saturate(float a)
Definition: util_math.h:315
ccl_device_inline int float_to_int(float f)
Definition: util_math.h:321
ccl_device_inline int clamp(int a, int mn, int mx)
Definition: util_math.h:283
#define H(x, y, z)