Fix T45631: Ambient update rendered bug
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 26 Aug 2015 12:51:13 +0000 (14:51 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 26 Aug 2015 12:52:28 +0000 (14:52 +0200)
The issue was in fact caused by both preview and viewport renderers affecting
on the default material, conflicting with each other.

Preview render doesn't really need default material, so we can safely skip it's
initialization in the render pipeline for preview rendering.

source/blender/blenkernel/BKE_material.h
source/blender/blenkernel/intern/material.c
source/blender/render/intern/source/convertblender.c

index bbac607a3fd2cee0e46c9935ad0d76af7ad35da0..a3c61f44ff2acb2cf2a69c0ad3b5b9941646a026 100644 (file)
@@ -98,7 +98,7 @@ void BKE_material_clear_id(struct ID *id, bool update_data);
 /* rendering */
 
 void init_render_material(struct Material *, int, float *);
-void init_render_materials(struct Main *, int, float *);
+void init_render_materials(struct Main *, int r_mode, float *amd, bool do_default_material);
 void end_render_material(struct Material *);
 void end_render_materials(struct Main *);
 
index dd69de4877fb0c8191bfbde9c648cbee65e268e5..fa0d34b8db6ad88aeec013566bccd8c580bbea5e 100644 (file)
@@ -1132,7 +1132,7 @@ void init_render_material(Material *mat, int r_mode, float *amb)
        }
 }
 
-void init_render_materials(Main *bmain, int r_mode, float *amb)
+void init_render_materials(Main *bmain, int r_mode, float *amb, bool do_default_material)
 {
        Material *ma;
        
@@ -1153,8 +1153,10 @@ void init_render_materials(Main *bmain, int r_mode, float *amb)
                if (ma->id.us) 
                        init_render_material(ma, r_mode, amb);
        }
-       
-       init_render_material(&defmaterial, r_mode, amb);
+
+       if (do_default_material) {
+               init_render_material(&defmaterial, r_mode, amb);
+       }
 }
 
 /* only needed for nodes now */
index e6fd570d31d0d913cc5f609b463471ef1e89c76e..ee28c3b286f6140086208c7f106cef8e2b61fe0f 100644 (file)
@@ -5210,7 +5210,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
        /* still bad... doing all */
        init_render_textures(re);
        copy_v3_v3(amb, &re->wrld.ambr);
-       init_render_materials(re->main, re->r.mode, amb);
+       init_render_materials(re->main, re->r.mode, amb, (re->r.scemode & R_BUTS_PREVIEW) == 0);
        set_node_shader_lamp_loop(shade_material_loop);
 
        /* MAKE RENDER DATA */
@@ -5941,7 +5941,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
        init_render_textures(re);
        
        copy_v3_v3(amb, &re->wrld.ambr);
-       init_render_materials(re->main, re->r.mode, amb);
+       init_render_materials(re->main, re->r.mode, amb, true);
        
        set_node_shader_lamp_loop(shade_material_loop);