Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/render/background.cpp
| Show All 32 Lines | NODE_DEFINE(Background) | ||||
| NodeType* type = NodeType::add("background", create); | NodeType* type = NodeType::add("background", create); | ||||
| SOCKET_FLOAT(ao_factor, "AO Factor", 0.0f); | SOCKET_FLOAT(ao_factor, "AO Factor", 0.0f); | ||||
| SOCKET_FLOAT(ao_distance, "AO Distance", FLT_MAX); | SOCKET_FLOAT(ao_distance, "AO Distance", FLT_MAX); | ||||
| SOCKET_BOOLEAN(use_shader, "Use Shader", true); | SOCKET_BOOLEAN(use_shader, "Use Shader", true); | ||||
| SOCKET_BOOLEAN(use_ao, "Use AO", false); | SOCKET_BOOLEAN(use_ao, "Use AO", false); | ||||
| SOCKET_UINT(visibility, "Visibility", PATH_RAY_ALL_VISIBILITY); | SOCKET_UINT(visibility, "Visibility", PATH_RAY_ALL_VISIBILITY); | ||||
| SOCKET_BOOLEAN(transparent, "Transparent", false); | SOCKET_BOOLEAN(transparent, "Transparent", false); | ||||
| SOCKET_BOOLEAN(transparent_glass, "Transparent Glass", false); | |||||
| SOCKET_FLOAT(transparent_roughness_threshold, "Transparent Roughness Threshold", 0.0f); | |||||
| SOCKET_NODE(shader, "Shader", &Shader::node_type); | SOCKET_NODE(shader, "Shader", &Shader::node_type); | ||||
| return type; | return type; | ||||
| } | } | ||||
| Background::Background() | Background::Background() | ||||
| : Node(node_type) | : Node(node_type) | ||||
| Show All 26 Lines | void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene) | ||||
| kbackground->ao_factor = (use_ao)? ao_factor: 0.0f; | kbackground->ao_factor = (use_ao)? ao_factor: 0.0f; | ||||
| kbackground->ao_bounces_factor = ao_factor; | kbackground->ao_bounces_factor = ao_factor; | ||||
| kbackground->ao_distance = ao_distance; | kbackground->ao_distance = ao_distance; | ||||
| kbackground->transparent = transparent; | kbackground->transparent = transparent; | ||||
| kbackground->surface_shader = scene->shader_manager->get_shader_id(bg_shader); | kbackground->surface_shader = scene->shader_manager->get_shader_id(bg_shader); | ||||
| if(transparent && transparent_glass) { | |||||
| /* Square twice, once for principled BSDF convention, and once for | |||||
| * faster comparison in kernel with anisotropic roughness. */ | |||||
| kbackground->transparent_roughness_threshold = sqr(sqr(transparent_roughness_threshold)); | |||||
| } | |||||
| else { | |||||
| kbackground->transparent_roughness_threshold = -1.0f; | |||||
| } | |||||
| if(bg_shader->has_volume) | if(bg_shader->has_volume) | ||||
| kbackground->volume_shader = kbackground->surface_shader; | kbackground->volume_shader = kbackground->surface_shader; | ||||
| else | else | ||||
| kbackground->volume_shader = SHADER_NONE; | kbackground->volume_shader = SHADER_NONE; | ||||
| /* No background node, make world shader invisible to all rays, to skip evaluation in kernel. */ | /* No background node, make world shader invisible to all rays, to skip evaluation in kernel. */ | ||||
| if(bg_shader->graph->nodes.size() <= 1) { | if(bg_shader->graph->nodes.size() <= 1) { | ||||
| kbackground->surface_shader |= SHADER_EXCLUDE_ANY; | kbackground->surface_shader |= SHADER_EXCLUDE_ANY; | ||||
| Show All 35 Lines | |||||