diff options
Diffstat (limited to 'intern/cycles/render/light.cpp')
-rw-r--r-- | intern/cycles/render/light.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 4173da453fd..66e528c7230 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -142,6 +142,7 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen /* count */ size_t num_lights = scene->lights.size(); size_t num_triangles = 0; + size_t num_curve_segs = 0; foreach(Object *object, scene->objects) { Mesh *mesh = object->mesh; @@ -169,10 +170,18 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen if(shader->sample_as_light && shader->has_surface_emission) num_triangles++; } + + /* disabled for strands*/ + /*for(size_t i = 0; i < mesh->curve_segs.size(); i++) { + * Shader *shader = scene->shaders[mesh->curve_segs[i].curveshader]; + * + * if(shader->sample_as_light && shader->has_surface_emission) + * num_curve_segs++; + }*/ } } - size_t num_distribution = num_triangles; + size_t num_distribution = num_triangles + num_curve_segs; num_distribution += num_lights; /* emission area */ @@ -234,6 +243,32 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen totarea += triangle_area(p1, p2, p3); } } + + /*sample as light disabled for strands*/ + /*for(size_t i = 0; i < mesh->curve_segs.size(); i++) { + * Shader *shader = scene->shaders[mesh->curve_segs[i].curveshader]; + * + * if(shader->sample_as_light && shader->has_surface_emission) { + * distribution[offset].x = totarea; + * distribution[offset].y = __int_as_float(i + mesh->curveseg_offset); + * distribution[offset].z = 0.0f; + * distribution[offset].w = __int_as_float(object_id); + * offset++; + * + * Mesh::CurveSeg s = mesh->curve_segs[i]; + * float3 p1 = mesh->curve_keys[s.v[0]].loc; + * float r1 = mesh->curve_keys[s.v[0]].radius; + * float3 p2 = mesh->curve_keys[s.v[1]].loc; + * float r2 = mesh->curve_keys[s.v[1]].radius; + * + * if(!transform_applied) { + * p1 = transform_point(&tfm, p1); + * p2 = transform_point(&tfm, p2); + * } + * + * totarea += M_PI_F * (r1 + r2) * len(p1 - p2); + * } + }*/ } if(progress.get_cancel()) return; |