[Bf-blender-cvs] [e87c51d3dde] tmp-eevee-aov: EEVEE AOV: Do not render/show conflicting AOVs

Jeroen Bakker noreply at git.blender.org
Mon Sep 28 11:43:58 CEST 2020


Commit: e87c51d3dde7793e97bae125b7e89964a8c041b7
Author: Jeroen Bakker
Date:   Mon Sep 28 08:49:12 2020 +0200
Branches: tmp-eevee-aov
https://developer.blender.org/rBe87c51d3dde7793e97bae125b7e89964a8c041b7

EEVEE AOV: Do not render/show conflicting AOVs

===================================================================

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/render/intern/source/render_result.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 6093ce61c94..5ecee77a4c0 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -437,6 +437,7 @@ void BKE_view_layer_set_active_aov(struct ViewLayer *view_layer, struct ViewLaye
 void BKE_view_layer_verify_aov(struct RenderEngine *engine,
                                struct Scene *scene,
                                struct ViewLayer *view_layer);
+bool BKE_view_layer_has_valid_aov(struct ViewLayer *view_layer);
 ViewLayer *BKE_view_layer_find_with_aov(struct Scene *scene, struct ViewLayerAOV *view_layer_aov);
 
 #ifdef __cplusplus
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 7bd9d8a28a6..f3060bccee0 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1942,6 +1942,17 @@ void BKE_view_layer_verify_aov(struct RenderEngine *engine,
   BLI_ghash_free(name_count, MEM_freeN, NULL);
 }
 
+/* Check if the given view layer has at least one valid AOV. */
+bool BKE_view_layer_has_valid_aov(ViewLayer *view_layer)
+{
+  LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
+    if ((aov->flag & AOV_CONFLICT) == 0) {
+      return true;
+    }
+  }
+  return false;
+}
+
 ViewLayer *BKE_view_layer_find_with_aov(struct Scene *scene, struct ViewLayerAOV *aov)
 {
   LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 915fc907be1..328294ef391 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -285,6 +285,9 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata,
           ViewLayer *view_layer = draw_ctx->view_layer;
           int aov_index = 0;
           LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
+            if ((aov->flag & AOV_CONFLICT) != 0) {
+              continue;
+            }
             if (aov_index == MAX_AOVS) {
               break;
             }
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index 61dac88dbed..a113a4c1f59 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -473,6 +473,9 @@ static void eevee_render_result_aovs(RenderLayer *rl,
     ViewLayer *view_layer = draw_ctx->view_layer;
     int aov_index = 0;
     LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
+      if ((aov->flag & AOV_CONFLICT) != 0) {
+        continue;
+      }
       EEVEE_renderpasses_postprocess(sldata, vedata, EEVEE_RENDER_PASS_AOV, aov_index);
       switch (aov->type) {
         case AOV_TYPE_COLOR:
@@ -708,7 +711,7 @@ void EEVEE_render_update_passes(RenderEngine *engine, Scene *scene, ViewLayer *v
         RE_engine_register_pass(engine, scene, view_layer, aov->name, 3, "RGB", SOCK_RGBA);
         break;
       case AOV_TYPE_VALUE:
-        RE_engine_register_pass(engine, scene, view_layer, aov->name, 1, "R", SOCK_FLOAT);
+        RE_engine_register_pass(engine, scene, view_layer, aov->name, 1, "X", SOCK_FLOAT);
         break;
       default:
         break;
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index f4871c06422..a2cc8d59127 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1311,7 +1311,7 @@ static const EnumPropertyItem *rna_3DViewShading_render_pass_itemf(bContext *C,
   ViewLayer *view_layer = CTX_data_view_layer(C);
 
   const bool bloom_enabled = scene->eevee.flag & SCE_EEVEE_BLOOM_ENABLED;
-  const bool aov_available = !BLI_listbase_is_empty(&view_layer->aovs);
+  const bool aov_available = BKE_view_layer_has_valid_aov(view_layer);
 
   int totitem = 0;
   EnumPropertyItem *result = NULL;
@@ -1323,6 +1323,9 @@ static const EnumPropertyItem *rna_3DViewShading_render_pass_itemf(bContext *C,
       aov_template.icon = 0;
       aov_template.description = item->description;
       LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
+        if ((aov->flag & AOV_CONFLICT) != 0) {
+          continue;
+        }
         aov_template.name = aov->name;
         aov_template.identifier = aov->name;
         RNA_enum_item_add(&result, &totitem, &aov_template);
diff --git a/source/blender/render/intern/source/render_result.c b/source/blender/render/intern/source/render_result.c
index f35e5cf2b31..fbd1dad7440 100644
--- a/source/blender/render/intern/source/render_result.c
+++ b/source/blender/render/intern/source/render_result.c
@@ -454,6 +454,9 @@ RenderResult *render_result_new(Render *re,
         RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 3, RE_PASSNAME_VOLUME_TRANSMITTANCE, view, "RGB");
       }
       LISTBASE_FOREACH (ViewLayerAOV *, aov, &view_layer->aovs) {
+        if ((aov->flag & AOV_CONFLICT) != 0) {
+          continue;
+        }
         switch (aov->type) {
           case AOV_TYPE_COLOR:
             RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 4, aov->name, view, "RGBA");
@@ -461,6 +464,8 @@ RenderResult *render_result_new(Render *re,
           case AOV_TYPE_VALUE:
             RENDER_LAYER_ADD_PASS_SAFE(rr, rl, 1, aov->name, view, "X");
             break;
+          default:
+            break;
         }
       }
 #undef RENDER_LAYER_ADD_PASS_SAFE



More information about the Bf-blender-cvs mailing list