da376e0237
Cycles uses code from some great open source projects, many thanks them: * BVH building and traversal code from NVidia's "Understanding the Efficiency of Ray Traversal on GPUs": http://code.google.com/p/understanding-the-efficiency-of-ray-traversal-on-gpus/ * Open Shading Language for a large part of the shading system: http://code.google.com/p/openshadinglanguage/ * Blender for procedural textures and a few other nodes. * Approximate Catmull Clark subdivision from NVidia Mesh tools: http://code.google.com/p/nvidia-mesh-tools/ * Sobol direction vectors from: http://web.maths.unsw.edu.au/~fkuo/sobol/ * Film response functions from: http://www.cs.columbia.edu/CAVE/software/softlib/dorf.php
340 lines
6.2 KiB
C++
340 lines
6.2 KiB
C++
/*
|
|
* Copyright 2011, Blender Foundation.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef __NODES_H__
|
|
#define __NODES_H__
|
|
|
|
#include "graph.h"
|
|
|
|
#include "util_string.h"
|
|
|
|
CCL_NAMESPACE_BEGIN
|
|
|
|
class ImageManager;
|
|
class Shadr;
|
|
|
|
/* Nodes */
|
|
|
|
class ImageTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_NO_CLONE_CLASS(ImageTextureNode)
|
|
~ImageTextureNode();
|
|
ShaderNode *clone() const;
|
|
|
|
ImageManager *image_manager;
|
|
int slot;
|
|
string filename;
|
|
};
|
|
|
|
class EnvironmentTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode)
|
|
~EnvironmentTextureNode();
|
|
ShaderNode *clone() const;
|
|
|
|
ImageManager *image_manager;
|
|
int slot;
|
|
string filename;
|
|
};
|
|
|
|
class SkyTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(SkyTextureNode)
|
|
|
|
float3 sun_direction;
|
|
float turbidity;
|
|
};
|
|
|
|
class OutputNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(OutputNode)
|
|
};
|
|
|
|
class NoiseTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(NoiseTextureNode)
|
|
};
|
|
|
|
class BlendTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(BlendTextureNode)
|
|
|
|
ustring progression;
|
|
ustring axis;
|
|
|
|
static ShaderEnum progression_enum;
|
|
static ShaderEnum axis_enum;
|
|
};
|
|
|
|
class CloudsTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(CloudsTextureNode)
|
|
|
|
bool hard;
|
|
int depth;
|
|
ustring basis;
|
|
|
|
static ShaderEnum basis_enum;
|
|
};
|
|
|
|
class VoronoiTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(VoronoiTextureNode)
|
|
|
|
ustring distance_metric;
|
|
ustring coloring;
|
|
|
|
static ShaderEnum distance_metric_enum;
|
|
static ShaderEnum coloring_enum;
|
|
};
|
|
|
|
class MusgraveTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MusgraveTextureNode)
|
|
|
|
ustring type;
|
|
ustring basis;
|
|
|
|
static ShaderEnum type_enum;
|
|
static ShaderEnum basis_enum;
|
|
};
|
|
|
|
class MarbleTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MarbleTextureNode)
|
|
|
|
ustring type;
|
|
ustring wave;
|
|
ustring basis;
|
|
bool hard;
|
|
int depth;
|
|
|
|
static ShaderEnum type_enum;
|
|
static ShaderEnum wave_enum;
|
|
static ShaderEnum basis_enum;
|
|
};
|
|
|
|
class MagicTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MagicTextureNode)
|
|
|
|
int depth;
|
|
};
|
|
|
|
class StucciTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(StucciTextureNode)
|
|
|
|
ustring type;
|
|
ustring basis;
|
|
bool hard;
|
|
|
|
static ShaderEnum type_enum;
|
|
static ShaderEnum basis_enum;
|
|
};
|
|
|
|
class DistortedNoiseTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(DistortedNoiseTextureNode)
|
|
|
|
ustring basis;
|
|
ustring distortion_basis;
|
|
static ShaderEnum basis_enum;
|
|
};
|
|
|
|
class WoodTextureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(WoodTextureNode)
|
|
|
|
ustring type;
|
|
ustring wave;
|
|
ustring basis;
|
|
bool hard;
|
|
|
|
static ShaderEnum type_enum;
|
|
static ShaderEnum wave_enum;
|
|
static ShaderEnum basis_enum;
|
|
};
|
|
|
|
class MappingNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MappingNode)
|
|
|
|
Transform compute_transform();
|
|
float3 translation;
|
|
float3 rotation;
|
|
float3 scale;
|
|
};
|
|
|
|
class ConvertNode : public ShaderNode {
|
|
public:
|
|
ConvertNode(ShaderSocketType from, ShaderSocketType to);
|
|
SHADER_NODE_BASE_CLASS(ConvertNode)
|
|
|
|
ShaderSocketType from, to;
|
|
};
|
|
|
|
class BsdfNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(BsdfNode)
|
|
|
|
void compile(SVMCompiler& compiler, ShaderInput *param1, ShaderInput *param2);
|
|
|
|
ClosureType closure;
|
|
};
|
|
|
|
class WardBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(WardBsdfNode)
|
|
};
|
|
|
|
class DiffuseBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(DiffuseBsdfNode)
|
|
};
|
|
|
|
class TranslucentBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(TranslucentBsdfNode)
|
|
};
|
|
|
|
class TransparentBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(TransparentBsdfNode)
|
|
};
|
|
|
|
class VelvetBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(VelvetBsdfNode)
|
|
};
|
|
|
|
class GlossyBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(GlossyBsdfNode)
|
|
|
|
ustring distribution;
|
|
static ShaderEnum distribution_enum;
|
|
};
|
|
|
|
class GlassBsdfNode : public BsdfNode {
|
|
public:
|
|
SHADER_NODE_CLASS(GlassBsdfNode)
|
|
|
|
ustring distribution;
|
|
static ShaderEnum distribution_enum;
|
|
};
|
|
|
|
class EmissionNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(EmissionNode)
|
|
|
|
bool total_power;
|
|
};
|
|
|
|
class BackgroundNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(BackgroundNode)
|
|
};
|
|
|
|
class GeometryNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(GeometryNode)
|
|
};
|
|
|
|
class TextureCoordinateNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(TextureCoordinateNode)
|
|
void attributes(AttributeRequestSet *attributes);
|
|
};
|
|
|
|
class LightPathNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(LightPathNode)
|
|
};
|
|
|
|
class ValueNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(ValueNode)
|
|
|
|
float value;
|
|
};
|
|
|
|
class ColorNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(ColorNode)
|
|
|
|
float3 value;
|
|
};
|
|
|
|
class AddClosureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(AddClosureNode)
|
|
};
|
|
|
|
class MixClosureNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MixClosureNode)
|
|
};
|
|
|
|
class MixNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MixNode)
|
|
|
|
ustring type;
|
|
static ShaderEnum type_enum;
|
|
};
|
|
|
|
class AttributeNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(AttributeNode)
|
|
void attributes(AttributeRequestSet *attributes);
|
|
|
|
ustring attribute;
|
|
};
|
|
|
|
class FresnelNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(FresnelNode)
|
|
};
|
|
|
|
class MathNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(MathNode)
|
|
|
|
ustring type;
|
|
static ShaderEnum type_enum;
|
|
};
|
|
|
|
class VectorMathNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(VectorMathNode)
|
|
|
|
ustring type;
|
|
static ShaderEnum type_enum;
|
|
};
|
|
|
|
class BumpNode : public ShaderNode {
|
|
public:
|
|
SHADER_NODE_CLASS(BumpNode)
|
|
};
|
|
|
|
CCL_NAMESPACE_END
|
|
|
|
#endif /* __NODES_H__ */
|
|
|