Blender V5.0
shader.cpp File Reference
#include "scene/shader.h"
#include "scene/background.h"
#include "scene/integrator.h"
#include "scene/light.h"
#include "scene/osl.h"
#include "scene/scene.h"
#include "scene/shader_graph.h"
#include "scene/shader_nodes.h"
#include "blender/image.h"
#include "blender/sync.h"
#include "blender/util.h"
#include "util/set.h"
#include "util/string.h"
#include "util/task.h"
#include "BKE_duplilist.hh"
#include "BKE_node.hh"
#include "NOD_shader_nodes_inline.hh"

Go to the source code of this file.

Typedefs

using PtrInputMap = unordered_multimap<void *, ShaderInput *>
using PtrOutputMap = map<void *, ShaderOutput *>
using ProxyMap = map<string, ConvertNode *>

Functions

static VolumeSampling get_volume_sampling (PointerRNA &ptr)
static VolumeInterpolation get_volume_interpolation (PointerRNA &ptr)
static EmissionSampling get_emission_sampling (PointerRNA &ptr)
static int validate_enum_value (const int value, const int num_values, const int default_value)
static DisplacementMethod get_displacement_method (BL::Material &b_mat)
template<typename NodeType>
static InterpolationType get_image_interpolation (NodeType &b_node)
template<typename NodeType>
static ExtensionType get_image_extension (NodeType &b_node)
static ImageAlphaType get_image_alpha_type (BL::Image &b_image)
static const string_view object_attr_prefix ("\x01object:")
static const string_view instancer_attr_prefix ("\x01instancer:")
static const string_view view_layer_attr_prefix ("\x01layer:")
static ustring blender_attribute_name_add_type (const string &name, BlenderAttributeType type)
BlenderAttributeType blender_attribute_name_split_type (ustring name, string *r_real_name)
static BL::NodeSocket get_node_output (BL::Node &b_node, const string &name)
static float3 get_node_output_rgba (BL::Node &b_node, const string &name)
static float get_node_output_value (BL::Node &b_node, const string &name)
static float3 get_node_output_vector (BL::Node &b_node, const string &name)
static SocketType::Type convert_socket_type (BL::NodeSocket &b_socket)
static void set_default_value (ShaderInput *input, BL::NodeSocket &b_sock, BL::BlendData &b_data, BL::ID &b_id)
static void get_tex_mapping (TextureNode *mapping, BL::TexMapping &b_mapping)
static bool is_image_animated (BL::Image::source_enum b_image_source, BL::ImageUser &b_image_user)
static ShaderNodeadd_node (Scene *scene, BL::RenderEngine &b_engine, BL::BlendData &b_data, BL::Scene &b_scene, ShaderGraph *graph, BL::ShaderNodeTree &b_ntree, BL::ShaderNode &b_node)
static bool node_use_modified_socket_name (ShaderNode *node)
static ShaderInputnode_find_input_by_name (BL::Node b_node, ShaderNode *node, BL::NodeSocket &b_socket)
static ShaderOutputnode_find_output_by_name (BL::Node b_node, ShaderNode *node, BL::NodeSocket &b_socket)
static void add_nodes (Scene *scene, BL::RenderEngine &b_engine, BL::BlendData &b_data, BL::Scene &b_scene, ShaderGraph *graph, BL::ShaderNodeTree &b_ntree, const ProxyMap &proxy_input_map, const ProxyMap &proxy_output_map)
static void add_nodes_inlined (Scene *scene, BL::RenderEngine &b_engine, BL::BlendData &b_data, BL::Scene &b_scene, ShaderGraph *graph, BL::ShaderNodeTree &b_ntree, const ProxyMap &proxy_input_map, const ProxyMap &proxy_output_map)
static void add_nodes (Scene *scene, BL::RenderEngine &b_engine, BL::BlendData &b_data, BL::Scene &b_scene, ShaderGraph *graph, BL::ShaderNodeTree &b_ntree)

Typedef Documentation

◆ ProxyMap

using ProxyMap = map<string, ConvertNode *>

Definition at line 31 of file blender/shader.cpp.

◆ PtrInputMap

using PtrInputMap = unordered_multimap<void *, ShaderInput *>

Definition at line 29 of file blender/shader.cpp.

◆ PtrOutputMap

using PtrOutputMap = map<void *, ShaderOutput *>

Definition at line 30 of file blender/shader.cpp.

Function Documentation

◆ add_node()

ShaderNode * add_node ( Scene * scene,
BL::RenderEngine & b_engine,
BL::BlendData & b_data,
BL::Scene & b_scene,
ShaderGraph * graph,
BL::ShaderNodeTree & b_ntree,
BL::ShaderNode & b_node )
static

Definition at line 280 of file blender/shader.cpp.

References blender_absolute_path(), blender_attribute_name_add_type(), CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID, CLOSURE_BSDF_ASHIKHMIN_VELVET_ID, CLOSURE_BSDF_DIFFUSE_TOON_ID, CLOSURE_BSDF_F82_CONDUCTOR, CLOSURE_BSDF_GLOSSY_TOON_ID, CLOSURE_BSDF_HAIR_REFLECTION_ID, CLOSURE_BSDF_HAIR_TRANSMISSION_ID, CLOSURE_BSDF_MICROFACET_BECKMANN_GLASS_ID, CLOSURE_BSDF_MICROFACET_BECKMANN_ID, CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID, CLOSURE_BSDF_MICROFACET_GGX_GLASS_ID, CLOSURE_BSDF_MICROFACET_GGX_ID, CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID, CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID, CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID, CLOSURE_BSDF_PHYSICAL_CONDUCTOR, CLOSURE_BSDF_SHEEN_ID, CLOSURE_BSSRDF_BURLEY_ID, CLOSURE_BSSRDF_RANDOM_WALK_ID, CLOSURE_BSSRDF_RANDOM_WALK_SKIN_ID, CLOSURE_VOLUME_DRAINE_ID, CLOSURE_VOLUME_FOURNIER_FORAND_ID, CLOSURE_VOLUME_HENYEY_GREENSTEIN_ID, CLOSURE_VOLUME_MIE_ID, CLOSURE_VOLUME_RAYLEIGH_ID, colorramp_to_array(), ShaderGraph::create_node(), curvemapping_color_to_array(), curvemapping_float_to_array(), curvemapping_minmax(), get_enum(), get_enum_identifier(), get_float3(), get_image_alpha_type(), get_image_extension(), get_image_interpolation(), get_node_output_rgba(), get_node_output_value(), get_node_output_vector(), get_tex_mapping(), get_text_datablock_content(), get_transform(), ImageSlotTextureNode::handle, image_is_builtin(), Scene::image_manager, EnvironmentTextureNode::image_params(), ImageTextureNode::image_params(), image_user_file_path(), image_user_frame_number(), is_image_animated(), magic(), mix, Node::name, NODE_PRINCIPLED_HAIR_HUANG, NODE_PRINCIPLED_HAIR_MODEL_NUM, NODE_PRINCIPLED_HAIR_PARAMETRIZATION_NUM, NODE_PRINCIPLED_HAIR_REFLECTANCE, noise(), norm(), normalize, RAMP_TABLE_SIZE, scatter(), Node::set_value(), Scene::shader_manager, sheen(), tex_coord, and tiles.

Referenced by add_nodes_inlined().

◆ add_nodes() [1/2]

void add_nodes ( Scene * scene,
BL::RenderEngine & b_engine,
BL::BlendData & b_data,
BL::Scene & b_scene,
ShaderGraph * graph,
BL::ShaderNodeTree & b_ntree )
static

Definition at line 1485 of file blender/shader.cpp.

References add_nodes().

◆ add_nodes() [2/2]

void add_nodes ( Scene * scene,
BL::RenderEngine & b_engine,
BL::BlendData & b_data,
BL::Scene & b_scene,
ShaderGraph * graph,
BL::ShaderNodeTree & b_ntree,
const ProxyMap & proxy_input_map,
const ProxyMap & proxy_output_map )
static

◆ add_nodes_inlined()

void add_nodes_inlined ( Scene * scene,
BL::RenderEngine & b_engine,
BL::BlendData & b_data,
BL::Scene & b_scene,
ShaderGraph * graph,
BL::ShaderNodeTree & b_ntree,
const ProxyMap & proxy_input_map,
const ProxyMap & proxy_output_map )
static

◆ blender_attribute_name_add_type()

ustring blender_attribute_name_add_type ( const string & name,
BlenderAttributeType type )
static

Definition at line 118 of file blender/shader.cpp.

References instancer_attr_prefix(), name, object_attr_prefix(), and view_layer_attr_prefix().

Referenced by add_node().

◆ blender_attribute_name_split_type()

BlenderAttributeType blender_attribute_name_split_type ( ustring name,
string * r_real_name )

◆ convert_socket_type()

SocketType::Type convert_socket_type ( BL::NodeSocket & b_socket)
static

◆ get_displacement_method()

DisplacementMethod get_displacement_method ( BL::Material & b_mat)
static

Definition at line 74 of file blender/shader.cpp.

References DISPLACE_BUMP, DISPLACE_NUM_METHODS, and validate_enum_value().

◆ get_emission_sampling()

EmissionSampling get_emission_sampling ( PointerRNA & ptr)
static

Definition at line 60 of file blender/shader.cpp.

References EMISSION_SAMPLING_AUTO, EMISSION_SAMPLING_NUM, get_enum(), and ptr.

◆ get_image_alpha_type()

ImageAlphaType get_image_alpha_type ( BL::Image & b_image)
static

Definition at line 93 of file blender/shader.cpp.

References IMAGE_ALPHA_AUTO, IMAGE_ALPHA_NUM_TYPES, and validate_enum_value().

Referenced by add_node().

◆ get_image_extension()

template<typename NodeType>
ExtensionType get_image_extension ( NodeType & b_node)
static

Definition at line 87 of file blender/shader.cpp.

References EXTENSION_NUM_TYPES, EXTENSION_REPEAT, and validate_enum_value().

Referenced by add_node().

◆ get_image_interpolation()

template<typename NodeType>
InterpolationType get_image_interpolation ( NodeType & b_node)
static

Definition at line 80 of file blender/shader.cpp.

References INTERPOLATION_LINEAR, INTERPOLATION_NUM_TYPES, and validate_enum_value().

Referenced by add_node().

◆ get_node_output()

BL::NodeSocket get_node_output ( BL::Node & b_node,
const string & name )
static

Definition at line 156 of file blender/shader.cpp.

References assert, and name.

Referenced by get_node_output_rgba(), get_node_output_value(), and get_node_output_vector().

◆ get_node_output_rgba()

float3 get_node_output_rgba ( BL::Node & b_node,
const string & name )
static

Definition at line 167 of file blender/shader.cpp.

References get_node_output(), make_float3(), name, and RNA_float_get_array().

Referenced by add_node().

◆ get_node_output_value()

float get_node_output_value ( BL::Node & b_node,
const string & name )
static

Definition at line 175 of file blender/shader.cpp.

References get_node_output(), name, and RNA_float_get().

Referenced by add_node().

◆ get_node_output_vector()

float3 get_node_output_vector ( BL::Node & b_node,
const string & name )
static

Definition at line 181 of file blender/shader.cpp.

References get_node_output(), make_float3(), name, and RNA_float_get_array().

Referenced by add_node().

◆ get_tex_mapping()

void get_tex_mapping ( TextureNode * mapping,
BL::TexMapping & b_mapping )
static

Definition at line 257 of file blender/shader.cpp.

References get_float3().

Referenced by add_node().

◆ get_volume_interpolation()

VolumeInterpolation get_volume_interpolation ( PointerRNA & ptr)
static

◆ get_volume_sampling()

VolumeSampling get_volume_sampling ( PointerRNA & ptr)
static

Definition at line 48 of file blender/shader.cpp.

References get_enum(), ptr, VOLUME_NUM_SAMPLING, and VOLUME_SAMPLING_DISTANCE.

◆ instancer_attr_prefix()

const string_view instancer_attr_prefix ( "\x01instancer:" )
static

◆ is_image_animated()

bool is_image_animated ( BL::Image::source_enum b_image_source,
BL::ImageUser & b_image_user )
static

Definition at line 273 of file blender/shader.cpp.

Referenced by add_node().

◆ node_find_input_by_name()

ShaderInput * node_find_input_by_name ( BL::Node b_node,
ShaderNode * node,
BL::NodeSocket & b_socket )
static

◆ node_find_output_by_name()

ShaderOutput * node_find_output_by_name ( BL::Node b_node,
ShaderNode * node,
BL::NodeSocket & b_socket )
static

◆ node_use_modified_socket_name()

bool node_use_modified_socket_name ( ShaderNode * node)
static

◆ object_attr_prefix()

const string_view object_attr_prefix ( "\x01object:" )
static

◆ set_default_value()

void set_default_value ( ShaderInput * input,
BL::NodeSocket & b_sock,
BL::BlendData & b_data,
BL::ID & b_id )
static

◆ validate_enum_value()

int validate_enum_value ( const int value,
const int num_values,
const int default_value )
static

◆ view_layer_attr_prefix()

const string_view view_layer_attr_prefix ( "\x01layer:" )
static