[Bf-blender-cvs] [6e1b895ee70] cycles-x: Remove accurate cryptomatte implementation
Sergey Sharybin
noreply at git.blender.org
Tue Aug 24 17:05:11 CEST 2021
Commit: 6e1b895ee706a446d22252b7644e1fad62ac7259
Author: Sergey Sharybin
Date: Tue Jul 20 16:18:28 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB6e1b895ee706a446d22252b7644e1fad62ac7259
Remove accurate cryptomatte implementation
Affects both Cycles and EEVEE.
The motivation:
- For EEVEE it is a performance penalty to do GPU transfers for every
sample rendered.
- With big tile rendering in Cycles the accurate mode can have a very
high memory footprint.
- Feature parity between CPU and GPU: the GPU code paths should provide
results which are usable by production.
If there are cases when the accurate is really a must-have we'd need to
have a demo file and investigate how it can be supported on both CPU
and GPU.
Note that for comparison of accurate vs. non-accurate in the regular
Cycles should be done very carefully: CPU does not implement sorting
for non-accurate mode, so doesn't OptiX; and GPU does not support
accurate modes; CUDA doesn't implement sorting properly when adaptive
sampling is involved (what a mess!).
Differential Revision: https://developer.blender.org/D11975
===================================================================
M intern/cycles/blender/addon/version_update.py
M intern/cycles/blender/blender_sync.cpp
M intern/cycles/device/cpu/device_impl.cpp
M intern/cycles/device/cpu/kernel_thread_globals.cpp
M intern/cycles/kernel/device/cpu/globals.h
M intern/cycles/kernel/kernel_passes.h
M intern/cycles/render/CMakeLists.txt
M intern/cycles/render/buffers.cpp
M intern/cycles/render/buffers.h
D intern/cycles/render/coverage.cpp
D intern/cycles/render/coverage.h
M release/scripts/modules/rna_manual_reference.py
M release/scripts/startup/bl_ui/properties_view_layer.py
M source/blender/blenkernel/intern/layer.c
M source/blender/blenloader/intern/versioning_290.c
M source/blender/draw/engines/eevee/eevee_cryptomatte.c
M source/blender/draw/engines/eevee/eevee_private.h
M source/blender/makesdna/DNA_layer_types.h
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py
index d81ce9c23b5..48cbc156f0c 100644
--- a/intern/cycles/blender/addon/version_update.py
+++ b/intern/cycles/blender/addon/version_update.py
@@ -195,7 +195,6 @@ def do_versions(self):
view_layer.use_pass_cryptomatte_material = cview_layer.get("use_pass_crypto_material", False)
view_layer.use_pass_cryptomatte_asset = cview_layer.get("use_pass_crypto_asset", False)
view_layer.pass_cryptomatte_depth = cview_layer.get("pass_crypto_depth", 6)
- view_layer.use_pass_cryptomatte_accurate = cview_layer.get("pass_crypto_accurate", True)
if version <= (2, 93, 7):
if scene.render.engine == 'CYCLES':
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 76cf754381d..3672588e09a 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -657,9 +657,6 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
}
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_ASSET);
}
- if (b_view_layer.use_pass_cryptomatte_accurate() && cryptomatte_passes != CRYPT_NONE) {
- cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_ACCURATE);
- }
scene->film->set_cryptomatte_passes(cryptomatte_passes);
/* Denoising passes. */
diff --git a/intern/cycles/device/cpu/device_impl.cpp b/intern/cycles/device/cpu/device_impl.cpp
index a1601a6461f..3b0db6bdd0e 100644
--- a/intern/cycles/device/cpu/device_impl.cpp
+++ b/intern/cycles/device/cpu/device_impl.cpp
@@ -48,7 +48,6 @@
#include "bvh/bvh_embree.h"
#include "render/buffers.h"
-#include "render/coverage.h"
#include "util/util_debug.h"
#include "util/util_foreach.h"
diff --git a/intern/cycles/device/cpu/kernel_thread_globals.cpp b/intern/cycles/device/cpu/kernel_thread_globals.cpp
index e2d0c4a3400..988b00cd1f0 100644
--- a/intern/cycles/device/cpu/kernel_thread_globals.cpp
+++ b/intern/cycles/device/cpu/kernel_thread_globals.cpp
@@ -32,10 +32,6 @@ CPUKernelThreadGlobals::CPUKernelThreadGlobals(const KernelGlobals &kernel_globa
{
reset_runtime_memory();
- coverage_asset = nullptr;
- coverage_object = nullptr;
- coverage_material = nullptr;
-
#ifdef WITH_OSL
OSLShader::thread_init(this, reinterpret_cast<OSLGlobals *>(osl_globals_memory));
#else
diff --git a/intern/cycles/kernel/device/cpu/globals.h b/intern/cycles/kernel/device/cpu/globals.h
index 541255ffdc6..98b036e269d 100644
--- a/intern/cycles/kernel/device/cpu/globals.h
+++ b/intern/cycles/kernel/device/cpu/globals.h
@@ -21,9 +21,6 @@
#include "kernel/kernel_profiling.h"
#include "kernel/kernel_types.h"
-#include "util/util_map.h"
-#include "util/util_vector.h"
-
CCL_NAMESPACE_BEGIN
/* On the CPU, we pass along the struct KernelGlobals to nearly everywhere in
@@ -37,8 +34,6 @@ struct OSLThreadData;
struct OSLShadingSystem;
#endif
-typedef unordered_map<float, float> CoverageMap;
-
typedef struct KernelGlobals {
#define KERNEL_TEX(type, name) texture<type> name;
#include "kernel/kernel_textures.h"
@@ -55,11 +50,6 @@ typedef struct KernelGlobals {
/* **** Run-time data **** */
- /* A buffer for storing per-pixel coverage for Cryptomatte. */
- CoverageMap *coverage_object;
- CoverageMap *coverage_material;
- CoverageMap *coverage_asset;
-
ProfilingState profiler;
} KernelGlobals;
diff --git a/intern/cycles/kernel/kernel_passes.h b/intern/cycles/kernel/kernel_passes.h
index 3c302387b4d..a67dc6f6391 100644
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@ -153,27 +153,13 @@ ccl_device_forceinline void kernel_write_shadow_catcher_bounce_data(
#endif /* __SHADOW_CATCHER__ */
-#ifdef __KERNEL_CPU__
-# define WRITE_ID_SLOT(buffer, depth, id, matte_weight, name) \
- kernel_write_id_pass_cpu(buffer, depth * 2, id, matte_weight, kg->coverage_##name)
-ccl_device_inline size_t kernel_write_id_pass_cpu(
- float *ccl_restrict buffer, size_t depth, float id, float matte_weight, CoverageMap *map)
+ccl_device_inline size_t kernel_write_id_pass(float *ccl_restrict buffer,
+ size_t depth,
+ float id,
+ float matte_weight)
{
- if (map) {
- (*map)[id] += matte_weight;
- return 0;
- }
-#else /* __KERNEL_CPU__ */
-# define WRITE_ID_SLOT(buffer, depth, id, matte_weight, name) \
- kernel_write_id_slots_gpu(buffer, depth * 2, id, matte_weight)
-ccl_device_inline size_t kernel_write_id_slots_gpu(ccl_global float *ccl_restrict buffer,
- size_t depth,
- float id,
- float matte_weight)
-{
-#endif /* __KERNEL_CPU__ */
- kernel_write_id_slots(buffer, depth, id, matte_weight);
- return depth * 2;
+ kernel_write_id_slots(buffer, depth * 2, id, matte_weight);
+ return depth * 4;
}
ccl_device_inline void kernel_write_data_passes(INTEGRATOR_STATE_ARGS,
@@ -247,18 +233,18 @@ ccl_device_inline void kernel_write_data_passes(INTEGRATOR_STATE_ARGS,
ccl_global float *cryptomatte_buffer = buffer + kernel_data.film.pass_cryptomatte;
if (kernel_data.film.cryptomatte_passes & CRYPT_OBJECT) {
const float id = object_cryptomatte_id(kg, sd->object);
- cryptomatte_buffer += WRITE_ID_SLOT(
- cryptomatte_buffer, kernel_data.film.cryptomatte_depth, id, matte_weight, object);
+ cryptomatte_buffer += kernel_write_id_pass(
+ cryptomatte_buffer, kernel_data.film.cryptomatte_depth, id, matte_weight);
}
if (kernel_data.film.cryptomatte_passes & CRYPT_MATERIAL) {
const float id = shader_cryptomatte_id(kg, sd->shader);
- cryptomatte_buffer += WRITE_ID_SLOT(
- cryptomatte_buffer, kernel_data.film.cryptomatte_depth, id, matte_weight, material);
+ cryptomatte_buffer += kernel_write_id_pass(
+ cryptomatte_buffer, kernel_data.film.cryptomatte_depth, id, matte_weight);
}
if (kernel_data.film.cryptomatte_passes & CRYPT_ASSET) {
const float id = object_cryptomatte_asset_id(kg, sd->object);
- cryptomatte_buffer += WRITE_ID_SLOT(
- cryptomatte_buffer, kernel_data.film.cryptomatte_depth, id, matte_weight, asset);
+ cryptomatte_buffer += kernel_write_id_pass(
+ cryptomatte_buffer, kernel_data.film.cryptomatte_depth, id, matte_weight);
}
}
}
diff --git a/intern/cycles/render/CMakeLists.txt b/intern/cycles/render/CMakeLists.txt
index 87770664811..6edb5261b32 100644
--- a/intern/cycles/render/CMakeLists.txt
+++ b/intern/cycles/render/CMakeLists.txt
@@ -32,7 +32,6 @@ set(SRC
camera.cpp
colorspace.cpp
constant_fold.cpp
- coverage.cpp
denoising.cpp
film.cpp
geometry.cpp
@@ -78,7 +77,6 @@ set(SRC_HEADERS
camera.h
colorspace.h
constant_fold.h
- coverage.h
denoising.h
film.h
geometry.h
diff --git a/intern/cycles/render/buffers.cpp b/intern/cycles/render/buffers.cpp
index 00f0f14ae2e..a2917ba69e5 100644
--- a/intern/cycles/render/buffers.cpp
+++ b/intern/cycles/render/buffers.cpp
@@ -115,29 +115,6 @@ bool BufferParams::modified(const BufferParams &other) const
return memcmp(pass_offset_, other.pass_offset_, sizeof(pass_offset_)) != 0;
}
-/* Render Buffer Task */
-
-RenderTile::RenderTile()
-{
- x = 0;
- y = 0;
- w = 0;
- h = 0;
-
- sample = 0;
- start_sample = 0;
- num_samples = 0;
- resolution = 0;
-
- offset = 0;
- stride = 0;
-
- buffer = 0;
-
- buffers = NULL;
- stealing_state = NO_STEALING;
-}
-
/* Render Buffers */
RenderBuffers::RenderBuffers(Device *device) : buffer(device, "RenderBuffers", MEM_READ_WRITE)
diff --git a/intern/cycles/render/buffers.h b/intern/cycles/render/buffers.h
index 4387d5ba657..70a6b441b0c 100644
--- a/intern/cycles/render/buffers.h
+++ b/intern/cycles/render/buffers.h
@@ -113,78 +113,6 @@ void render_buffers_host_copy_denoised(RenderBuffers *dst,
const BufferParams &src_params,
const size_t src_offset = 0);
-/* Render Tile
- * Rendering task on a buffer */
-
-class RenderTile {
- public:
- typedef enum { PATH_TRACE = (1 << 0), BAKE = (1 << 1), DENOISE = (1 << 2) } Task;
-
- Task task;
- int x, y, w, h;
- int start_sample;
- int num_samples;
- int sample;
- int resolution;
- int offset;
- int stride;
- int tile_index;
-
- device_ptr buffer;
- int device_size;
-
- typedef enum { NO_STEALING = 0, CAN_BE_STOLEN = 1, WAS_STOLEN = 2 } StealingState;
- StealingState stealing_state;
-
- RenderBuffers *buffers;
-
- RenderTile();
-
- int4 bounds() const
- {
- return make_int4(x, /* xmin */
- y, /* ymin */
- x + w, /* xmax */
- y + h); /* ymax */
- }
-};
-
-/* Render Tile Neighbors
- * Set of neighboring tiles used for denoising. Tile order:
- * 0 1 2
- * 3 4 5
- * 6 7 8 */
-
-class RenderTileNeighbors {
- public:
- static const int SIZE = 9;
- static const int CENTER = 4;
-
- RenderTile tiles[SIZE];
- RenderTile target;
-
- RenderTileNeighbors(const RenderTile ¢er)
- {
- tiles[CENTER] = center;
- }
-
- int4 bounds() const
- {
- return make_int4(tiles[3].x, /* xmin */
- tiles[1].y, /* ymin */
- tiles[5].x + tiles[5].w, /* xmax */
- tiles[7].y + tiles[7].h); /* ymax */
- }
-
- void set_bounds_from_center()
- {
- tiles[3].x = tiles[CENTER].x;
- tiles[1].y = tiles[CENTER].y;
- tiles[5].x = tiles[CENTER].x + tiles[CENTER].w;
- tiles[7].y = tiles[CENTER].y + tiles[CENTER].h;
- }
-};
-
CCL_NAMESPACE_END
#endif /* __BUFFERS_H__ */
diff --git a/intern/cycles/render/coverage.cpp b/intern/cycles/render/coverage.cpp
deleted file mode 100644
index ddca11e342e..00000000000
--- a/intern/cycles/render/coverage.cpp
+++ /dev/n
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list