Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/nodes.cpp')
-rw-r--r--intern/cycles/render/nodes.cpp65
1 files changed, 57 insertions, 8 deletions
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 82afab4dc1a..48a8565ed98 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -100,6 +100,16 @@ void TextureMapping::compile(SVMCompiler& compiler, int offset_in, int offset_ou
}
}
+void TextureMapping::compile(OSLCompiler &compiler)
+{
+ if(!skip()) {
+ Transform tfm = transform_transpose(compute_transform());
+
+ compiler.parameter("mapping", tfm);
+ compiler.parameter("use_mapping", 1);
+ }
+}
+
/* Image Texture */
static ShaderEnum color_space_init()
@@ -130,11 +140,12 @@ ImageTextureNode::ImageTextureNode()
{
image_manager = NULL;
slot = -1;
- is_float = false;
+ is_float = -1;
filename = "";
color_space = ustring("Color");
projection = ustring("Flat");;
projection_blend = 0.0f;
+ animated = false;
add_input("Vector", SHADER_SOCKET_POINT, ShaderInput::TEXTURE_UV);
add_output("Color", SHADER_SOCKET_COLOR);
@@ -152,7 +163,7 @@ ShaderNode *ImageTextureNode::clone() const
ImageTextureNode *node = new ImageTextureNode(*this);
node->image_manager = NULL;
node->slot = -1;
- node->is_float = false;
+ node->is_float = -1;
return node;
}
@@ -163,8 +174,11 @@ void ImageTextureNode::compile(SVMCompiler& compiler)
ShaderOutput *alpha_out = output("Alpha");
image_manager = compiler.image_manager;
- if(slot == -1)
- slot = image_manager->add_image(filename, is_float);
+ if(is_float == -1) {
+ bool is_float_bool;
+ slot = image_manager->add_image(filename, animated, is_float_bool);
+ is_float = (int)is_float_bool;
+ }
if(!color_out->links.empty())
compiler.stack_assign(color_out);
@@ -220,6 +234,11 @@ void ImageTextureNode::compile(SVMCompiler& compiler)
void ImageTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
+ if(is_float == -1)
+ is_float = (int)image_manager->is_float_image(filename);
+
compiler.parameter("filename", filename.c_str());
if(is_float || color_space != "Color")
compiler.parameter("color_space", "Linear");
@@ -250,10 +269,11 @@ EnvironmentTextureNode::EnvironmentTextureNode()
{
image_manager = NULL;
slot = -1;
- is_float = false;
+ is_float = -1;
filename = "";
color_space = ustring("Color");
projection = ustring("Equirectangular");
+ animated = false;
add_input("Vector", SHADER_SOCKET_VECTOR, ShaderInput::POSITION);
add_output("Color", SHADER_SOCKET_COLOR);
@@ -271,7 +291,7 @@ ShaderNode *EnvironmentTextureNode::clone() const
EnvironmentTextureNode *node = new EnvironmentTextureNode(*this);
node->image_manager = NULL;
node->slot = -1;
- node->is_float = false;
+ node->is_float = -1;
return node;
}
@@ -282,8 +302,11 @@ void EnvironmentTextureNode::compile(SVMCompiler& compiler)
ShaderOutput *alpha_out = output("Alpha");
image_manager = compiler.image_manager;
- if(slot == -1)
- slot = image_manager->add_image(filename, is_float);
+ if(slot == -1) {
+ bool is_float_bool;
+ slot = image_manager->add_image(filename, animated, is_float_bool);
+ is_float = (int)is_float_bool;
+ }
if(!color_out->links.empty())
compiler.stack_assign(color_out);
@@ -328,7 +351,13 @@ void EnvironmentTextureNode::compile(SVMCompiler& compiler)
void EnvironmentTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
+ if(is_float == -1)
+ is_float = (int)image_manager->is_float_image(filename);
+
compiler.parameter("filename", filename.c_str());
+ compiler.parameter("projection", projection);
if(is_float || color_space != "Color")
compiler.parameter("color_space", "Linear");
else
@@ -438,6 +467,8 @@ void SkyTextureNode::compile(SVMCompiler& compiler)
void SkyTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter_vector("sun_direction", sun_direction);
compiler.parameter("turbidity", turbidity);
compiler.add(this, "node_sky_texture");
@@ -501,6 +532,8 @@ void GradientTextureNode::compile(SVMCompiler& compiler)
void GradientTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter("Type", type);
compiler.add(this, "node_gradient_texture");
}
@@ -559,6 +592,8 @@ void NoiseTextureNode::compile(SVMCompiler& compiler)
void NoiseTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.add(this, "node_noise_texture");
}
@@ -619,6 +654,8 @@ void VoronoiTextureNode::compile(SVMCompiler& compiler)
void VoronoiTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter("Coloring", coloring);
compiler.add(this, "node_voronoi_texture");
}
@@ -706,6 +743,8 @@ void MusgraveTextureNode::compile(SVMCompiler& compiler)
void MusgraveTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter("Type", type);
compiler.add(this, "node_musgrave_texture");
@@ -784,6 +823,8 @@ void WaveTextureNode::compile(SVMCompiler& compiler)
void WaveTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter("Type", type);
compiler.add(this, "node_wave_texture");
@@ -841,6 +882,8 @@ void MagicTextureNode::compile(SVMCompiler& compiler)
void MagicTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter("Depth", depth);
compiler.add(this, "node_magic_texture");
}
@@ -897,6 +940,8 @@ void CheckerTextureNode::compile(SVMCompiler& compiler)
void CheckerTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.add(this, "node_checker_texture");
}
@@ -985,6 +1030,8 @@ void BrickTextureNode::compile(SVMCompiler& compiler)
void BrickTextureNode::compile(OSLCompiler& compiler)
{
+ tex_mapping.compile(compiler);
+
compiler.parameter("Offset", offset);
compiler.parameter("OffsetFrequency", offset_frequency);
compiler.parameter("Squash", squash);
@@ -1578,6 +1625,8 @@ void HoldoutNode::compile(OSLCompiler& compiler)
AmbientOcclusionNode::AmbientOcclusionNode()
: ShaderNode("ambient_occlusion")
{
+ add_input("NormalIn", SHADER_SOCKET_NORMAL, ShaderInput::NORMAL, true);
+
add_input("Color", SHADER_SOCKET_COLOR, make_float3(0.8f, 0.8f, 0.8f));
add_output("AO", SHADER_SOCKET_CLOSURE);
}