Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/scene/light.cpp
| Show First 20 Lines • Show All 307 Lines • ▼ Show 20 Lines | void LightManager::device_update_distribution(Device *device, | ||||
| const size_t num_background_lights = kintegrator->num_background_lights; | const size_t num_background_lights = kintegrator->num_background_lights; | ||||
| const size_t num_distribution = num_triangles + num_lights; | const size_t num_distribution = num_triangles + num_lights; | ||||
| /* Distribution size. */ | /* Distribution size. */ | ||||
| kintegrator->num_distribution = num_distribution; | kintegrator->num_distribution = num_distribution; | ||||
| VLOG_INFO << "Total " << num_distribution << " of light distribution primitives."; | VLOG_INFO << "Total " << num_distribution << " of light distribution primitives."; | ||||
| if (kintegrator->use_light_tree) { | |||||
| dscene->light_distribution.free(); | |||||
| return; | |||||
| } | |||||
| /* Emission area. */ | /* Emission area. */ | ||||
| KernelLightDistribution *distribution = dscene->light_distribution.alloc(num_distribution + 1); | KernelLightDistribution *distribution = dscene->light_distribution.alloc(num_distribution + 1); | ||||
| float totarea = 0.0f; | float totarea = 0.0f; | ||||
| /* Triangles. */ | /* Triangles. */ | ||||
| size_t offset = 0; | size_t offset = 0; | ||||
| int j = 0; | int j = 0; | ||||
| ▲ Show 20 Lines • Show All 308 Lines • ▼ Show 20 Lines | if (node.is_leaf()) { | ||||
| light_tree_emitters[emitter_index].prim_id = prim.prim_id + mesh->prim_offset; | light_tree_emitters[emitter_index].prim_id = prim.prim_id + mesh->prim_offset; | ||||
| light_tree_emitters[emitter_index].mesh_light.shader_flag = shader_flag; | light_tree_emitters[emitter_index].mesh_light.shader_flag = shader_flag; | ||||
| light_tree_emitters[emitter_index].mesh_light.emission_sampling = | light_tree_emitters[emitter_index].mesh_light.emission_sampling = | ||||
| shader->emission_sampling; | shader->emission_sampling; | ||||
| triangle_array[prim.prim_id + object_lookup_offsets[prim.object_id]] = emitter_index; | triangle_array[prim.prim_id + object_lookup_offsets[prim.object_id]] = emitter_index; | ||||
| } | } | ||||
| else { | else { | ||||
| light_tree_emitters[emitter_index].prim_id = prim.prim_id; | light_tree_emitters[emitter_index].prim_id = prim.prim_id; | ||||
| light_tree_emitters[emitter_index].mesh_light.shader_flag = 0; | |||||
| light_tree_emitters[emitter_index].mesh_light.object_id = OBJECT_NONE; | |||||
| light_tree_emitters[emitter_index].mesh_light.emission_sampling = | |||||
| EMISSION_SAMPLING_FRONT_BACK; | |||||
| light_array[~prim.prim_id] = emitter_index; | light_array[~prim.prim_id] = emitter_index; | ||||
| } | } | ||||
| light_tree_emitters[emitter_index].parent_index = index; | light_tree_emitters[emitter_index].parent_index = index; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| light_tree_nodes[index].child_index = node.right_child_index; | light_tree_nodes[index].child_index = node.right_child_index; | ||||
| ▲ Show 20 Lines • Show All 655 Lines • Show Last 20 Lines | |||||