Cycles: svn merge -r41225:41232 ^/trunk/blender
[blender.git] / intern / cycles / kernel / osl / nodes / node_marble_texture.osl
1 /*
2  * Copyright 2011, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  */
18
19 #include "stdosl.h"
20 #include "node_texture.h"
21
22 /* Marble */
23
24 float marble(point p, float size, string type, string wave, string basis, int hard, float turb, int depth)
25 {
26         float x = p[0];
27         float y = p[1];
28         float z = p[2];
29
30     float n = 5.0 * (x + y + z);
31
32         float mi = n + turb * noise_turbulence(p/size, basis, depth, hard);
33
34         mi = noise_wave(wave, mi);
35
36         if(type == "Sharp")
37                 mi = sqrt(mi);
38         else if(type == "Sharper")
39                 mi = sqrt(sqrt(mi));
40
41     return mi;
42 }
43
44 shader node_marble_texture(
45         string Type = "Soft",
46         string Wave = "Sine",
47         string Basis = "Perlin",
48         int Hard = 0,
49         float Size = 0.25,
50         float Turbulence = 5.0,
51         int Depth = 2,
52         point Vector = P,
53         output float Fac = 0.0)
54 {
55         float size = nonzero(Size, 1e-5);
56         Fac = marble(Vector, size, Type, Wave, Basis, Hard, Turbulence, Depth);
57 }
58