Blender  V3.3
fractal_noise.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0
2  * Copyright 2011-2022 Blender Foundation */
3 
4 #pragma once
5 
6 #include "kernel/svm/noise.h"
7 
9 
10 /* The fractal_noise_[1-4] functions are all exactly the same except for the input type. */
11 ccl_device_noinline float fractal_noise_1d(float p, float octaves, float roughness)
12 {
13  float fscale = 1.0f;
14  float amp = 1.0f;
15  float maxamp = 0.0f;
16  float sum = 0.0f;
17  octaves = clamp(octaves, 0.0f, 15.0f);
18  int n = float_to_int(octaves);
19  for (int i = 0; i <= n; i++) {
20  float t = noise_1d(fscale * p);
21  sum += t * amp;
22  maxamp += amp;
23  amp *= clamp(roughness, 0.0f, 1.0f);
24  fscale *= 2.0f;
25  }
26  float rmd = octaves - floorf(octaves);
27  if (rmd != 0.0f) {
28  float t = noise_1d(fscale * p);
29  float sum2 = sum + t * amp;
30  sum /= maxamp;
31  sum2 /= maxamp + amp;
32  return (1.0f - rmd) * sum + rmd * sum2;
33  }
34  else {
35  return sum / maxamp;
36  }
37 }
38 
39 /* The fractal_noise_[1-4] functions are all exactly the same except for the input type. */
40 ccl_device_noinline float fractal_noise_2d(float2 p, float octaves, float roughness)
41 {
42  float fscale = 1.0f;
43  float amp = 1.0f;
44  float maxamp = 0.0f;
45  float sum = 0.0f;
46  octaves = clamp(octaves, 0.0f, 15.0f);
47  int n = float_to_int(octaves);
48  for (int i = 0; i <= n; i++) {
49  float t = noise_2d(fscale * p);
50  sum += t * amp;
51  maxamp += amp;
52  amp *= clamp(roughness, 0.0f, 1.0f);
53  fscale *= 2.0f;
54  }
55  float rmd = octaves - floorf(octaves);
56  if (rmd != 0.0f) {
57  float t = noise_2d(fscale * p);
58  float sum2 = sum + t * amp;
59  sum /= maxamp;
60  sum2 /= maxamp + amp;
61  return (1.0f - rmd) * sum + rmd * sum2;
62  }
63  else {
64  return sum / maxamp;
65  }
66 }
67 
68 /* The fractal_noise_[1-4] functions are all exactly the same except for the input type. */
69 ccl_device_noinline float fractal_noise_3d(float3 p, float octaves, float roughness)
70 {
71  float fscale = 1.0f;
72  float amp = 1.0f;
73  float maxamp = 0.0f;
74  float sum = 0.0f;
75  octaves = clamp(octaves, 0.0f, 15.0f);
76  int n = float_to_int(octaves);
77  for (int i = 0; i <= n; i++) {
78  float t = noise_3d(fscale * p);
79  sum += t * amp;
80  maxamp += amp;
81  amp *= clamp(roughness, 0.0f, 1.0f);
82  fscale *= 2.0f;
83  }
84  float rmd = octaves - floorf(octaves);
85  if (rmd != 0.0f) {
86  float t = noise_3d(fscale * p);
87  float sum2 = sum + t * amp;
88  sum /= maxamp;
89  sum2 /= maxamp + amp;
90  return (1.0f - rmd) * sum + rmd * sum2;
91  }
92  else {
93  return sum / maxamp;
94  }
95 }
96 
97 /* The fractal_noise_[1-4] functions are all exactly the same except for the input type. */
98 ccl_device_noinline float fractal_noise_4d(float4 p, float octaves, float roughness)
99 {
100  float fscale = 1.0f;
101  float amp = 1.0f;
102  float maxamp = 0.0f;
103  float sum = 0.0f;
104  octaves = clamp(octaves, 0.0f, 15.0f);
105  int n = float_to_int(octaves);
106  for (int i = 0; i <= n; i++) {
107  float t = noise_4d(fscale * p);
108  sum += t * amp;
109  maxamp += amp;
110  amp *= clamp(roughness, 0.0f, 1.0f);
111  fscale *= 2.0f;
112  }
113  float rmd = octaves - floorf(octaves);
114  if (rmd != 0.0f) {
115  float t = noise_4d(fscale * p);
116  float sum2 = sum + t * amp;
117  sum /= maxamp;
118  sum2 /= maxamp + amp;
119  return (1.0f - rmd) * sum + rmd * sum2;
120  }
121  else {
122  return sum / maxamp;
123  }
124 }
125 
_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 const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
float float4[4]
static T sum(const btAlignedObjectArray< T > &items)
#define ccl_device_noinline
Definition: cuda/compat.h:40
#define CCL_NAMESPACE_END
Definition: cuda/compat.h:9
ccl_device_noinline float fractal_noise_4d(float4 p, float octaves, float roughness)
Definition: fractal_noise.h:98
ccl_device_noinline float fractal_noise_2d(float2 p, float octaves, float roughness)
Definition: fractal_noise.h:40
ccl_device_noinline float fractal_noise_3d(float3 p, float octaves, float roughness)
Definition: fractal_noise.h:69
CCL_NAMESPACE_BEGIN ccl_device_noinline float fractal_noise_1d(float p, float octaves, float roughness)
Definition: fractal_noise.h:11
#define floorf(x)
Definition: metal/compat.h:224
T clamp(const T &a, const T &min, const T &max)
static const pxr::TfToken roughness("roughness", pxr::TfToken::Immortal)
ccl_device_inline float noise_2d(float2 p)
Definition: noise.h:695
ccl_device_inline float noise_3d(float3 p)
Definition: noise.h:705
ccl_device_inline float noise_4d(float4 p)
Definition: noise.h:715
ccl_device_inline float noise_1d(float p)
Definition: noise.h:685
ccl_device_inline int float_to_int(float f)
Definition: util/math.h:410