Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/nodes.h
| Show First 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
| public: | public: | ||||
| SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode) | SHADER_NODE_NO_CLONE_CLASS(EnvironmentTextureNode) | ||||
| ShaderNode *clone(ShaderGraph *graph) const; | ShaderNode *clone(ShaderGraph *graph) const; | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| virtual bool equals(const ShaderNode &other) | virtual bool equals(const ShaderNode &other) | ||||
| { | { | ||||
| const EnvironmentTextureNode &other_node = (const EnvironmentTextureNode &)other; | const EnvironmentTextureNode &other_node = (const EnvironmentTextureNode &)other; | ||||
| return ImageSlotTextureNode::equals(other) && animated == other_node.animated; | return ImageSlotTextureNode::equals(other) && animated == other_node.animated; | ||||
| } | } | ||||
| ImageParams image_params() const; | ImageParams image_params() const; | ||||
| /* Parameters. */ | /* Parameters. */ | ||||
| NODE_SOCKET_API(ustring, filename) | NODE_SOCKET_API(ustring, filename) | ||||
| NODE_SOCKET_API(ustring, colorspace) | NODE_SOCKET_API(ustring, colorspace) | ||||
| NODE_SOCKET_API(ImageAlphaType, alpha_type) | NODE_SOCKET_API(ImageAlphaType, alpha_type) | ||||
| NODE_SOCKET_API(NodeEnvironmentProjection, projection) | NODE_SOCKET_API(NodeEnvironmentProjection, projection) | ||||
| NODE_SOCKET_API(InterpolationType, interpolation) | NODE_SOCKET_API(InterpolationType, interpolation) | ||||
| NODE_SOCKET_API(bool, animated) | NODE_SOCKET_API(bool, animated) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class SkyTextureNode : public TextureNode { | class SkyTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(SkyTextureNode) | SHADER_NODE_CLASS(SkyTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(NodeSkyType, sky_type) | NODE_SOCKET_API(NodeSkyType, sky_type) | ||||
| NODE_SOCKET_API(float3, sun_direction) | NODE_SOCKET_API(float3, sun_direction) | ||||
| NODE_SOCKET_API(float, turbidity) | NODE_SOCKET_API(float, turbidity) | ||||
| NODE_SOCKET_API(float, ground_albedo) | NODE_SOCKET_API(float, ground_albedo) | ||||
| NODE_SOCKET_API(bool, sun_disc) | NODE_SOCKET_API(bool, sun_disc) | ||||
| NODE_SOCKET_API(float, sun_size) | NODE_SOCKET_API(float, sun_size) | ||||
| NODE_SOCKET_API(float, sun_intensity) | NODE_SOCKET_API(float, sun_intensity) | ||||
| NODE_SOCKET_API(float, sun_elevation) | NODE_SOCKET_API(float, sun_elevation) | ||||
| Show All 33 Lines | public: | ||||
| SHADER_NODE_CLASS(OutputAOVNode) | SHADER_NODE_CLASS(OutputAOVNode) | ||||
| virtual void simplify_settings(Scene *scene); | virtual void simplify_settings(Scene *scene); | ||||
| NODE_SOCKET_API(float, value) | NODE_SOCKET_API(float, value) | ||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(ustring, name) | NODE_SOCKET_API(ustring, name) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_4; | |||||
| } | |||||
| /* Don't allow output node de-duplication. */ | /* Don't allow output node de-duplication. */ | ||||
| virtual bool equals(const ShaderNode & /*other*/) | virtual bool equals(const ShaderNode & /*other*/) | ||||
| { | { | ||||
| return false; | return false; | ||||
| } | } | ||||
| int slot; | int offset; | ||||
| bool is_color; | bool is_color; | ||||
| }; | }; | ||||
| class GradientTextureNode : public TextureNode { | class GradientTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(GradientTextureNode) | SHADER_NODE_CLASS(GradientTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(NodeGradientType, gradient_type) | NODE_SOCKET_API(NodeGradientType, gradient_type) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class NoiseTextureNode : public TextureNode { | class NoiseTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(NoiseTextureNode) | SHADER_NODE_CLASS(NoiseTextureNode) | ||||
| NODE_SOCKET_API(int, dimensions) | NODE_SOCKET_API(int, dimensions) | ||||
| NODE_SOCKET_API(float, w) | NODE_SOCKET_API(float, w) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float, detail) | NODE_SOCKET_API(float, detail) | ||||
| NODE_SOCKET_API(float, roughness) | NODE_SOCKET_API(float, roughness) | ||||
| NODE_SOCKET_API(float, distortion) | NODE_SOCKET_API(float, distortion) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class VoronoiTextureNode : public TextureNode { | class VoronoiTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(VoronoiTextureNode) | SHADER_NODE_CLASS(VoronoiTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| virtual int get_feature() | virtual int get_feature() | ||||
| { | { | ||||
| int result = ShaderNode::get_feature(); | int result = ShaderNode::get_feature(); | ||||
| if (dimensions == 4) { | if (dimensions == 4) { | ||||
| result |= NODE_FEATURE_VORONOI_EXTRA; | result |= KERNEL_FEATURE_NODE_VORONOI_EXTRA; | ||||
| } | } | ||||
| else if (dimensions >= 2 && feature == NODE_VORONOI_SMOOTH_F1) { | else if (dimensions >= 2 && feature == NODE_VORONOI_SMOOTH_F1) { | ||||
| result |= NODE_FEATURE_VORONOI_EXTRA; | result |= KERNEL_FEATURE_NODE_VORONOI_EXTRA; | ||||
| } | } | ||||
| return result; | return result; | ||||
| } | } | ||||
| NODE_SOCKET_API(int, dimensions) | NODE_SOCKET_API(int, dimensions) | ||||
| NODE_SOCKET_API(NodeVoronoiDistanceMetric, metric) | NODE_SOCKET_API(NodeVoronoiDistanceMetric, metric) | ||||
| NODE_SOCKET_API(NodeVoronoiFeature, feature) | NODE_SOCKET_API(NodeVoronoiFeature, feature) | ||||
| NODE_SOCKET_API(float, w) | NODE_SOCKET_API(float, w) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float, exponent) | NODE_SOCKET_API(float, exponent) | ||||
| NODE_SOCKET_API(float, smoothness) | NODE_SOCKET_API(float, smoothness) | ||||
| NODE_SOCKET_API(float, randomness) | NODE_SOCKET_API(float, randomness) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class MusgraveTextureNode : public TextureNode { | class MusgraveTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(MusgraveTextureNode) | SHADER_NODE_CLASS(MusgraveTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(int, dimensions) | NODE_SOCKET_API(int, dimensions) | ||||
| NODE_SOCKET_API(NodeMusgraveType, musgrave_type) | NODE_SOCKET_API(NodeMusgraveType, musgrave_type) | ||||
| NODE_SOCKET_API(float, w) | NODE_SOCKET_API(float, w) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float, detail) | NODE_SOCKET_API(float, detail) | ||||
| NODE_SOCKET_API(float, dimension) | NODE_SOCKET_API(float, dimension) | ||||
| NODE_SOCKET_API(float, lacunarity) | NODE_SOCKET_API(float, lacunarity) | ||||
| NODE_SOCKET_API(float, offset) | NODE_SOCKET_API(float, offset) | ||||
| NODE_SOCKET_API(float, gain) | NODE_SOCKET_API(float, gain) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class WaveTextureNode : public TextureNode { | class WaveTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(WaveTextureNode) | SHADER_NODE_CLASS(WaveTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(NodeWaveType, wave_type) | NODE_SOCKET_API(NodeWaveType, wave_type) | ||||
| NODE_SOCKET_API(NodeWaveBandsDirection, bands_direction) | NODE_SOCKET_API(NodeWaveBandsDirection, bands_direction) | ||||
| NODE_SOCKET_API(NodeWaveRingsDirection, rings_direction) | NODE_SOCKET_API(NodeWaveRingsDirection, rings_direction) | ||||
| NODE_SOCKET_API(NodeWaveProfile, profile) | NODE_SOCKET_API(NodeWaveProfile, profile) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float, distortion) | NODE_SOCKET_API(float, distortion) | ||||
| NODE_SOCKET_API(float, detail) | NODE_SOCKET_API(float, detail) | ||||
| NODE_SOCKET_API(float, detail_scale) | NODE_SOCKET_API(float, detail_scale) | ||||
| NODE_SOCKET_API(float, detail_roughness) | NODE_SOCKET_API(float, detail_roughness) | ||||
| NODE_SOCKET_API(float, phase) | NODE_SOCKET_API(float, phase) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class MagicTextureNode : public TextureNode { | class MagicTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(MagicTextureNode) | SHADER_NODE_CLASS(MagicTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(int, depth) | NODE_SOCKET_API(int, depth) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float, distortion) | NODE_SOCKET_API(float, distortion) | ||||
| }; | }; | ||||
| class CheckerTextureNode : public TextureNode { | class CheckerTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(CheckerTextureNode) | SHADER_NODE_CLASS(CheckerTextureNode) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| NODE_SOCKET_API(float3, color1) | NODE_SOCKET_API(float3, color1) | ||||
| NODE_SOCKET_API(float3, color2) | NODE_SOCKET_API(float3, color2) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| }; | }; | ||||
| class BrickTextureNode : public TextureNode { | class BrickTextureNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(BrickTextureNode) | SHADER_NODE_CLASS(BrickTextureNode) | ||||
| NODE_SOCKET_API(float, offset) | NODE_SOCKET_API(float, offset) | ||||
| NODE_SOCKET_API(float, squash) | NODE_SOCKET_API(float, squash) | ||||
| NODE_SOCKET_API(int, offset_frequency) | NODE_SOCKET_API(int, offset_frequency) | ||||
| NODE_SOCKET_API(int, squash_frequency) | NODE_SOCKET_API(int, squash_frequency) | ||||
| NODE_SOCKET_API(float3, color1) | NODE_SOCKET_API(float3, color1) | ||||
| NODE_SOCKET_API(float3, color2) | NODE_SOCKET_API(float3, color2) | ||||
| NODE_SOCKET_API(float3, mortar) | NODE_SOCKET_API(float3, mortar) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float, mortar_size) | NODE_SOCKET_API(float, mortar_size) | ||||
| NODE_SOCKET_API(float, mortar_smooth) | NODE_SOCKET_API(float, mortar_smooth) | ||||
| NODE_SOCKET_API(float, bias) | NODE_SOCKET_API(float, bias) | ||||
| NODE_SOCKET_API(float, brick_width) | NODE_SOCKET_API(float, brick_width) | ||||
| NODE_SOCKET_API(float, row_height) | NODE_SOCKET_API(float, row_height) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| }; | }; | ||||
| class PointDensityTextureNode : public ShaderNode { | class PointDensityTextureNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_NO_CLONE_CLASS(PointDensityTextureNode) | SHADER_NODE_NO_CLONE_CLASS(PointDensityTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_4; | |||||
| } | |||||
| ~PointDensityTextureNode(); | ~PointDensityTextureNode(); | ||||
| ShaderNode *clone(ShaderGraph *graph) const; | ShaderNode *clone(ShaderGraph *graph) const; | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| Show All 23 Lines | |||||
| }; | }; | ||||
| class IESLightNode : public TextureNode { | class IESLightNode : public TextureNode { | ||||
| public: | public: | ||||
| SHADER_NODE_NO_CLONE_CLASS(IESLightNode) | SHADER_NODE_NO_CLONE_CLASS(IESLightNode) | ||||
| ~IESLightNode(); | ~IESLightNode(); | ||||
| ShaderNode *clone(ShaderGraph *graph) const; | ShaderNode *clone(ShaderGraph *graph) const; | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(ustring, filename) | NODE_SOCKET_API(ustring, filename) | ||||
| NODE_SOCKET_API(ustring, ies) | NODE_SOCKET_API(ustring, ies) | ||||
| NODE_SOCKET_API(float, strength) | NODE_SOCKET_API(float, strength) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| private: | private: | ||||
| LightManager *light_manager; | LightManager *light_manager; | ||||
| int slot; | int slot; | ||||
| void get_slot(); | void get_slot(); | ||||
| }; | }; | ||||
| class WhiteNoiseTextureNode : public ShaderNode { | class WhiteNoiseTextureNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(WhiteNoiseTextureNode) | SHADER_NODE_CLASS(WhiteNoiseTextureNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(int, dimensions) | NODE_SOCKET_API(int, dimensions) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| NODE_SOCKET_API(float, w) | NODE_SOCKET_API(float, w) | ||||
| }; | }; | ||||
| class MappingNode : public ShaderNode { | class MappingNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(MappingNode) | SHADER_NODE_CLASS(MappingNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| NODE_SOCKET_API(float3, location) | NODE_SOCKET_API(float3, location) | ||||
| NODE_SOCKET_API(float3, rotation) | NODE_SOCKET_API(float3, rotation) | ||||
| NODE_SOCKET_API(float3, scale) | NODE_SOCKET_API(float3, scale) | ||||
| NODE_SOCKET_API(NodeMappingType, mapping_type) | NODE_SOCKET_API(NodeMappingType, mapping_type) | ||||
| }; | }; | ||||
| ▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | public: | ||||
| virtual bool has_bump(); | virtual bool has_bump(); | ||||
| virtual bool equals(const ShaderNode & /*other*/) | virtual bool equals(const ShaderNode & /*other*/) | ||||
| { | { | ||||
| /* TODO(sergey): With some care BSDF nodes can be de-duplicated. */ | /* TODO(sergey): With some care BSDF nodes can be de-duplicated. */ | ||||
| return false; | return false; | ||||
| } | } | ||||
| virtual int get_feature() | |||||
| { | |||||
| return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_BSDF; | |||||
| } | |||||
| protected: | protected: | ||||
| ClosureType closure; | ClosureType closure; | ||||
| }; | }; | ||||
| class BsdfNode : public BsdfBaseNode { | class BsdfNode : public BsdfBaseNode { | ||||
| public: | public: | ||||
| explicit BsdfNode(const NodeType *node_type); | explicit BsdfNode(const NodeType *node_type); | ||||
| SHADER_NODE_BASE_CLASS(BsdfNode) | SHADER_NODE_BASE_CLASS(BsdfNode) | ||||
| ▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | public: | ||||
| void expand(ShaderGraph *graph); | void expand(ShaderGraph *graph); | ||||
| bool has_surface_bssrdf(); | bool has_surface_bssrdf(); | ||||
| bool has_bssrdf_bump(); | bool has_bssrdf_bump(); | ||||
| void compile(SVMCompiler &compiler, | void compile(SVMCompiler &compiler, | ||||
| ShaderInput *metallic, | ShaderInput *metallic, | ||||
| ShaderInput *subsurface, | ShaderInput *subsurface, | ||||
| ShaderInput *subsurface_radius, | ShaderInput *subsurface_radius, | ||||
| ShaderInput *subsurface_ior, | |||||
| ShaderInput *subsurface_anisotropy, | |||||
| ShaderInput *specular, | ShaderInput *specular, | ||||
| ShaderInput *roughness, | ShaderInput *roughness, | ||||
| ShaderInput *specular_tint, | ShaderInput *specular_tint, | ||||
| ShaderInput *anisotropic, | ShaderInput *anisotropic, | ||||
| ShaderInput *sheen, | ShaderInput *sheen, | ||||
| ShaderInput *sheen_tint, | ShaderInput *sheen_tint, | ||||
| ShaderInput *clearcoat, | ShaderInput *clearcoat, | ||||
| ShaderInput *clearcoat_roughness, | ShaderInput *clearcoat_roughness, | ||||
| ShaderInput *ior, | ShaderInput *ior, | ||||
| ShaderInput *transmission, | ShaderInput *transmission, | ||||
| ShaderInput *anisotropic_rotation, | ShaderInput *anisotropic_rotation, | ||||
| ShaderInput *transmission_roughness); | ShaderInput *transmission_roughness); | ||||
| NODE_SOCKET_API(float3, base_color) | NODE_SOCKET_API(float3, base_color) | ||||
| NODE_SOCKET_API(float3, subsurface_color) | NODE_SOCKET_API(float3, subsurface_color) | ||||
| NODE_SOCKET_API(float3, subsurface_radius) | NODE_SOCKET_API(float3, subsurface_radius) | ||||
| NODE_SOCKET_API(float, subsurface_ior) | |||||
| NODE_SOCKET_API(float, subsurface_anisotropy) | |||||
| NODE_SOCKET_API(float, metallic) | NODE_SOCKET_API(float, metallic) | ||||
| NODE_SOCKET_API(float, subsurface) | NODE_SOCKET_API(float, subsurface) | ||||
| NODE_SOCKET_API(float, specular) | NODE_SOCKET_API(float, specular) | ||||
| NODE_SOCKET_API(float, roughness) | NODE_SOCKET_API(float, roughness) | ||||
| NODE_SOCKET_API(float, specular_tint) | NODE_SOCKET_API(float, specular_tint) | ||||
| NODE_SOCKET_API(float, anisotropic) | NODE_SOCKET_API(float, anisotropic) | ||||
| NODE_SOCKET_API(float, sheen) | NODE_SOCKET_API(float, sheen) | ||||
| NODE_SOCKET_API(float, sheen_tint) | NODE_SOCKET_API(float, sheen_tint) | ||||
| ▲ Show 20 Lines • Show All 120 Lines • ▼ Show 20 Lines | public: | ||||
| SHADER_NODE_CLASS(SubsurfaceScatteringNode) | SHADER_NODE_CLASS(SubsurfaceScatteringNode) | ||||
| bool has_surface_bssrdf() | bool has_surface_bssrdf() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool has_bssrdf_bump(); | bool has_bssrdf_bump(); | ||||
| ClosureType get_closure_type() | ClosureType get_closure_type() | ||||
| { | { | ||||
| return falloff; | return method; | ||||
| } | } | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float3, radius) | NODE_SOCKET_API(float3, radius) | ||||
| NODE_SOCKET_API(float, sharpness) | NODE_SOCKET_API(float, subsurface_ior) | ||||
| NODE_SOCKET_API(float, texture_blur) | NODE_SOCKET_API(float, subsurface_anisotropy) | ||||
| NODE_SOCKET_API(ClosureType, falloff) | NODE_SOCKET_API(ClosureType, method) | ||||
| }; | }; | ||||
| class EmissionNode : public ShaderNode { | class EmissionNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(EmissionNode) | SHADER_NODE_CLASS(EmissionNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| bool has_surface_emission() | bool has_surface_emission() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool has_volume_support() | bool has_volume_support() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_feature() | |||||
| { | |||||
| return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_EMISSION; | |||||
| } | |||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(float, strength) | NODE_SOCKET_API(float, strength) | ||||
| NODE_SOCKET_API(float, surface_mix_weight) | NODE_SOCKET_API(float, surface_mix_weight) | ||||
| }; | }; | ||||
| class BackgroundNode : public ShaderNode { | class BackgroundNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(BackgroundNode) | SHADER_NODE_CLASS(BackgroundNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_feature() | |||||
| { | |||||
| return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_EMISSION; | |||||
| } | |||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(float, strength) | NODE_SOCKET_API(float, strength) | ||||
| NODE_SOCKET_API(float, surface_mix_weight) | NODE_SOCKET_API(float, surface_mix_weight) | ||||
| }; | }; | ||||
| class HoldoutNode : public ShaderNode { | class HoldoutNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(HoldoutNode) | SHADER_NODE_CLASS(HoldoutNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| virtual ClosureType get_closure_type() | virtual ClosureType get_closure_type() | ||||
| { | { | ||||
| return CLOSURE_HOLDOUT_ID; | return CLOSURE_HOLDOUT_ID; | ||||
| } | } | ||||
| NODE_SOCKET_API(float, surface_mix_weight) | NODE_SOCKET_API(float, surface_mix_weight) | ||||
| NODE_SOCKET_API(float, volume_mix_weight) | NODE_SOCKET_API(float, volume_mix_weight) | ||||
| }; | }; | ||||
| class AmbientOcclusionNode : public ShaderNode { | class AmbientOcclusionNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(AmbientOcclusionNode) | SHADER_NODE_CLASS(AmbientOcclusionNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | virtual int get_feature() | ||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| virtual bool has_raytrace() | |||||
| { | { | ||||
| return true; | return KERNEL_FEATURE_NODE_RAYTRACE; | ||||
| } | } | ||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(float, distance) | NODE_SOCKET_API(float, distance) | ||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| NODE_SOCKET_API(int, samples) | NODE_SOCKET_API(int, samples) | ||||
| NODE_SOCKET_API(bool, only_local) | NODE_SOCKET_API(bool, only_local) | ||||
| NODE_SOCKET_API(bool, inside) | NODE_SOCKET_API(bool, inside) | ||||
| }; | }; | ||||
| class VolumeNode : public ShaderNode { | class VolumeNode : public ShaderNode { | ||||
| public: | public: | ||||
| VolumeNode(const NodeType *node_type); | VolumeNode(const NodeType *node_type); | ||||
| SHADER_NODE_BASE_CLASS(VolumeNode) | SHADER_NODE_BASE_CLASS(VolumeNode) | ||||
| void compile(SVMCompiler &compiler, ShaderInput *param1, ShaderInput *param2); | void compile(SVMCompiler &compiler, ShaderInput *param1, ShaderInput *param2); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| virtual int get_feature() | virtual int get_feature() | ||||
| { | { | ||||
| return ShaderNode::get_feature() | NODE_FEATURE_VOLUME; | return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_VOLUME; | ||||
| } | } | ||||
| virtual ClosureType get_closure_type() | virtual ClosureType get_closure_type() | ||||
| { | { | ||||
| return closure; | return closure; | ||||
| } | } | ||||
| virtual bool has_volume_support() | virtual bool has_volume_support() | ||||
| { | { | ||||
| return true; | return true; | ||||
| ▲ Show 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | public: | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| NODE_SOCKET_API(ustring, attribute) | NODE_SOCKET_API(ustring, attribute) | ||||
| NODE_SOCKET_API(bool, from_dupli) | NODE_SOCKET_API(bool, from_dupli) | ||||
| }; | }; | ||||
| class LightPathNode : public ShaderNode { | class LightPathNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(LightPathNode) | SHADER_NODE_CLASS(LightPathNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| }; | }; | ||||
| class LightFalloffNode : public ShaderNode { | class LightFalloffNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(LightFalloffNode) | SHADER_NODE_CLASS(LightFalloffNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(float, strength) | NODE_SOCKET_API(float, strength) | ||||
| NODE_SOCKET_API(float, smooth) | NODE_SOCKET_API(float, smooth) | ||||
| }; | }; | ||||
| class ObjectInfoNode : public ShaderNode { | class ObjectInfoNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(ObjectInfoNode) | SHADER_NODE_CLASS(ObjectInfoNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| }; | }; | ||||
| class ParticleInfoNode : public ShaderNode { | class ParticleInfoNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(ParticleInfoNode) | SHADER_NODE_CLASS(ParticleInfoNode) | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| }; | }; | ||||
| class HairInfoNode : public ShaderNode { | class HairInfoNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(HairInfoNode) | SHADER_NODE_CLASS(HairInfoNode) | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| virtual int get_feature() | virtual int get_feature() | ||||
| { | { | ||||
| return ShaderNode::get_feature() | NODE_FEATURE_HAIR; | return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_HAIR; | ||||
| } | } | ||||
| }; | }; | ||||
| class VolumeInfoNode : public ShaderNode { | class VolumeInfoNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(VolumeInfoNode) | SHADER_NODE_CLASS(VolumeInfoNode) | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| ▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | public: | ||||
| NODE_SOCKET_API(float, weight) | NODE_SOCKET_API(float, weight) | ||||
| NODE_SOCKET_API(float, fac) | NODE_SOCKET_API(float, fac) | ||||
| }; | }; | ||||
| class InvertNode : public ShaderNode { | class InvertNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(InvertNode) | SHADER_NODE_CLASS(InvertNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, fac) | NODE_SOCKET_API(float, fac) | ||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| }; | }; | ||||
| class MixNode : public ShaderNode { | class MixNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(MixNode) | SHADER_NODE_CLASS(MixNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(NodeMix, mix_type) | NODE_SOCKET_API(NodeMix, mix_type) | ||||
| NODE_SOCKET_API(bool, use_clamp) | NODE_SOCKET_API(bool, use_clamp) | ||||
| NODE_SOCKET_API(float3, color1) | NODE_SOCKET_API(float3, color1) | ||||
| NODE_SOCKET_API(float3, color2) | NODE_SOCKET_API(float3, color2) | ||||
| NODE_SOCKET_API(float, fac) | NODE_SOCKET_API(float, fac) | ||||
| }; | }; | ||||
| class CombineRGBNode : public ShaderNode { | class CombineRGBNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(CombineRGBNode) | SHADER_NODE_CLASS(CombineRGBNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, r) | NODE_SOCKET_API(float, r) | ||||
| NODE_SOCKET_API(float, g) | NODE_SOCKET_API(float, g) | ||||
| NODE_SOCKET_API(float, b) | NODE_SOCKET_API(float, b) | ||||
| }; | }; | ||||
| class CombineHSVNode : public ShaderNode { | class CombineHSVNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(CombineHSVNode) | SHADER_NODE_CLASS(CombineHSVNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, h) | NODE_SOCKET_API(float, h) | ||||
| NODE_SOCKET_API(float, s) | NODE_SOCKET_API(float, s) | ||||
| NODE_SOCKET_API(float, v) | NODE_SOCKET_API(float, v) | ||||
| }; | }; | ||||
| class CombineXYZNode : public ShaderNode { | class CombineXYZNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(CombineXYZNode) | SHADER_NODE_CLASS(CombineXYZNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, x) | NODE_SOCKET_API(float, x) | ||||
| NODE_SOCKET_API(float, y) | NODE_SOCKET_API(float, y) | ||||
| NODE_SOCKET_API(float, z) | NODE_SOCKET_API(float, z) | ||||
| }; | }; | ||||
| class GammaNode : public ShaderNode { | class GammaNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(GammaNode) | SHADER_NODE_CLASS(GammaNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(float, gamma) | NODE_SOCKET_API(float, gamma) | ||||
| }; | }; | ||||
| class BrightContrastNode : public ShaderNode { | class BrightContrastNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(BrightContrastNode) | SHADER_NODE_CLASS(BrightContrastNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(float, bright) | NODE_SOCKET_API(float, bright) | ||||
| NODE_SOCKET_API(float, contrast) | NODE_SOCKET_API(float, contrast) | ||||
| }; | }; | ||||
| class SeparateRGBNode : public ShaderNode { | class SeparateRGBNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(SeparateRGBNode) | SHADER_NODE_CLASS(SeparateRGBNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| }; | }; | ||||
| class SeparateHSVNode : public ShaderNode { | class SeparateHSVNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(SeparateHSVNode) | SHADER_NODE_CLASS(SeparateHSVNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| }; | }; | ||||
| class SeparateXYZNode : public ShaderNode { | class SeparateXYZNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(SeparateXYZNode) | SHADER_NODE_CLASS(SeparateXYZNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class HSVNode : public ShaderNode { | class HSVNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(HSVNode) | SHADER_NODE_CLASS(HSVNode) | ||||
| Show All 22 Lines | |||||
| class CameraNode : public ShaderNode { | class CameraNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(CameraNode) | SHADER_NODE_CLASS(CameraNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| }; | }; | ||||
| class FresnelNode : public ShaderNode { | class FresnelNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(FresnelNode) | SHADER_NODE_CLASS(FresnelNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| NODE_SOCKET_API(float, IOR) | NODE_SOCKET_API(float, IOR) | ||||
| }; | }; | ||||
| class LayerWeightNode : public ShaderNode { | class LayerWeightNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(LayerWeightNode) | SHADER_NODE_CLASS(LayerWeightNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| NODE_SOCKET_API(float, blend) | NODE_SOCKET_API(float, blend) | ||||
| }; | }; | ||||
| class WireframeNode : public ShaderNode { | class WireframeNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(WireframeNode) | SHADER_NODE_CLASS(WireframeNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, size) | NODE_SOCKET_API(float, size) | ||||
| NODE_SOCKET_API(bool, use_pixel_size) | NODE_SOCKET_API(bool, use_pixel_size) | ||||
| }; | }; | ||||
| class WavelengthNode : public ShaderNode { | class WavelengthNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(WavelengthNode) | SHADER_NODE_CLASS(WavelengthNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, wavelength) | NODE_SOCKET_API(float, wavelength) | ||||
| }; | }; | ||||
| class BlackbodyNode : public ShaderNode { | class BlackbodyNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(BlackbodyNode) | SHADER_NODE_CLASS(BlackbodyNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, temperature) | NODE_SOCKET_API(float, temperature) | ||||
| }; | }; | ||||
| class MapRangeNode : public ShaderNode { | class MapRangeNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(MapRangeNode) | SHADER_NODE_CLASS(MapRangeNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| void expand(ShaderGraph *graph); | void expand(ShaderGraph *graph); | ||||
| NODE_SOCKET_API(float, value) | NODE_SOCKET_API(float, value) | ||||
| NODE_SOCKET_API(float, from_min) | NODE_SOCKET_API(float, from_min) | ||||
| NODE_SOCKET_API(float, from_max) | NODE_SOCKET_API(float, from_max) | ||||
| NODE_SOCKET_API(float, to_min) | NODE_SOCKET_API(float, to_min) | ||||
| NODE_SOCKET_API(float, to_max) | NODE_SOCKET_API(float, to_max) | ||||
| NODE_SOCKET_API(float, steps) | NODE_SOCKET_API(float, steps) | ||||
| NODE_SOCKET_API(NodeMapRangeType, range_type) | NODE_SOCKET_API(NodeMapRangeType, range_type) | ||||
| NODE_SOCKET_API(bool, clamp) | NODE_SOCKET_API(bool, clamp) | ||||
| }; | }; | ||||
| class ClampNode : public ShaderNode { | class ClampNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(ClampNode) | SHADER_NODE_CLASS(ClampNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(float, value) | NODE_SOCKET_API(float, value) | ||||
| NODE_SOCKET_API(float, min) | NODE_SOCKET_API(float, min) | ||||
| NODE_SOCKET_API(float, max) | NODE_SOCKET_API(float, max) | ||||
| NODE_SOCKET_API(NodeClampType, clamp_type) | NODE_SOCKET_API(NodeClampType, clamp_type) | ||||
| }; | }; | ||||
| class MathNode : public ShaderNode { | class MathNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(MathNode) | SHADER_NODE_CLASS(MathNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| void expand(ShaderGraph *graph); | void expand(ShaderGraph *graph); | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| NODE_SOCKET_API(float, value1) | NODE_SOCKET_API(float, value1) | ||||
| NODE_SOCKET_API(float, value2) | NODE_SOCKET_API(float, value2) | ||||
| NODE_SOCKET_API(float, value3) | NODE_SOCKET_API(float, value3) | ||||
| NODE_SOCKET_API(NodeMathType, math_type) | NODE_SOCKET_API(NodeMathType, math_type) | ||||
| NODE_SOCKET_API(bool, use_clamp) | NODE_SOCKET_API(bool, use_clamp) | ||||
| }; | }; | ||||
| class NormalNode : public ShaderNode { | class NormalNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(NormalNode) | SHADER_NODE_CLASS(NormalNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_2; | |||||
| } | |||||
| NODE_SOCKET_API(float3, direction) | NODE_SOCKET_API(float3, direction) | ||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| }; | }; | ||||
| class VectorMathNode : public ShaderNode { | class VectorMathNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(VectorMathNode) | SHADER_NODE_CLASS(VectorMathNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| NODE_SOCKET_API(float3, vector1) | NODE_SOCKET_API(float3, vector1) | ||||
| NODE_SOCKET_API(float3, vector2) | NODE_SOCKET_API(float3, vector2) | ||||
| NODE_SOCKET_API(float3, vector3) | NODE_SOCKET_API(float3, vector3) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(NodeVectorMathType, math_type) | NODE_SOCKET_API(NodeVectorMathType, math_type) | ||||
| }; | }; | ||||
| class VectorRotateNode : public ShaderNode { | class VectorRotateNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(VectorRotateNode) | SHADER_NODE_CLASS(VectorRotateNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(NodeVectorRotateType, rotate_type) | NODE_SOCKET_API(NodeVectorRotateType, rotate_type) | ||||
| NODE_SOCKET_API(bool, invert) | NODE_SOCKET_API(bool, invert) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| NODE_SOCKET_API(float3, center) | NODE_SOCKET_API(float3, center) | ||||
| NODE_SOCKET_API(float3, axis) | NODE_SOCKET_API(float3, axis) | ||||
| NODE_SOCKET_API(float, angle) | NODE_SOCKET_API(float, angle) | ||||
| NODE_SOCKET_API(float3, rotation) | NODE_SOCKET_API(float3, rotation) | ||||
| }; | }; | ||||
| class VectorTransformNode : public ShaderNode { | class VectorTransformNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(VectorTransformNode) | SHADER_NODE_CLASS(VectorTransformNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(NodeVectorTransformType, transform_type) | NODE_SOCKET_API(NodeVectorTransformType, transform_type) | ||||
| NODE_SOCKET_API(NodeVectorTransformConvertSpace, convert_from) | NODE_SOCKET_API(NodeVectorTransformConvertSpace, convert_from) | ||||
| NODE_SOCKET_API(NodeVectorTransformConvertSpace, convert_to) | NODE_SOCKET_API(NodeVectorTransformConvertSpace, convert_to) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| }; | }; | ||||
| class BumpNode : public ShaderNode { | class BumpNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(BumpNode) | SHADER_NODE_CLASS(BumpNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_feature() | virtual int get_feature() | ||||
| { | { | ||||
| return NODE_FEATURE_BUMP; | return KERNEL_FEATURE_NODE_BUMP; | ||||
| } | } | ||||
| NODE_SOCKET_API(bool, invert) | NODE_SOCKET_API(bool, invert) | ||||
| NODE_SOCKET_API(bool, use_object_space) | NODE_SOCKET_API(bool, use_object_space) | ||||
| NODE_SOCKET_API(float, height) | NODE_SOCKET_API(float, height) | ||||
| NODE_SOCKET_API(float, sample_center) | NODE_SOCKET_API(float, sample_center) | ||||
| NODE_SOCKET_API(float, sample_x) | NODE_SOCKET_API(float, sample_x) | ||||
| NODE_SOCKET_API(float, sample_y) | NODE_SOCKET_API(float, sample_y) | ||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| NODE_SOCKET_API(float, strength) | NODE_SOCKET_API(float, strength) | ||||
| NODE_SOCKET_API(float, distance) | NODE_SOCKET_API(float, distance) | ||||
| }; | }; | ||||
| class CurvesNode : public ShaderNode { | class CurvesNode : public ShaderNode { | ||||
| public: | public: | ||||
| explicit CurvesNode(const NodeType *node_type); | explicit CurvesNode(const NodeType *node_type); | ||||
| SHADER_NODE_BASE_CLASS(CurvesNode) | SHADER_NODE_BASE_CLASS(CurvesNode) | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(array<float3>, curves) | NODE_SOCKET_API(array<float3>, curves) | ||||
| NODE_SOCKET_API(float, min_x) | NODE_SOCKET_API(float, min_x) | ||||
| NODE_SOCKET_API(float, max_x) | NODE_SOCKET_API(float, max_x) | ||||
| NODE_SOCKET_API(float, fac) | NODE_SOCKET_API(float, fac) | ||||
| NODE_SOCKET_API(float3, value) | NODE_SOCKET_API(float3, value) | ||||
| protected: | protected: | ||||
| using ShaderNode::constant_fold; | using ShaderNode::constant_fold; | ||||
| Show All 13 Lines | public: | ||||
| SHADER_NODE_CLASS(VectorCurvesNode) | SHADER_NODE_CLASS(VectorCurvesNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| }; | }; | ||||
| class RGBRampNode : public ShaderNode { | class RGBRampNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(RGBRampNode) | SHADER_NODE_CLASS(RGBRampNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_1; | |||||
| } | |||||
| NODE_SOCKET_API(array<float3>, ramp) | NODE_SOCKET_API(array<float3>, ramp) | ||||
| NODE_SOCKET_API(array<float>, ramp_alpha) | NODE_SOCKET_API(array<float>, ramp_alpha) | ||||
| NODE_SOCKET_API(float, fac) | NODE_SOCKET_API(float, fac) | ||||
| NODE_SOCKET_API(bool, interpolate) | NODE_SOCKET_API(bool, interpolate) | ||||
| }; | }; | ||||
| class SetNormalNode : public ShaderNode { | class SetNormalNode : public ShaderNode { | ||||
| ▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | public: | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(NodeNormalMapSpace, space) | NODE_SOCKET_API(NodeNormalMapSpace, space) | ||||
| NODE_SOCKET_API(ustring, attribute) | NODE_SOCKET_API(ustring, attribute) | ||||
| NODE_SOCKET_API(float, strength) | NODE_SOCKET_API(float, strength) | ||||
| NODE_SOCKET_API(float3, color) | NODE_SOCKET_API(float3, color) | ||||
| NODE_SOCKET_API(float3, normal_osl) | NODE_SOCKET_API(float3, normal_osl) | ||||
| }; | }; | ||||
| class TangentNode : public ShaderNode { | class TangentNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(TangentNode) | SHADER_NODE_CLASS(TangentNode) | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | |||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| NODE_SOCKET_API(NodeTangentDirectionType, direction_type) | NODE_SOCKET_API(NodeTangentDirectionType, direction_type) | ||||
| NODE_SOCKET_API(NodeTangentAxis, axis) | NODE_SOCKET_API(NodeTangentAxis, axis) | ||||
| NODE_SOCKET_API(ustring, attribute) | NODE_SOCKET_API(ustring, attribute) | ||||
| NODE_SOCKET_API(float3, normal_osl) | NODE_SOCKET_API(float3, normal_osl) | ||||
| }; | }; | ||||
| class BevelNode : public ShaderNode { | class BevelNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(BevelNode) | SHADER_NODE_CLASS(BevelNode) | ||||
| bool has_spatial_varying() | bool has_spatial_varying() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| virtual int get_group() | virtual int get_feature() | ||||
| { | |||||
| return NODE_GROUP_LEVEL_3; | |||||
| } | |||||
| virtual bool has_raytrace() | |||||
| { | { | ||||
| return true; | return KERNEL_FEATURE_NODE_RAYTRACE; | ||||
| } | } | ||||
| NODE_SOCKET_API(float, radius) | NODE_SOCKET_API(float, radius) | ||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| NODE_SOCKET_API(int, samples) | NODE_SOCKET_API(int, samples) | ||||
| }; | }; | ||||
| class DisplacementNode : public ShaderNode { | class DisplacementNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(DisplacementNode) | SHADER_NODE_CLASS(DisplacementNode) | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_feature() | virtual int get_feature() | ||||
| { | { | ||||
| return NODE_FEATURE_BUMP; | return KERNEL_FEATURE_NODE_BUMP; | ||||
| } | } | ||||
| NODE_SOCKET_API(NodeNormalMapSpace, space) | NODE_SOCKET_API(NodeNormalMapSpace, space) | ||||
| NODE_SOCKET_API(float, height) | NODE_SOCKET_API(float, height) | ||||
| NODE_SOCKET_API(float, midlevel) | NODE_SOCKET_API(float, midlevel) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| NODE_SOCKET_API(float3, normal) | NODE_SOCKET_API(float3, normal) | ||||
| }; | }; | ||||
| class VectorDisplacementNode : public ShaderNode { | class VectorDisplacementNode : public ShaderNode { | ||||
| public: | public: | ||||
| SHADER_NODE_CLASS(VectorDisplacementNode) | SHADER_NODE_CLASS(VectorDisplacementNode) | ||||
| void attributes(Shader *shader, AttributeRequestSet *attributes); | void attributes(Shader *shader, AttributeRequestSet *attributes); | ||||
| bool has_attribute_dependency() | bool has_attribute_dependency() | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| void constant_fold(const ConstantFolder &folder); | void constant_fold(const ConstantFolder &folder); | ||||
| virtual int get_feature() | virtual int get_feature() | ||||
| { | { | ||||
| return NODE_FEATURE_BUMP; | return KERNEL_FEATURE_NODE_BUMP; | ||||
| } | } | ||||
| NODE_SOCKET_API(NodeNormalMapSpace, space) | NODE_SOCKET_API(NodeNormalMapSpace, space) | ||||
| NODE_SOCKET_API(ustring, attribute) | NODE_SOCKET_API(ustring, attribute) | ||||
| NODE_SOCKET_API(float3, vector) | NODE_SOCKET_API(float3, vector) | ||||
| NODE_SOCKET_API(float, midlevel) | NODE_SOCKET_API(float, midlevel) | ||||
| NODE_SOCKET_API(float, scale) | NODE_SOCKET_API(float, scale) | ||||
| }; | }; | ||||
| CCL_NAMESPACE_END | CCL_NAMESPACE_END | ||||
| #endif /* __NODES_H__ */ | #endif /* __NODES_H__ */ | ||||