[Bf-blender-cvs] [0d73947b899] temp-eevee-next-cryptomatte: Move sample sorting to film.
Jeroen Bakker
noreply at git.blender.org
Mon Aug 29 15:51:33 CEST 2022
Commit: 0d73947b899e69acd68ccdee5ddc1651631d8f0e
Author: Jeroen Bakker
Date: Mon Aug 29 15:49:42 2022 +0200
Branches: temp-eevee-next-cryptomatte
https://developer.blender.org/rB0d73947b899e69acd68ccdee5ddc1651631d8f0e
Move sample sorting to film.
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
M source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
M source/blender/draw/engines/eevee_next/eevee_film.cc
M source/blender/draw/engines/eevee_next/eevee_film.hh
M source/blender/draw/engines/eevee_next/eevee_instance.cc
M source/blender/draw/engines/eevee_next/eevee_shader.cc
M source/blender/draw/engines/eevee_next/eevee_shader.hh
R100 source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_post_comp.glsl source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl
D source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh
M source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh
M source/blender/gpu/CMakeLists.txt
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 94b3d1ead4a..6410175bb2d 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -386,7 +386,6 @@ set(GLSL_SRC
engines/eevee_next/shaders/eevee_camera_lib.glsl
engines/eevee_next/shaders/eevee_colorspace_lib.glsl
engines/eevee_next/shaders/eevee_cryptomatte_lib.glsl
- engines/eevee_next/shaders/eevee_cryptomatte_post_comp.glsl
engines/eevee_next/shaders/eevee_depth_of_field_accumulator_lib.glsl
engines/eevee_next/shaders/eevee_depth_of_field_bokeh_lut_comp.glsl
engines/eevee_next/shaders/eevee_depth_of_field_downsample_comp.glsl
@@ -403,6 +402,7 @@ set(GLSL_SRC
engines/eevee_next/shaders/eevee_depth_of_field_tiles_dilate_comp.glsl
engines/eevee_next/shaders/eevee_depth_of_field_tiles_flatten_comp.glsl
engines/eevee_next/shaders/eevee_film_comp.glsl
+ engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl
engines/eevee_next/shaders/eevee_film_frag.glsl
engines/eevee_next/shaders/eevee_film_lib.glsl
engines/eevee_next/shaders/eevee_geom_curves_vert.glsl
diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
index d06c4c8cc76..2e22a237e53 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.cc
@@ -22,31 +22,9 @@ void Cryptomatte::init()
void Cryptomatte::begin_sync()
{
- post_ps_ = nullptr;
-
if (object_offset_ == -1 && asset_offset_ == -1) {
cryptomatte_object_buf.resize(16);
}
-
- if (layer_len_ == 0) {
- return;
- }
-
- const bool do_sorting = inst_.is_viewport() == false;
- if (!do_sorting) {
- return;
- }
-
- post_ps_ = DRW_pass_create("Cryptomatte.Sort", DRW_STATE_NO_DRAW);
- GPUShader *sh = inst_.shaders.static_shader_get(CRYPTOMATTE_POST);
- DRWShadingGroup *grp = DRW_shgroup_create(sh, post_ps_);
- Texture &cryptomatte_tx = inst_.film.cryptomatte_tx_get();
- DRW_shgroup_uniform_image_ref(grp, "cryptomatte_img", &cryptomatte_tx);
- DRW_shgroup_uniform_int_copy(grp, "cryptomatte_layer_len", layer_len_);
- DRW_shgroup_uniform_int_copy(
- grp, "cryptomatte_samples_per_layer", inst_.view_layer->cryptomatte_levels);
- int3 dispatch_size = math::divide_ceil(cryptomatte_tx.size(), int3(FILM_GROUP_SIZE));
- DRW_shgroup_call_compute(grp, UNPACK2(dispatch_size), 1);
}
void Cryptomatte::sync_object(Object *ob)
@@ -91,11 +69,5 @@ void Cryptomatte::bind_resources(DRWShadingGroup *grp)
DRW_shgroup_storage_block_ref(grp, "cryptomatte_object_buf", &cryptomatte_object_buf);
}
-void Cryptomatte::sort()
-{
- if (post_ps_) {
- DRW_draw_pass(post_ps_);
- }
-}
} // namespace blender::eevee
\ No newline at end of file
diff --git a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
index e96cace9e20..17c8e9ebcc0 100644
--- a/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_cryptomatte.hh
@@ -45,8 +45,6 @@ class Cryptomatte {
/** Contains per object hashes (object and asset hash). Indexed by resource ID. */
CryptomatteObjectBuf cryptomatte_object_buf;
- DRWPass *post_ps_ = nullptr;
-
public:
Cryptomatte(Instance &inst) : inst_(inst){};
~Cryptomatte(){};
@@ -57,7 +55,6 @@ class Cryptomatte {
void end_sync();
void bind_resources(DRWShadingGroup *grp);
- void sort();
float hash(const ID &id) const;
};
diff --git a/source/blender/draw/engines/eevee_next/eevee_film.cc b/source/blender/draw/engines/eevee_next/eevee_film.cc
index 0bd88e1e47d..b3164bc7783 100644
--- a/source/blender/draw/engines/eevee_next/eevee_film.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_film.cc
@@ -466,6 +466,25 @@ void Film::sync()
else {
DRW_shgroup_call_procedural_triangles(grp, nullptr, 1);
}
+
+ const int cryptomatte_layer_count = cryptomatte_layer_len_get();
+ const bool is_cryptomatte_pass_enabled = cryptomatte_layer_count > 0;
+ const bool do_cryptomatte_sorting = inst_.is_viewport() == false;
+ if (is_cryptomatte_pass_enabled && do_cryptomatte_sorting) {
+ cryptomatte_post_ps_ = DRW_pass_create("Film.Cryptomatte.Post", DRW_STATE_NO_DRAW);
+ GPUShader *sh = inst_.shaders.static_shader_get(FILM_CRYPTOMATTE_POST);
+ DRWShadingGroup *grp = DRW_shgroup_create(sh, cryptomatte_post_ps_);
+ Texture &cryptomatte_tx = inst_.film.cryptomatte_tx_get();
+ DRW_shgroup_uniform_image_ref(grp, "cryptomatte_img", &cryptomatte_tx);
+ DRW_shgroup_uniform_int_copy(grp, "cryptomatte_layer_len", cryptomatte_layer_count);
+ DRW_shgroup_uniform_int_copy(
+ grp, "cryptomatte_samples_per_layer", inst_.view_layer->cryptomatte_levels);
+ int3 dispatch_size = math::divide_ceil(cryptomatte_tx.size(), int3(FILM_GROUP_SIZE));
+ DRW_shgroup_call_compute(grp, UNPACK2(dispatch_size), 1);
+ }
+ else {
+ cryptomatte_post_ps_ = nullptr;
+ }
}
void Film::end_sync()
@@ -670,6 +689,13 @@ void Film::display()
/* IMPORTANT: Do not swap! No accumulation has happened. */
}
+void Film::cryptomatte_sort()
+{
+ if (cryptomatte_post_ps_) {
+ DRW_draw_pass(cryptomatte_post_ps_);
+ }
+}
+
float *Film::read_pass(eViewLayerEEVEEPassType pass_type, int layer_offset)
{
// TODO(jbakker): readback cryptomatte?
diff --git a/source/blender/draw/engines/eevee_next/eevee_film.hh b/source/blender/draw/engines/eevee_next/eevee_film.hh
index add1f975fca..b2543ebede9 100644
--- a/source/blender/draw/engines/eevee_next/eevee_film.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_film.hh
@@ -61,6 +61,7 @@ class Film {
bool force_disable_reprojection_ = false;
DRWPass *accumulate_ps_ = nullptr;
+ DRWPass *cryptomatte_post_ps_ = nullptr;
FilmDataBuf data_;
@@ -78,6 +79,9 @@ class Film {
/** Accumulate the newly rendered sample contained in #RenderBuffers and blit to display. */
void accumulate(const DRWView *view, GPUTexture *combined_final_tx);
+ /** Sort and normalize cryptomatte samples. */
+ void cryptomatte_sort();
+
/** Blit to display. No rendered sample needed. */
void display();
diff --git a/source/blender/draw/engines/eevee_next/eevee_instance.cc b/source/blender/draw/engines/eevee_next/eevee_instance.cc
index bb6ffb8fd9e..1b9691a7cdd 100644
--- a/source/blender/draw/engines/eevee_next/eevee_instance.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_instance.cc
@@ -296,7 +296,7 @@ void Instance::render_frame(RenderLayer *render_layer, const char *view_name)
#endif
}
- cryptomatte.sort();
+ this->film.cryptomatte_sort();
this->render_read_result(render_layer, view_name);
}
diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.cc b/source/blender/draw/engines/eevee_next/eevee_shader.cc
index 551d4cada8c..6da2e09c9e5 100644
--- a/source/blender/draw/engines/eevee_next/eevee_shader.cc
+++ b/source/blender/draw/engines/eevee_next/eevee_shader.cc
@@ -82,8 +82,8 @@ const char *ShaderModule::static_shader_create_info_name_get(eShaderType shader_
return "eevee_film_frag";
case FILM_COMP:
return "eevee_film_comp";
- case CRYPTOMATTE_POST:
- return "eevee_cryptomatte_post";
+ case FILM_CRYPTOMATTE_POST:
+ return "eevee_film_cryptomatte_post";
case HIZ_DEBUG:
return "eevee_hiz_debug";
case HIZ_UPDATE:
diff --git a/source/blender/draw/engines/eevee_next/eevee_shader.hh b/source/blender/draw/engines/eevee_next/eevee_shader.hh
index 1bc8eeff9fe..88538557c07 100644
--- a/source/blender/draw/engines/eevee_next/eevee_shader.hh
+++ b/source/blender/draw/engines/eevee_next/eevee_shader.hh
@@ -28,8 +28,7 @@ namespace blender::eevee {
enum eShaderType {
FILM_FRAG = 0,
FILM_COMP,
-
- CRYPTOMATTE_POST,
+ FILM_CRYPTOMATTE_POST,
DOF_BOKEH_LUT,
DOF_DOWNSAMPLE,
diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_post_comp.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl
similarity index 100%
rename from source/blender/draw/engines/eevee_next/shaders/eevee_cryptomatte_post_comp.glsl
rename to source/blender/draw/engines/eevee_next/shaders/eevee_film_cryptomatte_post_comp.glsl
diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh
deleted file mode 100644
index 46068910143..00000000000
--- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_cryptomatte_info.hh
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#include "eevee_defines.hh"
-#include "gpu_shader_create_info.hh"
-
-GPU_SHADER_CREATE_INFO(eevee_cryptomatte_post)
- .do_static_compilation(true)
- .image(0, GPU_RGBA32F, Qualifier::READ_WRITE, ImageType::FLOAT_2D_ARRAY, "cryptomatte_img")
- .push_constant(Type::INT, "cryptomatte_layer_len")
- .push_constant(Type::INT, "cryptomatte_samples_per_layer")
- .local_group_size(FILM_GROUP_SIZE, FILM_GROUP_SIZE)
- .compute_source("eevee_cryptomatte_post_comp.glsl");
\ No newline at end of file
diff --git a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh
index 98ef502750d..05d2d2f5bf0 100644
--- a/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh
+++ b/source/blender/draw/engines/eevee_next/shaders/infos/eevee_film_info.hh
@@ -46,3 +46,11 @@ GPU_SHADER_CREATE_INFO(eevee_film_comp)
.local_group_size(FILM_GROUP_SIZE, FILM_GROUP_SIZE)
.compute_source("eevee_film_comp.glsl")
.additional_info("eevee_film");
+
+GPU_SHADER_CREATE_INFO(eevee_film_cryptomatte_post)
+ .do_static_compilation(true)
+ .image(0, GPU_RGBA32F, Qualifier::READ_WRITE, ImageType::FLOAT_2D_ARRAY, "cryptomatte_img")
+ .push_constant(Type::INT, "cryptomatte_layer_len")
+ .push_constant(Type::INT, "cryptomatte_samples_per_layer")
+ .local_group_size(FILM_GROUP_SIZE, FILM_GROUP_SIZE)
+ .compute_source("eevee_film_cryptomatte_post_comp.glsl");
diff --git a/sour
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list