Cycles: constant folding for RGB/Vector Curves and Color Ramp.
[blender.git] / intern / cycles / kernel / shaders / node_noise_texture.osl
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
17 #include "stdosl.h"
18 #include "node_texture.h"
19
20 /* Noise */
21
22 float noise(point p, float distortion, float detail, float fac, color Color)
23 {
24         point r;
25         int hard = 0;
26
27         if (distortion != 0.0) {
28                 r[0] = safe_noise(p + point(13.5), "unsigned") * distortion;
29                 r[1] = safe_noise(p, "unsigned") * distortion;
30                 r[2] = safe_noise(p - point(13.5), "unsigned") * distortion;
31                 
32                 p += r;
33         }
34
35         fac = noise_turbulence(p, detail, hard);
36         
37         Color = color(fac, noise_turbulence(point(p[1], p[0], p[2]), detail, hard),
38                 noise_turbulence(point(p[1], p[2], p[0]), detail, hard));
39
40         return fac;
41 }
42
43 shader node_noise_texture(
44         int use_mapping = 0,
45         matrix mapping = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
46         float Distortion = 0.0,
47         float Scale = 5.0,
48         float Detail = 2.0,
49         point Vector = P,
50         output float Fac = 0.0,
51         output color Color = 0.0)
52 {
53         point p = Vector;
54
55         if (use_mapping)
56                 p = transform(mapping, p);
57
58         Fac = noise(p * Scale, Distortion, Detail, Fac, Color);
59 }
60