Fix T49180: Cycles MIS Map for Animated Environment Texture Movie Doesn't Update...
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 2 Sep 2016 07:58:41 +0000 (09:58 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 2 Sep 2016 07:58:41 +0000 (09:58 +0200)
Not really ideal fix at all, but we are at RC today, so better to play really safe.

intern/cycles/render/light.cpp
intern/cycles/render/light.h
intern/cycles/render/shader.cpp

index 4cd77f8c6e1a6168a0cc44d0f4ec7b0d19698478..787e5cf07b2d202fcfa56afdbbe39063857b3f76 100644 (file)
@@ -177,6 +177,16 @@ LightManager::~LightManager()
 {
 }
 
 {
 }
 
+bool LightManager::has_background_light(Scene *scene)
+{
+       foreach(Light *light, scene->lights) {
+               if(light->type == LIGHT_BACKGROUND) {
+                       return true;
+               }
+       }
+       return false;
+}
+
 void LightManager::disable_ineffective_light(Device *device, Scene *scene)
 {
        /* Make all lights enabled by default, and perform some preliminary checks
 void LightManager::disable_ineffective_light(Device *device, Scene *scene)
 {
        /* Make all lights enabled by default, and perform some preliminary checks
index 745caa961590a3ee9271c221bd8c7b283346335c..040a672937d1154f97cacbc2709a5ecbb827dd29 100644 (file)
@@ -91,6 +91,9 @@ public:
 
        void tag_update(Scene *scene);
 
 
        void tag_update(Scene *scene);
 
+       /* Check whether there is a background light. */
+       bool has_background_light(Scene *scene);
+
 protected:
        /* Optimization: disable light which is either unsupported or
         * which doesn't contribute to the scene or which is only used for MIS
 protected:
        /* Optimization: disable light which is either unsupported or
         * which doesn't contribute to the scene or which is only used for MIS
index 165a316ea768a815747c87470961a2091bb76bc6..10c3507e3f49e7d84ad566ceb65cee29c6c21d86 100644 (file)
@@ -221,6 +221,16 @@ void Shader::tag_update(Scene *scene)
        if(use_mis && has_surface_emission)
                scene->light_manager->need_update = true;
 
        if(use_mis && has_surface_emission)
                scene->light_manager->need_update = true;
 
+       /* Special handle of background MIS light for now: for some reason it
+        * has use_mis set to false. We are quite close to release now, so
+        * better to be safe.
+        */
+       if(this == scene->default_background &&
+          scene->light_manager->has_background_light(scene))
+       {
+               scene->light_manager->need_update = true;
+       }
+
        /* quick detection of which kind of shaders we have to avoid loading
         * e.g. surface attributes when there is only a volume shader. this could
         * be more fine grained but it's better than nothing */
        /* quick detection of which kind of shaders we have to avoid loading
         * e.g. surface attributes when there is only a volume shader. this could
         * be more fine grained but it's better than nothing */