diff options
Diffstat (limited to 'intern/cycles/render/light.cpp')
-rw-r--r-- | intern/cycles/render/light.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index d4c233e3bb3..ef4bd4260c9 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -114,6 +114,8 @@ NODE_DEFINE(Light) type_enum.insert("spot", LIGHT_SPOT); SOCKET_ENUM(type, "Type", type_enum, LIGHT_POINT); + SOCKET_COLOR(strength, "Strength", make_float3(1.0f, 1.0f, 1.0f)); + SOCKET_POINT(co, "Co", make_float3(0.0f, 0.0f, 0.0f)); SOCKET_VECTOR(dir, "Dir", make_float3(0.0f, 0.0f, 0.0f)); @@ -162,6 +164,9 @@ void Light::tag_update(Scene *scene) bool Light::has_contribution(Scene *scene) { + if (strength == make_float3(0.0f, 0.0f, 0.0f)) { + return false; + } if (is_portal) { return false; } @@ -672,7 +677,6 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc float3 co = light->co; Shader *shader = (light->shader) ? light->shader : scene->default_light; int shader_id = scene->shader_manager->get_shader_id(shader); - int samples = light->samples; int max_bounces = light->max_bounces; float random = (float)light->random_id * (1.0f / (float)0xFFFFFFFF); @@ -697,7 +701,10 @@ void LightManager::device_update_points(Device *, DeviceScene *dscene, Scene *sc } klights[light_index].type = light->type; - klights[light_index].samples = samples; + klights[light_index].samples = light->samples; + klights[light_index].strength[0] = light->strength.x; + klights[light_index].strength[1] = light->strength.y; + klights[light_index].strength[2] = light->strength.z; if (light->type == LIGHT_POINT) { shader_id &= ~SHADER_AREA_LIGHT; |