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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2021-09-20 18:59:20 +0300
committerBrecht Van Lommel <brecht@blender.org>2021-09-21 15:55:54 +0300
commit08031197250aeecbaca3803254e6f25b8c7b7b37 (patch)
tree6fe7ab045f0dc0a423d6557c4073f34309ef4740 /intern/cycles/render/nodes.h
parentfa6b1007bad065440950cd67deb16a04f368856f (diff)
Cycles: merge of cycles-x branch, a major update to the renderer
This includes much improved GPU rendering performance, viewport interactivity, new shadow catcher, revamped sampling settings, subsurface scattering anisotropy, new GPU volume sampling, improved PMJ sampling pattern, and more. Some features have also been removed or changed, breaking backwards compatibility. Including the removal of the OpenCL backend, for which alternatives are under development. Release notes and code docs: https://wiki.blender.org/wiki/Reference/Release_Notes/3.0/Cycles https://wiki.blender.org/wiki/Source/Render/Cycles Credits: * Sergey Sharybin * Brecht Van Lommel * Patrick Mours (OptiX backend) * Christophe Hery (subsurface scattering anisotropy) * William Leeson (PMJ sampling pattern) * Alaska (various fixes and tweaks) * Thomas Dinges (various fixes) For the full commit history, see the cycles-x branch. This squashes together all the changes since intermediate changes would often fail building or tests. Ref T87839, T87837, T87836 Fixes T90734, T89353, T80267, T80267, T77185, T69800
Diffstat (limited to 'intern/cycles/render/nodes.h')
-rw-r--r--intern/cycles/render/nodes.h267
1 files changed, 35 insertions, 232 deletions
diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h
index 3013e9b1866..22bdb06b059 100644
--- a/intern/cycles/render/nodes.h
+++ b/intern/cycles/render/nodes.h
@@ -143,10 +143,6 @@ class EnvironmentTextureNode : public ImageSlotTextureNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
virtual bool equals(const ShaderNode &other)
{
@@ -170,11 +166,6 @@ class SkyTextureNode : public TextureNode {
public:
SHADER_NODE_CLASS(SkyTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
-
NODE_SOCKET_API(NodeSkyType, sky_type)
NODE_SOCKET_API(float3, sun_direction)
NODE_SOCKET_API(float, turbidity)
@@ -224,18 +215,13 @@ class OutputAOVNode : public ShaderNode {
NODE_SOCKET_API(ustring, name)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_4;
- }
-
/* Don't allow output node de-duplication. */
virtual bool equals(const ShaderNode & /*other*/)
{
return false;
}
- int slot;
+ int offset;
bool is_color;
};
@@ -243,11 +229,6 @@ class GradientTextureNode : public TextureNode {
public:
SHADER_NODE_CLASS(GradientTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
-
NODE_SOCKET_API(NodeGradientType, gradient_type)
NODE_SOCKET_API(float3, vector)
};
@@ -269,19 +250,14 @@ class VoronoiTextureNode : public TextureNode {
public:
SHADER_NODE_CLASS(VoronoiTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
-
virtual int get_feature()
{
int result = ShaderNode::get_feature();
if (dimensions == 4) {
- result |= NODE_FEATURE_VORONOI_EXTRA;
+ result |= KERNEL_FEATURE_NODE_VORONOI_EXTRA;
}
else if (dimensions >= 2 && feature == NODE_VORONOI_SMOOTH_F1) {
- result |= NODE_FEATURE_VORONOI_EXTRA;
+ result |= KERNEL_FEATURE_NODE_VORONOI_EXTRA;
}
return result;
}
@@ -301,11 +277,6 @@ class MusgraveTextureNode : public TextureNode {
public:
SHADER_NODE_CLASS(MusgraveTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
-
NODE_SOCKET_API(int, dimensions)
NODE_SOCKET_API(NodeMusgraveType, musgrave_type)
NODE_SOCKET_API(float, w)
@@ -322,11 +293,6 @@ class WaveTextureNode : public TextureNode {
public:
SHADER_NODE_CLASS(WaveTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
-
NODE_SOCKET_API(NodeWaveType, wave_type)
NODE_SOCKET_API(NodeWaveBandsDirection, bands_direction)
NODE_SOCKET_API(NodeWaveRingsDirection, rings_direction)
@@ -345,11 +311,6 @@ class MagicTextureNode : public TextureNode {
public:
SHADER_NODE_CLASS(MagicTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
-
NODE_SOCKET_API(int, depth)
NODE_SOCKET_API(float3, vector)
NODE_SOCKET_API(float, scale)
@@ -364,11 +325,6 @@ class CheckerTextureNode : public TextureNode {
NODE_SOCKET_API(float3, color1)
NODE_SOCKET_API(float3, color2)
NODE_SOCKET_API(float, scale)
-
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
};
class BrickTextureNode : public TextureNode {
@@ -390,20 +346,11 @@ class BrickTextureNode : public TextureNode {
NODE_SOCKET_API(float, brick_width)
NODE_SOCKET_API(float, row_height)
NODE_SOCKET_API(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_4;
- }
~PointDensityTextureNode();
ShaderNode *clone(ShaderGraph *graph) const;
@@ -443,10 +390,6 @@ class IESLightNode : public TextureNode {
~IESLightNode();
ShaderNode *clone(ShaderGraph *graph) const;
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
NODE_SOCKET_API(ustring, filename)
NODE_SOCKET_API(ustring, ies)
@@ -464,10 +407,6 @@ class IESLightNode : public TextureNode {
class WhiteNoiseTextureNode : public ShaderNode {
public:
SHADER_NODE_CLASS(WhiteNoiseTextureNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
NODE_SOCKET_API(int, dimensions)
NODE_SOCKET_API(float3, vector)
@@ -477,10 +416,6 @@ class WhiteNoiseTextureNode : public ShaderNode {
class MappingNode : public ShaderNode {
public:
SHADER_NODE_CLASS(MappingNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
void constant_fold(const ConstantFolder &folder);
NODE_SOCKET_API(float3, vector)
@@ -546,6 +481,11 @@ class BsdfBaseNode : public ShaderNode {
return false;
}
+ virtual int get_feature()
+ {
+ return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_BSDF;
+ }
+
protected:
ClosureType closure;
};
@@ -606,6 +546,8 @@ class PrincipledBsdfNode : public BsdfBaseNode {
ShaderInput *metallic,
ShaderInput *subsurface,
ShaderInput *subsurface_radius,
+ ShaderInput *subsurface_ior,
+ ShaderInput *subsurface_anisotropy,
ShaderInput *specular,
ShaderInput *roughness,
ShaderInput *specular_tint,
@@ -622,6 +564,8 @@ class PrincipledBsdfNode : public BsdfBaseNode {
NODE_SOCKET_API(float3, base_color)
NODE_SOCKET_API(float3, subsurface_color)
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, subsurface)
NODE_SOCKET_API(float, specular)
@@ -758,14 +702,14 @@ class SubsurfaceScatteringNode : public BsdfNode {
bool has_bssrdf_bump();
ClosureType get_closure_type()
{
- return falloff;
+ return method;
}
NODE_SOCKET_API(float, scale)
NODE_SOCKET_API(float3, radius)
- NODE_SOCKET_API(float, sharpness)
- NODE_SOCKET_API(float, texture_blur)
- NODE_SOCKET_API(ClosureType, falloff)
+ NODE_SOCKET_API(float, subsurface_ior)
+ NODE_SOCKET_API(float, subsurface_anisotropy)
+ NODE_SOCKET_API(ClosureType, method)
};
class EmissionNode : public ShaderNode {
@@ -782,6 +726,11 @@ class EmissionNode : public ShaderNode {
return true;
}
+ virtual int get_feature()
+ {
+ return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_EMISSION;
+ }
+
NODE_SOCKET_API(float3, color)
NODE_SOCKET_API(float, strength)
NODE_SOCKET_API(float, surface_mix_weight)
@@ -792,6 +741,11 @@ class BackgroundNode : public ShaderNode {
SHADER_NODE_CLASS(BackgroundNode)
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(float, strength)
NODE_SOCKET_API(float, surface_mix_weight)
@@ -800,10 +754,6 @@ class BackgroundNode : public ShaderNode {
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;
@@ -821,13 +771,9 @@ class AmbientOcclusionNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- virtual bool has_raytrace()
+ virtual int get_feature()
{
- return true;
+ return KERNEL_FEATURE_NODE_RAYTRACE;
}
NODE_SOCKET_API(float3, color)
@@ -845,13 +791,9 @@ class VolumeNode : public ShaderNode {
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;
+ return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_VOLUME;
}
virtual ClosureType get_closure_type()
{
@@ -1013,10 +955,6 @@ class UVMapNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
NODE_SOCKET_API(ustring, attribute)
NODE_SOCKET_API(bool, from_dupli)
@@ -1025,10 +963,6 @@ class UVMapNode : public ShaderNode {
class LightPathNode : public ShaderNode {
public:
SHADER_NODE_CLASS(LightPathNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
};
class LightFalloffNode : public ShaderNode {
@@ -1038,10 +972,6 @@ class LightFalloffNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
NODE_SOCKET_API(float, strength)
NODE_SOCKET_API(float, smooth)
@@ -1050,10 +980,6 @@ class LightFalloffNode : public ShaderNode {
class ObjectInfoNode : public ShaderNode {
public:
SHADER_NODE_CLASS(ObjectInfoNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
};
class ParticleInfoNode : public ShaderNode {
@@ -1064,10 +990,6 @@ class ParticleInfoNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
};
class HairInfoNode : public ShaderNode {
@@ -1083,13 +1005,9 @@ class HairInfoNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
virtual int get_feature()
{
- return ShaderNode::get_feature() | NODE_FEATURE_HAIR;
+ return ShaderNode::get_feature() | KERNEL_FEATURE_NODE_HAIR;
}
};
@@ -1168,10 +1086,6 @@ class InvertNode : public ShaderNode {
public:
SHADER_NODE_CLASS(InvertNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, fac)
NODE_SOCKET_API(float3, color)
@@ -1182,11 +1096,6 @@ class MixNode : public ShaderNode {
SHADER_NODE_CLASS(MixNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
-
NODE_SOCKET_API(NodeMix, mix_type)
NODE_SOCKET_API(bool, use_clamp)
NODE_SOCKET_API(float3, color1)
@@ -1198,10 +1107,6 @@ class CombineRGBNode : public ShaderNode {
public:
SHADER_NODE_CLASS(CombineRGBNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, r)
NODE_SOCKET_API(float, g)
@@ -1212,10 +1117,6 @@ class CombineHSVNode : public ShaderNode {
public:
SHADER_NODE_CLASS(CombineHSVNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, h)
NODE_SOCKET_API(float, s)
@@ -1226,10 +1127,6 @@ class CombineXYZNode : public ShaderNode {
public:
SHADER_NODE_CLASS(CombineXYZNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, x)
NODE_SOCKET_API(float, y)
@@ -1240,10 +1137,6 @@ class GammaNode : public ShaderNode {
public:
SHADER_NODE_CLASS(GammaNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
NODE_SOCKET_API(float3, color)
NODE_SOCKET_API(float, gamma)
@@ -1253,10 +1146,6 @@ class BrightContrastNode : public ShaderNode {
public:
SHADER_NODE_CLASS(BrightContrastNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
NODE_SOCKET_API(float3, color)
NODE_SOCKET_API(float, bright)
@@ -1267,10 +1156,6 @@ class SeparateRGBNode : public ShaderNode {
public:
SHADER_NODE_CLASS(SeparateRGBNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float3, color)
};
@@ -1279,10 +1164,6 @@ class SeparateHSVNode : public ShaderNode {
public:
SHADER_NODE_CLASS(SeparateHSVNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float3, color)
};
@@ -1291,10 +1172,6 @@ class SeparateXYZNode : public ShaderNode {
public:
SHADER_NODE_CLASS(SeparateXYZNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float3, vector)
};
@@ -1333,10 +1210,6 @@ class CameraNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
};
class FresnelNode : public ShaderNode {
@@ -1346,10 +1219,6 @@ class FresnelNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
NODE_SOCKET_API(float3, normal)
NODE_SOCKET_API(float, IOR)
@@ -1362,10 +1231,6 @@ class LayerWeightNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
NODE_SOCKET_API(float3, normal)
NODE_SOCKET_API(float, blend)
@@ -1378,10 +1243,6 @@ class WireframeNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, size)
NODE_SOCKET_API(bool, use_pixel_size)
@@ -1390,10 +1251,6 @@ class WireframeNode : public ShaderNode {
class WavelengthNode : public ShaderNode {
public:
SHADER_NODE_CLASS(WavelengthNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, wavelength)
};
@@ -1402,10 +1259,6 @@ class BlackbodyNode : public ShaderNode {
public:
SHADER_NODE_CLASS(BlackbodyNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, temperature)
};
@@ -1413,10 +1266,6 @@ class BlackbodyNode : public ShaderNode {
class MapRangeNode : public ShaderNode {
public:
SHADER_NODE_CLASS(MapRangeNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
void expand(ShaderGraph *graph);
NODE_SOCKET_API(float, value)
@@ -1433,10 +1282,6 @@ class ClampNode : public ShaderNode {
public:
SHADER_NODE_CLASS(ClampNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(float, value)
NODE_SOCKET_API(float, min)
NODE_SOCKET_API(float, max)
@@ -1446,10 +1291,6 @@ class ClampNode : public ShaderNode {
class MathNode : public ShaderNode {
public:
SHADER_NODE_CLASS(MathNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
void expand(ShaderGraph *graph);
void constant_fold(const ConstantFolder &folder);
@@ -1463,10 +1304,6 @@ class MathNode : public ShaderNode {
class NormalNode : public ShaderNode {
public:
SHADER_NODE_CLASS(NormalNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_2;
- }
NODE_SOCKET_API(float3, direction)
NODE_SOCKET_API(float3, normal)
@@ -1475,10 +1312,6 @@ class NormalNode : public ShaderNode {
class VectorMathNode : public ShaderNode {
public:
SHADER_NODE_CLASS(VectorMathNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
void constant_fold(const ConstantFolder &folder);
NODE_SOCKET_API(float3, vector1)
@@ -1492,10 +1325,6 @@ class VectorRotateNode : public ShaderNode {
public:
SHADER_NODE_CLASS(VectorRotateNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(NodeVectorRotateType, rotate_type)
NODE_SOCKET_API(bool, invert)
NODE_SOCKET_API(float3, vector)
@@ -1509,11 +1338,6 @@ class VectorTransformNode : public ShaderNode {
public:
SHADER_NODE_CLASS(VectorTransformNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
-
NODE_SOCKET_API(NodeVectorTransformType, transform_type)
NODE_SOCKET_API(NodeVectorTransformConvertSpace, convert_from)
NODE_SOCKET_API(NodeVectorTransformConvertSpace, convert_to)
@@ -1530,7 +1354,7 @@ class BumpNode : public ShaderNode {
}
virtual int get_feature()
{
- return NODE_FEATURE_BUMP;
+ return KERNEL_FEATURE_NODE_BUMP;
}
NODE_SOCKET_API(bool, invert)
@@ -1549,11 +1373,6 @@ class CurvesNode : public ShaderNode {
explicit CurvesNode(const NodeType *node_type);
SHADER_NODE_BASE_CLASS(CurvesNode)
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
-
NODE_SOCKET_API_ARRAY(array<float3>, curves)
NODE_SOCKET_API(float, min_x)
NODE_SOCKET_API(float, max_x)
@@ -1583,10 +1402,6 @@ class RGBRampNode : public ShaderNode {
public:
SHADER_NODE_CLASS(RGBRampNode)
void constant_fold(const ConstantFolder &folder);
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_1;
- }
NODE_SOCKET_API_ARRAY(array<float3>, ramp)
NODE_SOCKET_API_ARRAY(array<float>, ramp_alpha)
@@ -1656,10 +1471,6 @@ class NormalMapNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(NodeNormalMapSpace, space)
NODE_SOCKET_API(ustring, attribute)
@@ -1680,10 +1491,6 @@ class TangentNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
NODE_SOCKET_API(NodeTangentDirectionType, direction_type)
NODE_SOCKET_API(NodeTangentAxis, axis)
@@ -1698,13 +1505,9 @@ class BevelNode : public ShaderNode {
{
return true;
}
- virtual int get_group()
- {
- return NODE_GROUP_LEVEL_3;
- }
- virtual bool has_raytrace()
+ virtual int get_feature()
{
- return true;
+ return KERNEL_FEATURE_NODE_RAYTRACE;
}
NODE_SOCKET_API(float, radius)
@@ -1718,7 +1521,7 @@ class DisplacementNode : public ShaderNode {
void constant_fold(const ConstantFolder &folder);
virtual int get_feature()
{
- return NODE_FEATURE_BUMP;
+ return KERNEL_FEATURE_NODE_BUMP;
}
NODE_SOCKET_API(NodeNormalMapSpace, space)
@@ -1739,7 +1542,7 @@ class VectorDisplacementNode : public ShaderNode {
void constant_fold(const ConstantFolder &folder);
virtual int get_feature()
{
- return NODE_FEATURE_BUMP;
+ return KERNEL_FEATURE_NODE_BUMP;
}
NODE_SOCKET_API(NodeNormalMapSpace, space)