12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505 |
- /*
- * Copyright 2011-2013 Blender Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef __NODES_H__
- #define __NODES_H__
- #include "render/graph.h"
- #include "graph/node.h"
- #include "util/util_array.h"
- #include "util/util_string.h"
- CCL_NAMESPACE_BEGIN
- class ImageManager;
- class LightManager;
- class Scene;
- class Shader;
- /* Texture Mapping */
- class TextureMapping {
- public:
- TextureMapping();
- Transform compute_transform();
- bool skip();
- void compile(SVMCompiler &compiler, int offset_in, int offset_out);
- int compile(SVMCompiler &compiler, ShaderInput *vector_in);
- void compile(OSLCompiler &compiler);
- int compile_begin(SVMCompiler &compiler, ShaderInput *vector_in);
- void compile_end(SVMCompiler &compiler, ShaderInput *vector_in, int vector_offset);
- float3 translation;
- float3 rotation;
- float3 scale;
- float3 min, max;
- bool use_minmax;
- enum Type { POINT = 0, TEXTURE = 1, VECTOR = 2, NORMAL = 3 };
- Type type;
- enum Mapping { NONE = 0, X = 1, Y = 2, Z = 3 };
- Mapping x_mapping, y_mapping, z_mapping;
- enum Projection { FLAT, CUBE, TUBE, SPHERE };
- Projection projection;
- };
- /* Nodes */
- class TextureNode : public ShaderNode {
- public:
- explicit TextureNode(const NodeType *node_type) : ShaderNode(node_type)
- {
- }
- TextureMapping tex_mapping;
- };
- /* Any node which uses image manager's slot should be a subclass of this one. */
- class ImageSlotTextureNode : public TextureNode {
- public:
- explicit ImageSlotTextureNode(const NodeType *node_type) : TextureNode(node_type)
- {
- special_type = SHADER_SPECIAL_TYPE_IMAGE_SLOT;
- }
- int slot;
- };
- class ImageTextureNode : public ImageSlotTextureNode {
- public:
- SHADER_NODE_NO_CLONE_CLASS(ImageTextureNode)
- ~ImageTextureNode();
- ShaderNode *clone() const;
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- virtual bool equals(const ShaderNode &other)
- {
- const ImageTextureNode &image_node = (const ImageTextureNode &)other;
- return ImageSlotTextureNode::equals(other) && builtin_data == image_node.builtin_data &&
- animated == image_node.animated;
- }
- /* Parameters. */
- ustring filename;
- void *builtin_data;
- ustring colorspace;
- ImageAlphaType alpha_type;
- NodeImageProjection projection;
- InterpolationType interpolation;
- ExtensionType extension;
- float projection_blend;
- bool animated;
- float3 vector;
- /* Runtime. */
- ImageManager *image_manager;
- int is_float;
- bool compress_as_srgb;
- ustring known_colorspace;
- };
- class EnvironmentTextureNode : public ImageSlotTextureNode {
- public:
- SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode)
- ~EnvironmentTextureNode();
- ShaderNode *clone() const;
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- virtual bool equals(const ShaderNode &other)
- {
- const EnvironmentTextureNode &env_node = (const EnvironmentTextureNode &)other;
- return ImageSlotTextureNode::equals(other) && builtin_data == env_node.builtin_data &&
- animated == env_node.animated;
- }
- /* Parameters. */
- ustring filename;
- void *builtin_data;
- ustring colorspace;
- ImageAlphaType alpha_type;
- NodeEnvironmentProjection projection;
- InterpolationType interpolation;
- bool animated;
- float3 vector;
- /* Runtime. */
- ImageManager *image_manager;
- int is_float;
- bool compress_as_srgb;
- ustring known_colorspace;
- };
- class SkyTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(SkyTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- NodeSkyType type;
- float3 sun_direction;
- float turbidity;
- float ground_albedo;
- float3 vector;
- };
- class OutputNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(OutputNode)
- void *surface;
- void *volume;
- float3 displacement;
- float3 normal;
- /* Don't allow output node de-duplication. */
- virtual bool equals(const ShaderNode & /*other*/)
- {
- return false;
- }
- };
- class GradientTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(GradientTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- NodeGradientType type;
- float3 vector;
- };
- class NoiseTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(NoiseTextureNode)
- float scale, detail, distortion;
- float3 vector;
- };
- class VoronoiTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(VoronoiTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- NodeVoronoiColoring coloring;
- NodeVoronoiDistanceMetric metric;
- NodeVoronoiFeature feature;
- float scale, exponent;
- float3 vector;
- };
- class MusgraveTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(MusgraveTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- NodeMusgraveType type;
- float scale, detail, dimension, lacunarity, offset, gain;
- float3 vector;
- };
- class WaveTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(WaveTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- NodeWaveType type;
- NodeWaveProfile profile;
- float scale, distortion, detail, detail_scale;
- float3 vector;
- };
- class MagicTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(MagicTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- int depth;
- float3 vector;
- float scale, distortion;
- };
- class CheckerTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(CheckerTextureNode)
- float3 vector, color1, color2;
- float scale;
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- };
- class BrickTextureNode : public TextureNode {
- public:
- SHADER_NODE_CLASS(BrickTextureNode)
- float offset, squash;
- int offset_frequency, squash_frequency;
- float3 color1, color2, mortar;
- float scale, mortar_size, mortar_smooth, bias, brick_width, row_height;
- float3 vector;
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- };
- class PointDensityTextureNode : public ShaderNode {
- public:
- SHADER_NODE_NO_CLONE_CLASS(PointDensityTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- ~PointDensityTextureNode();
- ShaderNode *clone() const;
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- bool has_object_dependency()
- {
- return true;
- }
- void add_image();
- /* Parameters. */
- ustring filename;
- NodeTexVoxelSpace space;
- InterpolationType interpolation;
- Transform tfm;
- float3 vector;
- void *builtin_data;
- /* Runtime. */
- ImageManager *image_manager;
- int slot;
- virtual bool equals(const ShaderNode &other)
- {
- const PointDensityTextureNode &point_dendity_node = (const PointDensityTextureNode &)other;
- return ShaderNode::equals(other) && builtin_data == point_dendity_node.builtin_data;
- }
- };
- class IESLightNode : public TextureNode {
- public:
- SHADER_NODE_NO_CLONE_CLASS(IESLightNode)
- ~IESLightNode();
- ShaderNode *clone() const;
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- ustring filename;
- ustring ies;
- float strength;
- float3 vector;
- private:
- LightManager *light_manager;
- int slot;
- void get_slot();
- };
- class MappingNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(MappingNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- float3 vector;
- TextureMapping tex_mapping;
- };
- class RGBToBWNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(RGBToBWNode)
- void constant_fold(const ConstantFolder &folder);
- float3 color;
- };
- class ConvertNode : public ShaderNode {
- public:
- ConvertNode(SocketType::Type from, SocketType::Type to, bool autoconvert = false);
- SHADER_NODE_BASE_CLASS(ConvertNode)
- void constant_fold(const ConstantFolder &folder);
- SocketType::Type from, to;
- union {
- float value_float;
- int value_int;
- float3 value_color;
- float3 value_vector;
- float3 value_point;
- float3 value_normal;
- };
- ustring value_string;
- private:
- static const int MAX_TYPE = 12;
- static bool register_types();
- static Node *create(const NodeType *type);
- static const NodeType *node_types[MAX_TYPE][MAX_TYPE];
- static bool initialized;
- };
- class BsdfBaseNode : public ShaderNode {
- public:
- BsdfBaseNode(const NodeType *node_type);
- bool has_spatial_varying()
- {
- return true;
- }
- virtual ClosureType get_closure_type()
- {
- return closure;
- }
- virtual bool has_bump();
- virtual bool equals(const ShaderNode & /*other*/)
- {
- /* TODO(sergey): With some care BSDF nodes can be de-duplicated. */
- return false;
- }
- ClosureType closure;
- };
- class BsdfNode : public BsdfBaseNode {
- public:
- explicit BsdfNode(const NodeType *node_type);
- SHADER_NODE_BASE_CLASS(BsdfNode)
- void compile(SVMCompiler &compiler,
- ShaderInput *param1,
- ShaderInput *param2,
- ShaderInput *param3 = NULL,
- ShaderInput *param4 = NULL);
- float3 color;
- float3 normal;
- float surface_mix_weight;
- };
- class AnisotropicBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(AnisotropicBsdfNode)
- float3 tangent;
- float roughness, anisotropy, rotation;
- ClosureType distribution;
- ClosureType get_closure_type()
- {
- return distribution;
- }
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- };
- class DiffuseBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(DiffuseBsdfNode)
- float roughness;
- };
- /* Disney principled BRDF */
- class PrincipledBsdfNode : public BsdfBaseNode {
- public:
- SHADER_NODE_CLASS(PrincipledBsdfNode)
- void expand(ShaderGraph *graph);
- bool has_surface_bssrdf();
- bool has_bssrdf_bump();
- void compile(SVMCompiler &compiler,
- ShaderInput *metallic,
- ShaderInput *subsurface,
- ShaderInput *subsurface_radius,
- ShaderInput *specular,
- ShaderInput *roughness,
- ShaderInput *specular_tint,
- ShaderInput *anisotropic,
- ShaderInput *sheen,
- ShaderInput *sheen_tint,
- ShaderInput *clearcoat,
- ShaderInput *clearcoat_roughness,
- ShaderInput *ior,
- ShaderInput *transmission,
- ShaderInput *anisotropic_rotation,
- ShaderInput *transmission_roughness);
- float3 base_color;
- float3 subsurface_color, subsurface_radius;
- float metallic, subsurface, specular, roughness, specular_tint, anisotropic, sheen, sheen_tint,
- clearcoat, clearcoat_roughness, ior, transmission, anisotropic_rotation,
- transmission_roughness;
- float3 normal, clearcoat_normal, tangent;
- float surface_mix_weight;
- ClosureType distribution, distribution_orig;
- ClosureType subsurface_method;
- float3 emission;
- float alpha;
- bool has_integrator_dependency();
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- };
- class TranslucentBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(TranslucentBsdfNode)
- };
- class TransparentBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(TransparentBsdfNode)
- bool has_surface_transparent()
- {
- return true;
- }
- };
- class VelvetBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(VelvetBsdfNode)
- float sigma;
- };
- class GlossyBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(GlossyBsdfNode)
- void simplify_settings(Scene *scene);
- bool has_integrator_dependency();
- ClosureType get_closure_type()
- {
- return distribution;
- }
- float roughness, roughness_orig;
- ClosureType distribution, distribution_orig;
- };
- class GlassBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(GlassBsdfNode)
- void simplify_settings(Scene *scene);
- bool has_integrator_dependency();
- ClosureType get_closure_type()
- {
- return distribution;
- }
- float roughness, roughness_orig, IOR;
- ClosureType distribution, distribution_orig;
- };
- class RefractionBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(RefractionBsdfNode)
- void simplify_settings(Scene *scene);
- bool has_integrator_dependency();
- ClosureType get_closure_type()
- {
- return distribution;
- }
- float roughness, roughness_orig, IOR;
- ClosureType distribution, distribution_orig;
- };
- class ToonBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(ToonBsdfNode)
- float smooth, size;
- ClosureType component;
- };
- class SubsurfaceScatteringNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(SubsurfaceScatteringNode)
- bool has_surface_bssrdf()
- {
- return true;
- }
- bool has_bssrdf_bump();
- ClosureType get_closure_type()
- {
- return falloff;
- }
- float scale;
- float3 radius;
- float sharpness;
- float texture_blur;
- ClosureType falloff;
- };
- class EmissionNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(EmissionNode)
- void constant_fold(const ConstantFolder &folder);
- bool has_surface_emission()
- {
- return true;
- }
- bool has_volume_support()
- {
- return true;
- }
- float3 color;
- float strength;
- float surface_mix_weight;
- };
- class BackgroundNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(BackgroundNode)
- void constant_fold(const ConstantFolder &folder);
- float3 color;
- float strength;
- float surface_mix_weight;
- };
- class HoldoutNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(HoldoutNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- virtual ClosureType get_closure_type()
- {
- return CLOSURE_HOLDOUT_ID;
- }
- float surface_mix_weight;
- float volume_mix_weight;
- };
- class AmbientOcclusionNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(AmbientOcclusionNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- virtual bool has_raytrace()
- {
- return true;
- }
- float3 color;
- float distance;
- float3 normal;
- int samples;
- bool only_local;
- bool inside;
- };
- class VolumeNode : public ShaderNode {
- public:
- VolumeNode(const NodeType *node_type);
- SHADER_NODE_BASE_CLASS(VolumeNode)
- void compile(SVMCompiler &compiler, ShaderInput *param1, ShaderInput *param2);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- virtual int get_feature()
- {
- return ShaderNode::get_feature() | NODE_FEATURE_VOLUME;
- }
- virtual ClosureType get_closure_type()
- {
- return closure;
- }
- virtual bool has_volume_support()
- {
- return true;
- }
- float3 color;
- float density;
- float volume_mix_weight;
- ClosureType closure;
- virtual bool equals(const ShaderNode & /*other*/)
- {
- /* TODO(sergey): With some care Volume nodes can be de-duplicated. */
- return false;
- }
- };
- class AbsorptionVolumeNode : public VolumeNode {
- public:
- SHADER_NODE_CLASS(AbsorptionVolumeNode)
- };
- class ScatterVolumeNode : public VolumeNode {
- public:
- SHADER_NODE_CLASS(ScatterVolumeNode)
- float anisotropy;
- };
- class PrincipledVolumeNode : public VolumeNode {
- public:
- SHADER_NODE_CLASS(PrincipledVolumeNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- ustring density_attribute;
- ustring color_attribute;
- ustring temperature_attribute;
- float anisotropy;
- float3 absorption_color;
- float emission_strength;
- float3 emission_color;
- float blackbody_intensity;
- float3 blackbody_tint;
- float temperature;
- };
- /* Interface between the I/O sockets and the SVM/OSL backend. */
- class PrincipledHairBsdfNode : public BsdfBaseNode {
- public:
- SHADER_NODE_CLASS(PrincipledHairBsdfNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- /* Longitudinal roughness. */
- float roughness;
- /* Azimuthal roughness. */
- float radial_roughness;
- /* Randomization factor for roughnesses. */
- float random_roughness;
- /* Longitudinal roughness factor for only the diffuse bounce (shiny undercoat). */
- float coat;
- /* Index of reflection. */
- float ior;
- /* Cuticle tilt angle. */
- float offset;
- /* Direct coloring's color. */
- float3 color;
- /* Melanin concentration. */
- float melanin;
- /* Melanin redness ratio. */
- float melanin_redness;
- /* Dye color. */
- float3 tint;
- /* Randomization factor for melanin quantities. */
- float random_color;
- /* Absorption coefficient (unfiltered). */
- float3 absorption_coefficient;
- float3 normal;
- float surface_mix_weight;
- /* If linked, here will be the given random number. */
- float random;
- /* Selected coloring parametrization. */
- NodePrincipledHairParametrization parametrization;
- };
- class HairBsdfNode : public BsdfNode {
- public:
- SHADER_NODE_CLASS(HairBsdfNode)
- ClosureType get_closure_type()
- {
- return component;
- }
- ClosureType component;
- float offset;
- float roughness_u;
- float roughness_v;
- float3 tangent;
- };
- class GeometryNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(GeometryNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- int get_group();
- float3 normal_osl;
- };
- class TextureCoordinateNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(TextureCoordinateNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- bool has_object_dependency()
- {
- return use_transform;
- }
- float3 normal_osl;
- bool from_dupli;
- bool use_transform;
- Transform ob_tfm;
- };
- class UVMapNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(UVMapNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- ustring attribute;
- bool from_dupli;
- };
- class LightPathNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(LightPathNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- };
- class LightFalloffNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(LightFalloffNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- float strength;
- float smooth;
- };
- class ObjectInfoNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(ObjectInfoNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- };
- class ParticleInfoNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(ParticleInfoNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- };
- class HairInfoNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(HairInfoNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- virtual int get_feature()
- {
- return ShaderNode::get_feature() | NODE_FEATURE_HAIR;
- }
- };
- class ValueNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(ValueNode)
- void constant_fold(const ConstantFolder &folder);
- float value;
- };
- class ColorNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(ColorNode)
- void constant_fold(const ConstantFolder &folder);
- float3 value;
- };
- class AddClosureNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(AddClosureNode)
- void constant_fold(const ConstantFolder &folder);
- };
- class MixClosureNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(MixClosureNode)
- void constant_fold(const ConstantFolder &folder);
- float fac;
- };
- class MixClosureWeightNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(MixClosureWeightNode)
- float weight;
- float fac;
- };
- class InvertNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(InvertNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float fac;
- float3 color;
- };
- class MixNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(MixNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- NodeMix type;
- bool use_clamp;
- float3 color1;
- float3 color2;
- float fac;
- };
- class CombineRGBNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(CombineRGBNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float r, g, b;
- };
- class CombineHSVNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(CombineHSVNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float h, s, v;
- };
- class CombineXYZNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(CombineXYZNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float x, y, z;
- };
- class GammaNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(GammaNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- float3 color;
- float gamma;
- };
- class BrightContrastNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(BrightContrastNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- float3 color;
- float bright;
- float contrast;
- };
- class SeparateRGBNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(SeparateRGBNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float3 color;
- };
- class SeparateHSVNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(SeparateHSVNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float3 color;
- };
- class SeparateXYZNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(SeparateXYZNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float3 vector;
- };
- class HSVNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(HSVNode)
- float hue;
- float saturation;
- float value;
- float fac;
- float3 color;
- };
- class AttributeNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(AttributeNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- ustring attribute;
- };
- class CameraNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(CameraNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- };
- class FresnelNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(FresnelNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- float3 normal;
- float IOR;
- };
- class LayerWeightNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(LayerWeightNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- float3 normal;
- float blend;
- };
- class WireframeNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(WireframeNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float size;
- bool use_pixel_size;
- };
- class WavelengthNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(WavelengthNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float wavelength;
- };
- class BlackbodyNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(BlackbodyNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- float temperature;
- };
- class MathNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(MathNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- void constant_fold(const ConstantFolder &folder);
- float value1;
- float value2;
- NodeMath type;
- bool use_clamp;
- };
- class NormalNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(NormalNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
- float3 direction;
- float3 normal;
- };
- class VectorMathNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(VectorMathNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- void constant_fold(const ConstantFolder &folder);
- float3 vector1;
- float3 vector2;
- NodeVectorMath type;
- };
- class VectorTransformNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(VectorTransformNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- NodeVectorTransformType type;
- NodeVectorTransformConvertSpace convert_from;
- NodeVectorTransformConvertSpace convert_to;
- float3 vector;
- };
- class BumpNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(BumpNode)
- void constant_fold(const ConstantFolder &folder);
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_feature()
- {
- return NODE_FEATURE_BUMP;
- }
- bool invert;
- bool use_object_space;
- float height;
- float sample_center;
- float sample_x;
- float sample_y;
- float3 normal;
- float strength;
- float distance;
- };
- class CurvesNode : public ShaderNode {
- public:
- explicit CurvesNode(const NodeType *node_type);
- SHADER_NODE_BASE_CLASS(CurvesNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- array<float3> curves;
- float min_x, max_x, fac;
- float3 value;
- protected:
- using ShaderNode::constant_fold;
- void constant_fold(const ConstantFolder &folder, ShaderInput *value_in);
- void compile(SVMCompiler &compiler, int type, ShaderInput *value_in, ShaderOutput *value_out);
- void compile(OSLCompiler &compiler, const char *name);
- };
- class RGBCurvesNode : public CurvesNode {
- public:
- SHADER_NODE_CLASS(RGBCurvesNode)
- void constant_fold(const ConstantFolder &folder);
- };
- class VectorCurvesNode : public CurvesNode {
- public:
- SHADER_NODE_CLASS(VectorCurvesNode)
- void constant_fold(const ConstantFolder &folder);
- };
- class RGBRampNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(RGBRampNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
- array<float3> ramp;
- array<float> ramp_alpha;
- float fac;
- bool interpolate;
- };
- class SetNormalNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(SetNormalNode)
- float3 direction;
- };
- class OSLNode : public ShaderNode {
- public:
- static OSLNode *create(size_t num_inputs, const OSLNode *from = NULL);
- ~OSLNode();
- ShaderNode *clone() const;
- char *input_default_value();
- void add_input(ustring name, SocketType::Type type);
- void add_output(ustring name, SocketType::Type type);
- SHADER_NODE_NO_CLONE_CLASS(OSLNode)
- /* ideally we could beter detect this, but we can't query this now */
- bool has_spatial_varying()
- {
- return true;
- }
- bool has_volume_support()
- {
- return true;
- }
- virtual bool equals(const ShaderNode & /*other*/)
- {
- return false;
- }
- string filepath;
- string bytecode_hash;
- };
- class NormalMapNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(NormalMapNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- NodeNormalMapSpace space;
- ustring attribute;
- float strength;
- float3 color;
- float3 normal_osl;
- };
- class TangentNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(TangentNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- NodeTangentDirectionType direction_type;
- NodeTangentAxis axis;
- ustring attribute;
- float3 normal_osl;
- };
- class BevelNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(BevelNode)
- bool has_spatial_varying()
- {
- return true;
- }
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- virtual bool has_raytrace()
- {
- return true;
- }
- float radius;
- float3 normal;
- int samples;
- };
- class DisplacementNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(DisplacementNode)
- void constant_fold(const ConstantFolder &folder);
- virtual int get_feature()
- {
- return NODE_FEATURE_BUMP;
- }
- NodeNormalMapSpace space;
- float height;
- float midlevel;
- float scale;
- float3 normal;
- };
- class VectorDisplacementNode : public ShaderNode {
- public:
- SHADER_NODE_CLASS(VectorDisplacementNode)
- void attributes(Shader *shader, AttributeRequestSet *attributes);
- bool has_attribute_dependency()
- {
- return true;
- }
- void constant_fold(const ConstantFolder &folder);
- virtual int get_feature()
- {
- return NODE_FEATURE_BUMP;
- }
- NodeNormalMapSpace space;
- ustring attribute;
- float3 vector;
- float midlevel;
- float scale;
- };
- CCL_NAMESPACE_END
- #endif /* __NODES_H__ */
|