Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/cycles/render/light.cpp')
-rw-r--r--intern/cycles/render/light.cpp37
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;