Cycles: constant folding for RGB/Vector Curves and Color Ramp.
[blender.git] / intern / cycles / kernel / shaders / node_voxel_texture.osl
1 /*
2  * Copyright 2011-2015 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
19 shader node_voxel_texture(
20         string filename = "",
21         string interpolation = "linear",
22         int use_mapping = 0,
23         matrix mapping = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
24         point Vector = P,
25         output float Density = 0,
26         output color Color = 0)
27 {
28         point p = Vector;
29         if (use_mapping) {
30                 p = transform(mapping, p);
31         }
32         else {
33                 p = transform("object", Vector);
34                 matrix tfm;
35                 if (getattribute("geom:generated_transform", tfm))
36                         p = transform(tfm, p);
37         }
38         if (p[0] < 0.0 || p[1] < 0.0 || p[2] < 0.0 ||
39             p[0] > 1.0 || p[1] > 1.0 || p[2] > 1.0)
40         {
41                 Density = 0;
42                 Color = color(0, 0, 0);
43         }
44         else {
45                 Color = (color)texture3d(filename, p, "wrap", "periodic", "interp", interpolation, "alpha", Density);
46         }
47 }