29 SOCKET_FLOAT(transparent_roughness_threshold,
"Transparent Roughness Threshold", 0.0f);
31 SOCKET_FLOAT(volume_step_size,
"Volume Step Size", 0.1f);
33 SOCKET_NODE(shader,
"Shader", Shader::get_node_type());
58 scene->
update_stats->background.times.add_entry({
"device_update", time});
67 KernelBackground *kbackground = &dscene->
data.background;
69 kbackground->transparent = transparent;
70 kbackground->surface_shader = scene->
shader_manager->get_shader_id(bg_shader);
72 if (transparent && transparent_glass) {
75 kbackground->transparent_roughness_squared_threshold =
sqr(
76 sqr(transparent_roughness_threshold));
79 kbackground->transparent_roughness_squared_threshold = -1.0f;
83 kbackground->volume_shader = kbackground->surface_shader;
89 kbackground->volume_step_size = volume_step_size * scene->
integrator->get_volume_step_rate();
92 if (bg_shader->
graph->nodes.size() <= 1) {
117 kbackground->lightgroup = it->second;
135 tag_use_shader_modified();
NODE_DECLARE Background()
void device_update(Device *device, DeviceScene *dscene, Scene *scene)
void device_free(Device *device, DeviceScene *dscene)
Shader * get_shader(const Scene *scene)
void tag_update(Scene *scene)
NODE_DECLARE unique_ptr< ShaderGraph > graph
#define CCL_NAMESPACE_END
@ PATH_RAY_VOLUME_SCATTER
@ PATH_RAY_ALL_VISIBILITY
@ SHADER_EXCLUDE_TRANSMIT
ccl_device_inline float sqr(const float a)
#define SOCKET_FLOAT(name, ui_name, default_value,...)
#define SOCKET_NODE(name, ui_name, node_type,...)
#define SOCKET_UINT(name, ui_name, default_value,...)
#define NODE_DEFINE(structname)
#define SOCKET_BOOLEAN(name, ui_name, default_value,...)
#define SOCKET_STRING(name, ui_name, default_value,...)
static NodeType * add(const char *name, CreateFunc create, Type type=NONE, const NodeType *base=nullptr)
void dereference_all_used_nodes()
Node(const NodeType *type, ustring name=ustring())
unique_ptr< SceneUpdateStats > update_stats
Shader * default_background
unique_ptr< ShaderManager > shader_manager
map< ustring, int > lightgroups