|
Blender
V2.93
|
#include "DRW_engine.h"#include "DRW_render.h"#include "BKE_cryptomatte.h"#include "GPU_batch.h"#include "RE_pipeline.h"#include "BLI_alloca.h"#include "BLI_math_bits.h"#include "BLI_rect.h"#include "DNA_hair_types.h"#include "DNA_mesh_types.h"#include "DNA_modifier_types.h"#include "DNA_particle_types.h"#include "eevee_private.h"Go to the source code of this file.
This file implements Cryptomatte for EEVEE. Cryptomatte is used to extract mattes using information already available at render time. See https://raw.githubusercontent.com/Psyop/Cryptomatte/master/specification/IDmattes_poster.pdf for reference to the cryptomatte specification.
The challenge with cryptomatte in EEVEE is the merging and sorting of the samples. User can enable up to 3 cryptomatte layers (Object, Material and Asset).
Process
cryptomatte_download_buffer).Accurate mode
There are two accuracy modes. The difference between the two is the number of render samples they take into account to create the render passes. When accurate mode is off the number of levels is used as the number of cryptomatte samples to take. When accuracy mode is on the number of render samples is used.
Definition in file eevee_cryptomatte.c.
| BLI_INLINE eViewLayerCryptomatteFlags eevee_cryptomatte_active_layers | ( | const ViewLayer * | view_layer | ) |
Definition at line 70 of file eevee_cryptomatte.c.
References ViewLayer::cryptomatte_flag, and VIEW_LAYER_CRYPTOMATTE_ALL.
Referenced by EEVEE_cryptomatte_cache_populate(), eevee_cryptomatte_layers_count(), EEVEE_cryptomatte_renderpasses_init(), and eevee_cryptomatte_shading_group_create().
| void EEVEE_cryptomatte_cache_init | ( | EEVEE_ViewLayerData * | UNUSEDsldata, |
| EEVEE_Data * | vedata | ||
| ) |
Definition at line 199 of file eevee_cryptomatte.c.
References EEVEE_PassList::cryptomatte_ps, DRW_PASS_CREATE, DRW_STATE_DEPTH_EQUAL, DRW_STATE_WRITE_COLOR, EEVEE_RENDER_PASS_CRYPTOMATTE, EEVEE_StorageList::g_data, EEVEE_Data::psl, EEVEE_PrivateData::render_passes, and EEVEE_Data::stl.
Referenced by EEVEE_render_cache_init().
| void EEVEE_cryptomatte_cache_populate | ( | EEVEE_Data * | vedata, |
| EEVEE_ViewLayerData * | sldata, | ||
| Object * | ob | ||
| ) |
Definition at line 302 of file eevee_cryptomatte.c.
References BKE_object_material_get(), BLI_array_alloca, DRW_cache_object_material_count_get(), DRW_cache_object_surface_get(), DRW_cache_object_surface_material_get(), DRW_context_state_get(), DRW_shgroup_call, eevee_cryptomatte_active_layers(), eevee_cryptomatte_shading_group_create(), GPUBatch, material, NULL, DRWContextState::view_layer, and VIEW_LAYER_CRYPTOMATTE_MATERIAL.
Referenced by EEVEE_render_cache().
|
static |
Definition at line 346 of file eevee_cryptomatte.c.
References BLI_assert, EEVEE_PrivateData::cryptomatte_accum_buffer, EEVEE_PrivateData::cryptomatte_download_buffer, ViewLayer::cryptomatte_levels, DRW_context_state_get(), DRW_viewport_size_get(), eevee_cryptomatte_layer_offset(), eevee_cryptomatte_layers_count(), eevee_cryptomatte_pixel_stride(), EEVEE_StorageList::g_data, GPU_DATA_FLOAT, GPU_framebuffer_read_color(), blender::compositor::sample(), EEVEE_Data::stl, and DRWContextState::view_layer.
Referenced by EEVEE_cryptomatte_output_accumulate().
|
static |
Definition at line 575 of file eevee_cryptomatte.c.
References BLI_snprintf_rlen(), EEVEE_CryptomatteSample::hash, MAX_NAME, RE_pass_find_by_name(), RenderPass::rect, rect_height(), rect_width(), EEVEE_CryptomatteSample::weight, x, and y.
Referenced by EEVEE_cryptomatte_render_result().
| void EEVEE_cryptomatte_free | ( | EEVEE_Data * | vedata | ) |
Definition at line 717 of file eevee_cryptomatte.c.
References BKE_cryptomatte_free(), EEVEE_PrivateData::cryptomatte_accum_buffer, EEVEE_PrivateData::cryptomatte_download_buffer, EEVEE_PrivateData::cryptomatte_session, EEVEE_StorageList::g_data, MEM_SAFE_FREE, NULL, and EEVEE_Data::stl.
Referenced by eevee_store_metadata().
|
static |
Definition at line 251 of file eevee_cryptomatte.c.
References DRW_shgroup_hair_create_sub(), eevee_cryptomatte_shading_group_create(), and material.
Referenced by EEVEE_cryptomatte_object_hair_cache_populate(), and EEVEE_cryptomatte_particle_hair_cache_populate().
| BLI_INLINE int eevee_cryptomatte_layer_offset | ( | const ViewLayer * | view_layer, |
| const int | layer | ||
| ) |
Definition at line 99 of file eevee_cryptomatte.c.
References ViewLayer::cryptomatte_levels.
Referenced by eevee_cryptomatte_download_buffer(), and eevee_cryptomatte_postprocess_weights().
| BLI_INLINE int eevee_cryptomatte_layer_stride | ( | const ViewLayer * | view_layer | ) |
Definition at line 94 of file eevee_cryptomatte.c.
References ViewLayer::cryptomatte_levels.
Referenced by eevee_cryptomatte_pixel_stride(), and EEVEE_cryptomatte_render_result().
| BLI_INLINE int eevee_cryptomatte_layers_count | ( | const ViewLayer * | view_layer | ) |
Definition at line 78 of file eevee_cryptomatte.c.
References count_bits_i(), and eevee_cryptomatte_active_layers().
Referenced by eevee_cryptomatte_download_buffer(), EEVEE_cryptomatte_output_init(), eevee_cryptomatte_pixel_stride(), and eevee_cryptomatte_postprocess_weights().
| void EEVEE_cryptomatte_object_hair_cache_populate | ( | EEVEE_Data * | vedata, |
| EEVEE_ViewLayerData * | sldata, | ||
| Object * | ob | ||
| ) |
Definition at line 263 of file eevee_cryptomatte.c.
References BLI_assert, Object::data, eevee_cryptomatte_hair_cache_populate(), HAIR_MATERIAL_NR, Hair::mat, material, NULL, OB_HAIR, and Object::type.
Referenced by EEVEE_render_cache().
| void EEVEE_cryptomatte_output_accumulate | ( | EEVEE_ViewLayerData * | UNUSEDsldata, |
| EEVEE_Data * | vedata | ||
| ) |
Definition at line 406 of file eevee_cryptomatte.c.
References EEVEE_PrivateData::cryptomatte_accurate_mode, EEVEE_FramebufferList::cryptomatte_fb, ViewLayer::cryptomatte_levels, EEVEE_PassList::cryptomatte_ps, DRW_context_state_get(), DRW_draw_pass(), eevee_cryptomatte_download_buffer(), EEVEE_StorageList::effects, EEVEE_Data::fbl, EEVEE_StorageList::g_data, GPU_framebuffer_bind(), EEVEE_FramebufferList::main_fb, EEVEE_Data::psl, EEVEE_Data::stl, EEVEE_EffectsInfo::taa_current_sample, and DRWContextState::view_layer.
Referenced by EEVEE_renderpasses_output_accumulate().
| void EEVEE_cryptomatte_output_init | ( | EEVEE_ViewLayerData * | UNUSEDsldata, |
| EEVEE_Data * | vedata, | ||
| int | UNUSEDtot_samples | ||
| ) |
Definition at line 147 of file eevee_cryptomatte.c.
References EEVEE_TextureList::cryptomatte, EEVEE_PrivateData::cryptomatte_accum_buffer, EEVEE_PrivateData::cryptomatte_download_buffer, EEVEE_FramebufferList::cryptomatte_fb, DRW_context_state_get(), DRW_texture_ensure_fullscreen_2d(), DRW_viewport_size_get(), DRW_viewport_texture_list_get(), eevee_cryptomatte_layers_count(), eevee_cryptomatte_pixel_stride(), EEVEE_Data::fbl, EEVEE_StorageList::g_data, GPU_R32F, GPU_RG32F, GPU_RGBA32F, MEM_calloc_arrayN, MEM_malloc_arrayN, NULL, EEVEE_Data::stl, EEVEE_Data::txl, and DRWContextState::view_layer.
Referenced by EEVEE_renderpasses_output_init().
| void EEVEE_cryptomatte_particle_hair_cache_populate | ( | EEVEE_Data * | vedata, |
| EEVEE_ViewLayerData * | sldata, | ||
| Object * | ob | ||
| ) |
Definition at line 273 of file eevee_cryptomatte.c.
References Object::data, ParticleSettings::draw_as, DRW_context_state_get(), DRW_object_is_visible_psys_in_active_context(), eevee_cryptomatte_hair_cache_populate(), eModifierType_ParticleSystem, if(), LISTBASE_FOREACH, Mesh::mat, material, mesh, Object::modifiers, NULL, OB_MESH, DRWContextState::object_edit, ParticleSettings::omat, ParticleSystem::part, PART_DRAW_PATH, PART_DRAW_REND, ParticleSettings::ren_as, Mesh::totcol, and Object::type.
Referenced by EEVEE_render_cache().
| BLI_INLINE int eevee_cryptomatte_passes_per_layer | ( | const ViewLayer * | view_layer | ) |
Definition at line 87 of file eevee_cryptomatte.c.
References ViewLayer::cryptomatte_levels.
Referenced by EEVEE_cryptomatte_render_result(), and EEVEE_cryptomatte_update_passes().
| BLI_INLINE int eevee_cryptomatte_pixel_stride | ( | const ViewLayer * | view_layer | ) |
Definition at line 104 of file eevee_cryptomatte.c.
References eevee_cryptomatte_layer_stride(), and eevee_cryptomatte_layers_count().
Referenced by eevee_cryptomatte_download_buffer(), EEVEE_cryptomatte_output_init(), eevee_cryptomatte_postprocess_weights(), and EEVEE_cryptomatte_render_result().
|
static |
Definition at line 494 of file eevee_cryptomatte.c.
References BLI_assert, EEVEE_PrivateData::cryptomatte_accum_buffer, ViewLayer::cryptomatte_levels, DRW_context_state_get(), DRW_viewport_size_get(), eevee_cryptomatte_layer_offset(), eevee_cryptomatte_layers_count(), eevee_cryptomatte_pixel_stride(), eevee_cryptomatte_sample_cmp_reverse(), EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_StorageList::g_data, GPU_DATA_FLOAT, GPU_texture_read(), MEM_freeN, NULL, blender::compositor::sample(), EEVEE_Data::stl, EEVEE_EffectsInfo::taa_current_sample, EEVEE_Data::txl, DRWContextState::view_layer, and EEVEE_TextureList::volume_transmittance_accum.
Referenced by EEVEE_cryptomatte_render_result().
| void EEVEE_cryptomatte_render_result | ( | RenderLayer * | rl, |
| const char * | viewname, | ||
| const rcti * | rect, | ||
| EEVEE_Data * | vedata, | ||
| EEVEE_ViewLayerData * | UNUSEDsldata | ||
| ) |
Definition at line 624 of file eevee_cryptomatte.c.
References BLI_assert, BLI_rcti_size_x(), BLI_rcti_size_y(), EEVEE_PrivateData::cryptomatte_accum_buffer, ViewLayer::cryptomatte_flag, ViewLayer::cryptomatte_levels, DRW_context_state_get(), DRW_viewport_size_get(), eevee_cryptomatte_extract_render_passes(), eevee_cryptomatte_layer_stride(), eevee_cryptomatte_passes_per_layer(), eevee_cryptomatte_pixel_stride(), eevee_cryptomatte_postprocess_weights(), EEVEE_StorageList::g_data, EEVEE_PrivateData::overscan_pixels, rect_height(), rect_width(), EEVEE_Data::stl, DRWContextState::view_layer, VIEW_LAYER_CRYPTOMATTE_ALL, VIEW_LAYER_CRYPTOMATTE_ASSET, VIEW_LAYER_CRYPTOMATTE_MATERIAL, VIEW_LAYER_CRYPTOMATTE_OBJECT, rcti::xmin, and rcti::ymin.
Referenced by eevee_render_result_cryptomatte().
| void EEVEE_cryptomatte_renderpasses_init | ( | EEVEE_Data * | vedata | ) |
Definition at line 115 of file eevee_cryptomatte.c.
References BKE_cryptomatte_add_layer(), BKE_cryptomatte_init(), EEVEE_PrivateData::cryptomatte_accurate_mode, ViewLayer::cryptomatte_flag, EEVEE_PrivateData::cryptomatte_session, DRW_context_state_get(), DRW_state_is_scene_render(), eevee_cryptomatte_active_layers(), EEVEE_RENDER_PASS_CRYPTOMATTE, EEVEE_RENDER_PASS_VOLUME_LIGHT, EEVEE_StorageList::g_data, EEVEE_PrivateData::render_passes, EEVEE_Data::stl, DRWContextState::view_layer, VIEW_LAYER_CRYPTOMATTE_ACCURATE, VIEW_LAYER_CRYPTOMATTE_ASSET, VIEW_LAYER_CRYPTOMATTE_MATERIAL, and VIEW_LAYER_CRYPTOMATTE_OBJECT.
Referenced by EEVEE_renderpasses_init().
|
static |
Definition at line 478 of file eevee_cryptomatte.c.
References Freestyle::a, and EEVEE_CryptomatteSample::weight.
Referenced by eevee_cryptomatte_postprocess_weights().
|
static |
Definition at line 207 of file eevee_cryptomatte.c.
References BKE_cryptomatte_asset_hash(), BKE_cryptomatte_hash_to_float(), BKE_cryptomatte_material_hash(), BKE_cryptomatte_object_hash(), EEVEE_PassList::cryptomatte_ps, EEVEE_PrivateData::cryptomatte_session, DRW_context_state_get(), DRW_shgroup_create(), DRW_shgroup_uniform_vec4_copy(), eevee_cryptomatte_active_layers(), EEVEE_shaders_cryptomatte_sh_get(), EEVEE_StorageList::g_data, material, EEVEE_Data::psl, EEVEE_Data::stl, DRWContextState::view_layer, VIEW_LAYER_CRYPTOMATTE_ASSET, VIEW_LAYER_CRYPTOMATTE_MATERIAL, and VIEW_LAYER_CRYPTOMATTE_OBJECT.
Referenced by EEVEE_cryptomatte_cache_populate(), and eevee_cryptomatte_hair_cache_populate().
| void EEVEE_cryptomatte_store_metadata | ( | EEVEE_Data * | vedata, |
| RenderResult * | render_result | ||
| ) |
Definition at line 705 of file eevee_cryptomatte.c.
References BKE_cryptomatte_store_metadata(), BLI_assert, EEVEE_PrivateData::cryptomatte_session, DRW_context_state_get(), EEVEE_StorageList::g_data, EEVEE_Data::stl, and DRWContextState::view_layer.
Referenced by eevee_store_metadata().
| void EEVEE_cryptomatte_update_passes | ( | RenderEngine * | engine, |
| Scene * | scene, | ||
| ViewLayer * | view_layer | ||
| ) |
Definition at line 443 of file eevee_cryptomatte.c.
References BLI_snprintf_rlen(), ViewLayer::cryptomatte_flag, eevee_cryptomatte_passes_per_layer(), MAX_NAME, RE_engine_register_pass(), scene, SOCK_RGBA, VIEW_LAYER_CRYPTOMATTE_ASSET, VIEW_LAYER_CRYPTOMATTE_MATERIAL, and VIEW_LAYER_CRYPTOMATTE_OBJECT.
Referenced by EEVEE_render_update_passes().