Fix T92442: undo removal of Eevee cryptomatte accurate mode option
The Cycles accurate mode was removed, but the Eevee option for this has a different meaning and should not have been removed. The Eevee accurate makes cryptomatte accumulate for every sample, which Cycles has always done regardless of any option.
This commit is contained in:
parent
b926f54f3c
commit
0624acf088
@ -215,6 +215,7 @@ url_manual_mapping = (
|
||||
("bpy.types.toolsettings.use_proportional_connected*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-use-proportional-connected"),
|
||||
("bpy.types.toolsettings.use_proportional_projected*", "editors/3dview/controls/proportional_editing.html#bpy-types-toolsettings-use-proportional-projected"),
|
||||
("bpy.types.view3doverlay.vertex_paint_mode_opacity*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-vertex-paint-mode-opacity"),
|
||||
("bpy.types.viewlayer.use_pass_cryptomatte_accurate*", "render/layers/passes.html#bpy-types-viewlayer-use-pass-cryptomatte-accurate"),
|
||||
("bpy.types.viewlayer.use_pass_cryptomatte_material*", "render/layers/passes.html#bpy-types-viewlayer-use-pass-cryptomatte-material"),
|
||||
("bpy.ops.gpencil.vertex_color_brightness_contrast*", "grease_pencil/modes/vertex_paint/editing.html#bpy-ops-gpencil-vertex-color-brightness-contrast"),
|
||||
("bpy.ops.view3d.edit_mesh_extrude_individual_move*", "modeling/meshes/editing/face/extrude_faces.html#bpy-ops-view3d-edit-mesh-extrude-individual-move"),
|
||||
|
@ -192,6 +192,8 @@ class ViewLayerCryptomattePanel(ViewLayerButtonsPanel, Panel):
|
||||
view_layer.use_pass_cryptomatte_material,
|
||||
view_layer.use_pass_cryptomatte_asset))
|
||||
col.prop(view_layer, "pass_cryptomatte_depth", text="Levels")
|
||||
col.prop(view_layer, "use_pass_cryptomatte_accurate",
|
||||
text="Accurate Mode")
|
||||
|
||||
|
||||
class VIEWLAYER_PT_layer_passes_cryptomatte(ViewLayerCryptomattePanel, Panel):
|
||||
|
@ -183,6 +183,7 @@ static ViewLayer *view_layer_add(const char *name)
|
||||
view_layer->passflag = SCE_PASS_COMBINED;
|
||||
view_layer->pass_alpha_threshold = 0.5f;
|
||||
view_layer->cryptomatte_levels = 6;
|
||||
view_layer->cryptomatte_flag = VIEW_LAYER_CRYPTOMATTE_ACCURATE;
|
||||
BKE_freestyle_config_init(&view_layer->freestyle_config);
|
||||
|
||||
return view_layer;
|
||||
|
@ -1435,6 +1435,7 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
|
||||
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
|
||||
LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
|
||||
view_layer->cryptomatte_levels = 6;
|
||||
view_layer->cryptomatte_flag = VIEW_LAYER_CRYPTOMATTE_ACCURATE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -139,6 +139,8 @@ void EEVEE_cryptomatte_renderpasses_init(EEVEE_Data *vedata)
|
||||
g_data->cryptomatte_session = session;
|
||||
|
||||
g_data->render_passes |= EEVEE_RENDER_PASS_CRYPTOMATTE | EEVEE_RENDER_PASS_VOLUME_LIGHT;
|
||||
g_data->cryptomatte_accurate_mode = (view_layer->cryptomatte_flag &
|
||||
VIEW_LAYER_CRYPTOMATTE_ACCURATE) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -403,6 +405,7 @@ void EEVEE_cryptomatte_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EE
|
||||
{
|
||||
EEVEE_FramebufferList *fbl = vedata->fbl;
|
||||
EEVEE_StorageList *stl = vedata->stl;
|
||||
EEVEE_PrivateData *g_data = stl->g_data;
|
||||
EEVEE_EffectsInfo *effects = stl->effects;
|
||||
EEVEE_PassList *psl = vedata->psl;
|
||||
const DRWContextState *draw_ctx = DRW_context_state_get();
|
||||
@ -410,9 +413,10 @@ void EEVEE_cryptomatte_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EE
|
||||
const int cryptomatte_levels = view_layer->cryptomatte_levels;
|
||||
const int current_sample = effects->taa_current_sample;
|
||||
|
||||
/* Render samples used by cryptomatte are limited to the number of cryptomatte levels. This will
|
||||
* reduce the overhead of downloading the GPU buffer and integrating it into the accum buffer. */
|
||||
if (current_sample < cryptomatte_levels) {
|
||||
/* In accurate mode all render samples are evaluated. In inaccurate mode this is limited to the
|
||||
* number of cryptomatte levels. This will reduce the overhead of downloading the GPU buffer and
|
||||
* integrating it into the accum buffer. */
|
||||
if (g_data->cryptomatte_accurate_mode || current_sample < cryptomatte_levels) {
|
||||
static float clear_color[4] = {0.0};
|
||||
GPU_framebuffer_bind(fbl->cryptomatte_fb);
|
||||
GPU_framebuffer_clear_color(fbl->cryptomatte_fb, clear_color);
|
||||
|
@ -1042,6 +1042,7 @@ typedef struct EEVEE_PrivateData {
|
||||
int aov_hash;
|
||||
int num_aovs_used;
|
||||
struct CryptomatteSession *cryptomatte_session;
|
||||
bool cryptomatte_accurate_mode;
|
||||
EEVEE_CryptomatteSample *cryptomatte_accum_buffer;
|
||||
float *cryptomatte_download_buffer;
|
||||
|
||||
|
@ -68,7 +68,7 @@ typedef enum eViewLayerCryptomatteFlags {
|
||||
VIEW_LAYER_CRYPTOMATTE_OBJECT = (1 << 0),
|
||||
VIEW_LAYER_CRYPTOMATTE_MATERIAL = (1 << 1),
|
||||
VIEW_LAYER_CRYPTOMATTE_ASSET = (1 << 2),
|
||||
/* VIEW_LAYER_CRYPTOMATTE_ACCURATE = (1 << 3), */ /* DEPRECATED */
|
||||
VIEW_LAYER_CRYPTOMATTE_ACCURATE = (1 << 3),
|
||||
} eViewLayerCryptomatteFlags;
|
||||
#define VIEW_LAYER_CRYPTOMATTE_ALL \
|
||||
(VIEW_LAYER_CRYPTOMATTE_OBJECT | VIEW_LAYER_CRYPTOMATTE_MATERIAL | VIEW_LAYER_CRYPTOMATTE_ASSET)
|
||||
|
@ -4166,6 +4166,13 @@ void rna_def_view_layer_common(BlenderRNA *brna, StructRNA *srna, const bool sce
|
||||
prop, "Cryptomatte Levels", "Sets how many unique objects can be distinguished per pixel");
|
||||
RNA_def_property_ui_range(prop, 2.0, 16.0, 2.0, 0.0);
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_pass_cryptomatte_accurate", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "cryptomatte_flag", VIEW_LAYER_CRYPTOMATTE_ACCURATE);
|
||||
RNA_def_property_boolean_default(prop, true);
|
||||
RNA_def_property_ui_text(
|
||||
prop, "Cryptomatte Accurate", "Generate a more accurate cryptomatte pass");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update");
|
||||
}
|
||||
|
||||
prop = RNA_def_property(srna, "use_solid", PROP_BOOLEAN, PROP_NONE);
|
||||
|
Loading…
Reference in New Issue
Block a user