diff options
Diffstat (limited to 'intern/cycles/render/background.cpp')
-rw-r--r-- | intern/cycles/render/background.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/intern/cycles/render/background.cpp b/intern/cycles/render/background.cpp index 3926ecb99d6..f5e51f2e159 100644 --- a/intern/cycles/render/background.cpp +++ b/intern/cycles/render/background.cpp @@ -11,7 +11,7 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and - * limitations under the License + * limitations under the License. */ #include "background.h" @@ -72,16 +72,23 @@ void Background::device_update(Device *device, DeviceScene *dscene, Scene *scene else kbackground->volume_shader = SHADER_NONE; - if(!(visibility & PATH_RAY_DIFFUSE)) - kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE; - if(!(visibility & PATH_RAY_GLOSSY)) - kbackground->surface_shader |= SHADER_EXCLUDE_GLOSSY; - if(!(visibility & PATH_RAY_TRANSMIT)) - kbackground->surface_shader |= SHADER_EXCLUDE_TRANSMIT; - if(!(visibility & PATH_RAY_VOLUME_SCATTER)) - kbackground->surface_shader |= SHADER_EXCLUDE_SCATTER; - if(!(visibility & PATH_RAY_CAMERA)) - kbackground->surface_shader |= SHADER_EXCLUDE_CAMERA; + /* No background node, make world shader invisible to all rays, to skip evaluation in kernel. */ + if(scene->shaders[shader]->graph->nodes.size() <= 1) { + kbackground->surface_shader |= SHADER_EXCLUDE_ANY; + } + /* Background present, check visibilities */ + else { + if(!(visibility & PATH_RAY_DIFFUSE)) + kbackground->surface_shader |= SHADER_EXCLUDE_DIFFUSE; + if(!(visibility & PATH_RAY_GLOSSY)) + kbackground->surface_shader |= SHADER_EXCLUDE_GLOSSY; + if(!(visibility & PATH_RAY_TRANSMIT)) + kbackground->surface_shader |= SHADER_EXCLUDE_TRANSMIT; + if(!(visibility & PATH_RAY_VOLUME_SCATTER)) + kbackground->surface_shader |= SHADER_EXCLUDE_SCATTER; + if(!(visibility & PATH_RAY_CAMERA)) + kbackground->surface_shader |= SHADER_EXCLUDE_CAMERA; + } need_update = false; } |