From 9ad2c0b6154b8e11521e9ee0422a79d5e0b9a2e1 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Thu, 21 Sep 2017 12:55:14 +0200 Subject: Depsgraph and collection enable/visibility Iterate over invisible objects too, so lamps can still lit the scene. Also, now you can use a collection to set an object to invisible, not only to visible. For example: Scene > Master collection > bedroom > furniture Scene > View Layer > bedroom (visible) > furniture (invisible) The View Layer has two linked collections, bedroom and furniture. This setup will make the furniture collection invisible. Note: Unlike what was suggested on D2849, this does not make collection visibility influence camera visibility. I will keep this as a separate patch. Reviewers: sergey Subscribers: sergey, brecht, fclem Differential Revision: https://developer.blender.org/D2849 --- source/blender/draw/engines/eevee/eevee_engine.c | 6 ++++++ source/blender/draw/engines/eevee/eevee_lightprobes.c | 18 ++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'source/blender/draw/engines') diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c index e8821f23633..f27b5236d71 100644 --- a/source/blender/draw/engines/eevee/eevee_engine.c +++ b/source/blender/draw/engines/eevee/eevee_engine.c @@ -29,6 +29,8 @@ #include "BLI_dynstr.h" #include "BLI_rand.h" +#include "BKE_object.h" + #include "GPU_material.h" #include "GPU_glew.h" @@ -93,6 +95,10 @@ static void EEVEE_cache_populate(void *vedata, Object *ob) } if (ELEM(ob->type, OB_MESH)) { + if (!BKE_object_is_visible(ob)) { + return; + } + EEVEE_materials_cache_populate(vedata, sldata, ob); const bool cast_shadow = true; diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c index 96db3164fe1..a37dc091aa8 100644 --- a/source/blender/draw/engines/eevee/eevee_lightprobes.c +++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c @@ -590,7 +590,10 @@ static void EEVEE_planar_reflections_updates(EEVEE_SceneLayerData *sldata, EEVEE eplanar->attenuation_bias = max_dist * -eplanar->attenuation_scale; /* Debug Display */ - if (DRW_state_draw_support() && (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA)) { + if (BKE_object_is_visible(ob) && + DRW_state_draw_support() && + (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA)) + { DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_planar_display_sh, psl->probe_display); DRW_shgroup_uniform_int(grp, "probeIdx", &ped->probe_id, 1); @@ -643,8 +646,12 @@ static void EEVEE_lightprobes_updates(EEVEE_SceneLayerData *sldata, EEVEE_PassLi invert_m4(eprobe->parallaxmat); /* Debug Display */ - if (DRW_state_draw_support() && (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA)) { - DRW_shgroup_call_dynamic_add(stl->g_data->cube_display_shgrp, &ped->probe_id, ob->obmat[3], &probe->data_draw_size); + if (BKE_object_is_visible(ob) && + DRW_state_draw_support() && + (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA)) + { + DRW_shgroup_call_dynamic_add( + stl->g_data->cube_display_shgrp, &ped->probe_id, ob->obmat[3], &probe->data_draw_size); } } @@ -701,7 +708,10 @@ static void EEVEE_lightprobes_updates(EEVEE_SceneLayerData *sldata, EEVEE_PassLi copy_v3_v3_int(egrid->resolution, &probe->grid_resolution_x); /* Debug Display */ - if (DRW_state_draw_support() && (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA)) { + if (BKE_object_is_visible(ob) && + DRW_state_draw_support() && + (probe->flag & LIGHTPROBE_FLAG_SHOW_DATA)) + { struct Gwn_Batch *geom = DRW_cache_sphere_get(); DRWShadingGroup *grp = DRW_shgroup_instance_create(e_data.probe_grid_display_sh, psl->probe_display, geom); DRW_shgroup_set_instance_count(grp, ped->num_cell); -- cgit v1.2.3