Merge branch 'master' into blender2.8
[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 ip, float distortion, float detail, output color Color)
23 {
24         point r;
25         point p = ip;
26         int hard = 0;
27
28         if (distortion != 0.0) {
29                 r[0] = safe_noise(p + point(13.5), "unsigned") * distortion;
30                 r[1] = safe_noise(p, "unsigned") * distortion;
31                 r[2] = safe_noise(p - point(13.5), "unsigned") * distortion;
32                 
33                 p += r;
34         }
35
36         float fac = noise_turbulence(p, detail, hard);
37         
38         Color = color(fac, noise_turbulence(point(p[1], p[0], p[2]), detail, hard),
39                 noise_turbulence(point(p[1], p[2], p[0]), detail, hard));
40
41         return fac;
42 }
43
44 shader node_noise_texture(
45         int use_mapping = 0,
46         matrix mapping = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
47         float Distortion = 0.0,
48         float Scale = 5.0,
49         float Detail = 2.0,
50         point Vector = P,
51         output float Fac = 0.0,
52         output color Color = 0.0)
53 {
54         point p = Vector;
55
56         if (use_mapping)
57                 p = transform(mapping, p);
58
59         Fac = noise(p * Scale, Distortion, Detail, Color);
60 }
61