From cdd1d5a93c432ddbee8a8e578b0c28781aef71da Mon Sep 17 00:00:00 2001 From: Thomas Dinges Date: Fri, 5 Sep 2014 16:17:24 +0200 Subject: Cycles: Initial support for volume ray visibility. This adds a new "Volume Scatter" option to the "Ray Visibility" panels and can be used to e.g. exclude lamps from having an influence on the volume. See release logs for an example: http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.72/Cycles Differential revision: https://developer.blender.org/D771 --- intern/cycles/render/light.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'intern/cycles/render/light.cpp') diff --git a/intern/cycles/render/light.cpp b/intern/cycles/render/light.cpp index 94ab82a600e..1f006637e67 100644 --- a/intern/cycles/render/light.cpp +++ b/intern/cycles/render/light.cpp @@ -121,6 +121,7 @@ Light::Light() use_diffuse = true; use_glossy = true; use_transmission = true; + use_scatter = true; shader = 0; samples = 1; @@ -243,6 +244,10 @@ void LightManager::device_update_distribution(Device *device, DeviceScene *dscen shader_flag |= SHADER_EXCLUDE_TRANSMIT; use_light_visibility = true; } + if(!(object->visibility & PATH_RAY_VOLUME_SCATTER)) { + shader_flag |= SHADER_EXCLUDE_SCATTER; + use_light_visibility = true; + } for(size_t i = 0; i < mesh->triangles.size(); i++) { Shader *shader = scene->shaders[mesh->shader[i]]; @@ -500,6 +505,10 @@ void LightManager::device_update_points(Device *device, DeviceScene *dscene, Sce shader_id |= SHADER_EXCLUDE_TRANSMIT; use_light_visibility = true; } + if(!light->use_scatter) { + shader_id |= SHADER_EXCLUDE_SCATTER; + use_light_visibility = true; + } if(light->type == LIGHT_POINT) { shader_id &= ~SHADER_AREA_LIGHT; @@ -554,6 +563,10 @@ void LightManager::device_update_points(Device *device, DeviceScene *dscene, Sce shader_id |= SHADER_EXCLUDE_TRANSMIT; use_light_visibility = true; } + if(!(visibility & PATH_RAY_VOLUME_SCATTER)) { + shader_id |= SHADER_EXCLUDE_SCATTER; + use_light_visibility = true; + } light_data[i*LIGHT_SIZE + 0] = make_float4(__int_as_float(light->type), 0.0f, 0.0f, 0.0f); light_data[i*LIGHT_SIZE + 1] = make_float4(__int_as_float(shader_id), 0.0f, 0.0f, 0.0f); -- cgit v1.2.3