diff --git a/intern/cycles/util/profiling.cpp b/intern/cycles/util/profiling.cpp index 54be0fcd1d1..f6b48e12cbc 100644 --- a/intern/cycles/util/profiling.cpp +++ b/intern/cycles/util/profiling.cpp @@ -6,6 +6,7 @@ #include "util/algorithm.h" #include "util/foreach.h" #include "util/set.h" +#include CCL_NAMESPACE_BEGIN diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png index 5dfafd5ee13..68de2acc3e6 100644 --- a/release/datafiles/splash.png +++ b/release/datafiles/splash.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8fc347d7c2fc71855eacfcc8cb985f84764fad20ddbb1b68ddbe4036197cdd9 -size 482000 +oid sha256:bc6c25ab5d940722d6bcc99041115d53ed2997b0f490a9075d99fd0a7497574d +size 507089 diff --git a/release/datafiles/splash_alt.png b/release/datafiles/splash_alt.png deleted file mode 100644 index 3dae2eb51d2..00000000000 Binary files a/release/datafiles/splash_alt.png and /dev/null differ diff --git a/scripts/startup/bl_ui/node_add_menu_shader.py b/scripts/startup/bl_ui/node_add_menu_shader.py index 989d0c788f4..8709709859a 100644 --- a/scripts/startup/bl_ui/node_add_menu_shader.py +++ b/scripts/startup/bl_ui/node_add_menu_shader.py @@ -343,6 +343,7 @@ class NODE_MT_category_goo_engine(Menu): node_add_menu.add_node_type(layout, "ShaderNodeSdfVectorOp") node_add_menu.add_node_type(layout, "ShaderNodeSdfNoise") + class NODE_MT_category_shader_script(Menu): bl_idname = "NODE_MT_category_shader_script" bl_label = "Script" diff --git a/scripts/startup/bl_ui/properties_constraint.py b/scripts/startup/bl_ui/properties_constraint.py index 1b2b5e9e8e9..90eebe8c212 100644 --- a/scripts/startup/bl_ui/properties_constraint.py +++ b/scripts/startup/bl_ui/properties_constraint.py @@ -401,7 +401,7 @@ class ConstraintButtonsPanel: sub.prop(con, "invert_y", text="Y", toggle=True) sub.prop(con, "invert_z", text="Z", toggle=True) row.label(icon='BLANK1') - + layout.prop(con, "invert_all", text="Invert Rotation") layout.prop(con, "mix_mode", text="Mix", text_ctxt=i18n_contexts.constraint) diff --git a/scripts/startup/bl_ui/properties_data_bone.py b/scripts/startup/bl_ui/properties_data_bone.py index c80b05b0160..ab0c1ee8cf9 100644 --- a/scripts/startup/bl_ui/properties_data_bone.py +++ b/scripts/startup/bl_ui/properties_data_bone.py @@ -353,9 +353,13 @@ class BONE_PT_display(BoneButtonsPanel, Panel): col = layout.column() col.prop(bone, "hide", text="Hide", toggle=False) + if (pchan := context.object.pose.bones[bone.name]) and context.bone: + col.prop(pchan, "hide_outliner", text="Hide in Outliner", toggle=False) + layout.prop(bone.color, "palette", text="Bone Color") self.draw_bone_color_ui(layout, bone.color) + def draw_bone_color_ui(self, layout, bone_color): if not bone_color.is_custom: return @@ -374,9 +378,6 @@ class BONE_PT_display(BoneButtonsPanel, Panel): row.prop(bone_color.custom, "select", text="") row.prop(bone_color.custom, "active", text="") - if (pchan := context.object.pose.bones[bone.name]) and context.bone: - col.prop(pchan, "hide_outliner", text="Hide in Outliner", toggle=False) - class BONE_PT_display_custom_shape(BoneButtonsPanel, Panel): bl_label = "Custom Shape" diff --git a/scripts/startup/bl_ui/properties_material.py b/scripts/startup/bl_ui/properties_material.py index 6a129949c45..b7b20ae2df3 100644 --- a/scripts/startup/bl_ui/properties_material.py +++ b/scripts/startup/bl_ui/properties_material.py @@ -280,6 +280,29 @@ def draw_material_surface_settings(layout, mat, is_eevee=True): col.prop(mat, "use_thickness_from_shadow", text="From Shadow") +def draw_goo_material_surface_settings(layout, mat): + layout.use_property_split = True + layout.use_property_decorate = False + + layout.prop(mat, "use_backface_culling") + layout.prop(mat, "blend_method") + layout.prop(mat, "shadow_method") + + layout.prop(mat, "check_shadow_id") + + row = layout.row() + row.active = ((mat.blend_method == 'CLIP') or (mat.shadow_method == 'CLIP')) + row.prop(mat, "alpha_threshold") + + if mat.blend_method not in {'OPAQUE', 'CLIP', 'HASHED'}: + layout.prop(mat, "show_transparent_back") + + layout.prop(mat, "use_screen_refraction") + layout.prop(mat, "refraction_depth") + layout.prop(mat, "use_sss_translucency") + layout.prop(mat, "pass_index") + + def draw_material_volume_settings(layout, mat, is_eevee=True): layout.prop(mat, "volume_intersection_method", text="Intersection" if is_eevee else "Volume Intersection") @@ -291,9 +314,12 @@ def draw_material_settings(self, context): mat = context.material - draw_material_surface_settings(layout, mat, False) - draw_material_volume_settings(layout, mat, False) - + if context.scene.render.engine == "BLENDER_EEVEE": + draw_goo_material_surface_settings(layout, mat) + + else: + draw_material_surface_settings(layout, mat, False) + draw_material_volume_settings(layout, mat, False) class EEVEE_MATERIAL_PT_settings(MaterialButtonsPanel, Panel): bl_label = "Settings" diff --git a/scripts/startup/bl_ui/properties_render.py b/scripts/startup/bl_ui/properties_render.py index ab15880a4b7..bb942eb0fdb 100644 --- a/scripts/startup/bl_ui/properties_render.py +++ b/scripts/startup/bl_ui/properties_render.py @@ -919,6 +919,17 @@ class RENDER_PT_eevee_indirect_lighting(RenderButtonsPanel, Panel): scene = context.scene props = scene.eevee + col = layout.column() + col.operator("scene.light_cache_bake", text="Bake Indirect Lighting", icon='RENDER_STILL') + col.operator("scene.light_cache_bake", text="Bake Cubemap Only", icon='LIGHTPROBE_SPHERE').subset = 'CUBEMAPS' + col.operator("scene.light_cache_free", text="Delete Lighting Cache") + + cache_info = scene.eevee.gi_cache_info + if cache_info: + col.label(text=rpt_(cache_info), translate=False) + + col.prop(props, "gi_auto_bake") + col.prop(props, "gi_diffuse_bounces") col.prop(props, "gi_cubemap_resolution") col.prop(props, "gi_visibility_resolution", text="Diffuse Occlusion") diff --git a/scripts/startup/bl_ui/space_userpref.py b/scripts/startup/bl_ui/space_userpref.py index 378da2503b1..9a497951859 100644 --- a/scripts/startup/bl_ui/space_userpref.py +++ b/scripts/startup/bl_ui/space_userpref.py @@ -2903,9 +2903,9 @@ class USERPREF_PT_experimental_debugging(ExperimentalPanel, Panel): ({"property": "use_asset_indexing"}, None), ({"property": "use_viewport_debug"}, None), ({"property": "use_eevee_debug"}, None), - ({"property": "use_extensions_debug"}, ("/blender/blender/issues/119521", "#119521")), ({"property": "disable_material_icon"}, None), ({"property": "disable_search_on_keypress"}, None), + ({"property": "use_extensions_debug"}, ("/blender/blender/issues/119521", "#119521")), ), ) diff --git a/scripts/startup/bl_ui/space_view3d.py b/scripts/startup/bl_ui/space_view3d.py index 9193e89f3d8..92088843ca3 100644 --- a/scripts/startup/bl_ui/space_view3d.py +++ b/scripts/startup/bl_ui/space_view3d.py @@ -924,6 +924,8 @@ class VIEW3D_HT_header(Header): row.prop(tool_settings, "use_gpencil_weight_data_add", text="", icon='WPAINT_HLT') row.separator(factor=0.4) row.prop(tool_settings, "use_gpencil_draw_additive", text="", icon='FREEZE') + sub.separator(factor=0.4) + sub.prop(tool_settings, "use_gpencil_autoclose_strokes", text="") # Select mode for Sculpt if object_mode == 'SCULPT_GPENCIL': @@ -958,8 +960,6 @@ class VIEW3D_HT_header(Header): sub.prop(tool_settings, "use_gpencil_weight_data_add", text="", icon='WPAINT_HLT') sub.separator(factor=0.4) sub.prop(tool_settings, "use_gpencil_draw_additive", text="", icon='FREEZE') - sub.separator(factor=0.4) - sub.prop(tool_settings, "use_gpencil_autoclose_strokes", text="") # Select mode for Editing if gpd.use_stroke_edit_mode: @@ -4414,7 +4414,7 @@ class VIEW3D_MT_pose_constraints(Menu): layout.operator("pose.constraints_copy") layout.operator("pose.constraints_clear") layout.operator("pose.constraints_merge") - + class VIEW3D_MT_pose_names(Menu): bl_label = "Names" diff --git a/scripts/startup/goo_engine_light_groups.py b/scripts/startup/goo_engine_light_groups.py index 1ab389a7b6a..7c2c43e51b3 100644 --- a/scripts/startup/goo_engine_light_groups.py +++ b/scripts/startup/goo_engine_light_groups.py @@ -6,7 +6,6 @@ Light group key management for Goo Engine (EEVEE) import bpy from bpy.types import Panel, Material, Light, PropertyGroup, UIList, Operator, ShaderNodeShaderInfo, ShaderNodeTree -from bl_ui import UI_UL_list from bpy.props import StringProperty, CollectionProperty, IntProperty, PointerProperty, EnumProperty, BoolProperty from bpy.utils import register_classes_factory from bpy.app.handlers import persistent @@ -174,7 +173,7 @@ class MAT_UL_LightGroupList(UIList): flt_flags = [] flt_order = [] - helper_funcs = UI_UL_list + helper_funcs = bpy.types.UI_UL_list if self.filter_name: flt_flags = helper_funcs.filter_items_by_name(self.filter_name, self.bitflag_filter_item, keys, "name") diff --git a/source/blender/blenkernel/intern/blender.cc b/source/blender/blenkernel/intern/blender.cc index b4e43311cb1..221944f0f4d 100644 --- a/source/blender/blenkernel/intern/blender.cc +++ b/source/blender/blenkernel/intern/blender.cc @@ -118,9 +118,10 @@ static void blender_version_init() BLI_assert_msg(0, "Invalid Blender version cycle"); } - version_cycle = " Goo Engine"; const char *version_suffix = BKE_blender_version_is_lts() ? " LTS" : ""; + version_cycle = " Goo Engine"; + SNPRINTF(blender_version_string, "%d.%01d.%d%s%s", BLENDER_VERSION / 100, diff --git a/source/blender/blenkernel/intern/constraint.cc b/source/blender/blenkernel/intern/constraint.cc index d1a55af21bb..22c230ac6a9 100644 --- a/source/blender/blenkernel/intern/constraint.cc +++ b/source/blender/blenkernel/intern/constraint.cc @@ -2143,7 +2143,7 @@ static void rotlike_evaluate(bConstraint *con, bConstraintOb *cob, ListBase *tar default: BLI_assert(false); } - + /* Invert final rotation matrix. */ if (data->flag & ROTLIKE_INVERT_ALL) { invert_m3(newrot); diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc index 0aec7690860..ca2c50dd03b 100644 --- a/source/blender/blenkernel/intern/image.cc +++ b/source/blender/blenkernel/intern/image.cc @@ -2210,30 +2210,6 @@ void BKE_image_stamp_buf(Scene *scene, y -= BUFF_MARGIN_Y * 2; } - /* Top left corner, below Frame (goo-engine) */ - if (TEXT_SIZE_CHECK(stamp_data.time, w, h)) { - y -= h; - - /* extra space for background */ - buf_rectfill_area(rect, - rectf, - width, - height, - scene->r.bg_stamp, - display, - 0, - y - BUFF_MARGIN_Y, - w + BUFF_MARGIN_X, - y + h + BUFF_MARGIN_Y); - - /* and pad the text. */ - BLF_position(mono, x, y + y_ofs, 0.0); - BLF_draw_buffer(mono, stamp_data.time, sizeof(stamp_data.time)); - - /* the extra pixel for background. */ - y -= BUFF_MARGIN_Y * 2; - } - /* Top left corner, below File, Date, Memory, Rendertime, Hostname */ BLF_enable(mono, BLF_WORD_WRAP); if (TEXT_SIZE_CHECK_WORD_WRAP(stamp_data.note, w, h)) { @@ -2282,6 +2258,29 @@ void BKE_image_stamp_buf(Scene *scene, x += w + pad; } + /* Left bottom corner */ + if (TEXT_SIZE_CHECK(stamp_data.time, w, h)) { + + /* extra space for background */ + buf_rectfill_area(rect, + rectf, + width, + height, + scene->r.bg_stamp, + display, + x - BUFF_MARGIN_X, + y, + x + w + BUFF_MARGIN_X, + y + h + BUFF_MARGIN_Y); + + /* and pad the text. */ + BLF_position(mono, x, y + y_ofs, 0.0); + BLF_draw_buffer(mono, stamp_data.time, sizeof(stamp_data.time)); + + /* space width. */ + x += w + pad; + } + if (TEXT_SIZE_CHECK(stamp_data.frame, w, h)) { /* extra space for background. */ diff --git a/source/blender/blenkernel/intern/material.cc b/source/blender/blenkernel/intern/material.cc index 0e3a460a307..0d102b620f2 100644 --- a/source/blender/blenkernel/intern/material.cc +++ b/source/blender/blenkernel/intern/material.cc @@ -2024,7 +2024,7 @@ static void material_default_surface_init(Material *ma) principled->locy = 300.0f; output->locx = 300.0f; output->locy = 300.0f; - + blender::bke::nodeSetActive(ntree, output); const uint32_t default_light_groups[4] = { diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc index 3c7be383cef..0dfb8b10f11 100644 --- a/source/blender/blenkernel/intern/scene.cc +++ b/source/blender/blenkernel/intern/scene.cc @@ -101,6 +101,8 @@ #include "BLO_read_write.hh" +#include "engines/eevee/eevee_lightcache.h" + #include "IMB_colormanagement.hh" #include "IMB_imbuf.hh" @@ -204,7 +206,7 @@ static void scene_init_data(ID *id) pset->brush[PE_BRUSH_CUT].strength = 1.0f; } - STRNCPY(scene->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT); + STRNCPY(scene->r.engine, RE_engine_id_BLENDER_EEVEE); STRNCPY(scene->r.pic, U.renderdir); @@ -450,6 +452,11 @@ static void scene_free_data(ID *id) scene->master_collection = nullptr; } + if (scene->eevee.light_cache_data) { + EEVEE_lightcache_free(scene->eevee.light_cache_data); + scene->eevee.light_cache_data = nullptr; + } + if (scene->display.shading.prop) { IDP_FreeProperty(scene->display.shading.prop); scene->display.shading.prop = nullptr; @@ -955,6 +962,22 @@ static void scene_foreach_id(ID *id, LibraryForeachIDData *data) } } +static void scene_foreach_cache(ID *id, + IDTypeForeachCacheFunctionCallback function_callback, + void *user_data) +{ + Scene *scene = (Scene *)id; + IDCacheKey key{}; + key.id_session_uid = id->session_uid; + key.identifier = offsetof(Scene, eevee.light_cache_data); + + function_callback(id, + &key, + (void **)&scene->eevee.light_cache_data, + IDTYPE_CACHE_CB_FLAGS_PERSISTENT, + user_data); +} + static bool seq_foreach_path_callback(Sequence *seq, void *user_data) { if (SEQ_HAS_PATH(seq)) { @@ -1170,6 +1193,12 @@ static void scene_blend_write(BlendWriter *writer, ID *id, const void *id_addres reinterpret_cast(BLO_write_get_id_buffer_temp_id(temp_embedded_id_buffer))); } + /* Eevee Light-cache */ + if (sce->eevee.light_cache_data && !BLO_write_is_undo(writer)) { + BLO_write_struct(writer, LightCache, sce->eevee.light_cache_data); + EEVEE_lightcache_blend_write(writer, sce->eevee.light_cache_data); + } + BKE_screen_view3d_shading_blend_write(writer, &sce->display.shading); /* Freed on `do_versions()`. */ @@ -1492,6 +1521,19 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id) BKE_view_layer_blend_read_data(reader, view_layer); } + if (BLO_read_data_is_undo(reader)) { + /* If it's undo do nothing here, caches are handled by higher-level generic calling code. */ + } + else { + /* else try to read the cache from file. */ + BLO_read_struct(reader, LightCache, &sce->eevee.light_cache_data); + if (sce->eevee.light_cache_data) { + EEVEE_lightcache_blend_read_data(reader, sce->eevee.light_cache_data); + } + } + + EEVEE_lightcache_info_update(&sce->eevee); + BKE_screen_view3d_shading_blend_read_data(reader, &sce->display.shading); BLO_read_struct(reader, IDProperty, &sce->layer_properties); @@ -1587,7 +1629,7 @@ constexpr IDTypeInfo get_type_info() * support all possible corner cases. */ info.make_local = nullptr; info.foreach_id = scene_foreach_id; - info.foreach_cache = nullptr; + info.foreach_cache = scene_foreach_cache; info.foreach_path = scene_foreach_path; info.owner_pointer_get = nullptr; @@ -1769,6 +1811,9 @@ void BKE_scene_copy_data_eevee(Scene *sce_dst, const Scene *sce_src) { /* Copy eevee data between scenes. */ sce_dst->eevee = sce_src->eevee; + sce_dst->eevee.light_cache_data = nullptr; + sce_dst->eevee.light_cache_info[0] = '\0'; + /* TODO: Copy the cache. */ } Scene *BKE_scene_duplicate(Main *bmain, Scene *sce, eSceneCopyMethod type) diff --git a/source/blender/blenloader/intern/versioning_280.cc b/source/blender/blenloader/intern/versioning_280.cc index cf0d41e09c1..ba408c1f328 100644 --- a/source/blender/blenloader/intern/versioning_280.cc +++ b/source/blender/blenloader/intern/versioning_280.cc @@ -3554,7 +3554,7 @@ void blo_do_versions_280(FileData *fd, Library * /*lib*/, Main *bmain) EEVEE_GET_BOOL(props, gtao_use_bent_normals, SCE_EEVEE_GTAO_BENT_NORMALS); EEVEE_GET_BOOL(props, gtao_bounce, SCE_EEVEE_GTAO_BOUNCE); EEVEE_GET_BOOL(props, dof_enable, SCE_EEVEE_DOF_ENABLED); - // EEVEE_GET_BOOL(props, bloom_enable, SCE_EEVEE_BLOOM_ENABLED); + EEVEE_GET_BOOL(props, bloom_enable, SCE_EEVEE_BLOOM_ENABLED); EEVEE_GET_BOOL(props, motion_blur_enable, SCE_EEVEE_MOTION_BLUR_ENABLED_DEPRECATED); EEVEE_GET_BOOL(props, shadow_high_bitdepth, SCE_EEVEE_SHADOW_HIGH_BITDEPTH); EEVEE_GET_BOOL(props, taa_reprojection, SCE_EEVEE_TAA_REPROJECTION); diff --git a/source/blender/blenloader/intern/versioning_300.cc b/source/blender/blenloader/intern/versioning_300.cc index 5ea624a3dcf..d30c7378f16 100644 --- a/source/blender/blenloader/intern/versioning_300.cc +++ b/source/blender/blenloader/intern/versioning_300.cc @@ -81,6 +81,7 @@ #include "BKE_node.hh" #include "BKE_screen.hh" #include "BKE_workspace.hh" +#include "BKE_text.h" #include "RNA_access.hh" #include "RNA_enum_types.hh" @@ -1361,6 +1362,17 @@ void do_versions_after_linking_300(FileData * /*fd*/, Main *bmain) FOREACH_NODETREE_END; } + /* Goo engine version warning script - remove the old one if it exists. */ + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 306, 0)) { + LISTBASE_FOREACH_MUTABLE (Text *, text, &bmain->texts) { + if (strcmp(text->id.name, "TX.version_warning.py") > 0) { + continue; + } + BLI_remlink(&bmain->texts, text); + BKE_id_free(bmain, text); + } + } + if (!MAIN_VERSION_FILE_ATLEAST(bmain, 306, 13)) { version_nla_action_strip_hold(bmain); } diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index c0c1bacbfec..c3463a40b2b 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -28,7 +28,6 @@ #include "DNA_movieclip_types.h" #include "DNA_scene_types.h" #include "DNA_sequence_types.h" -#include "DNA_text_types.h" #include "DNA_world_types.h" #include "DNA_defaults.h" @@ -985,74 +984,74 @@ void do_versions_after_linking_400(FileData *fd, Main *bmain) bmain, NTREE_SHADER, SH_NODE_SUBSURFACE_SCATTERING, 4, 1, 5); } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 50)) { - if (all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { - LISTBASE_FOREACH (Object *, object, &bmain->objects) { - versioning_eevee_shadow_settings(object); - } - } - } + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 50)) { + // if (all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { + // LISTBASE_FOREACH (Object *, object, &bmain->objects) { + // versioning_eevee_shadow_settings(object); + // } + // } + // } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 51)) { - /* Convert blend method to math nodes. */ - if (all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { - LISTBASE_FOREACH (Material *, material, &bmain->materials) { - if (!material->use_nodes || material->nodetree == nullptr) { - /* Nothing to version. */ - } - else if (ELEM(material->blend_method, MA_BM_HASHED, MA_BM_BLEND)) { - /* Compatible modes. Nothing to change. */ - } - else if (material->blend_shadow == MA_BS_NONE) { - /* No need to match the surface since shadows are disabled. */ - } - else if (material->blend_shadow == MA_BS_SOLID) { - /* This is already versioned an transferred to `transparent_shadows`. */ - } - else if ((material->blend_shadow == MA_BS_CLIP && material->blend_method != MA_BM_CLIP) || - (material->blend_shadow == MA_BS_HASHED)) - { - BLO_reportf_wrap( - fd->reports, - RPT_WARNING, - RPT_("Material %s could not be converted because of different Blend Mode " - "and Shadow Mode (need manual adjustment)\n"), - material->id.name + 2); - } - else { - /* TODO(fclem): Check if threshold is driven or has animation. Bail out if needed? */ + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 51)) { + // /* Convert blend method to math nodes. */ + // if (all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { + // LISTBASE_FOREACH (Material *, material, &bmain->materials) { + // if (!material->use_nodes || material->nodetree == nullptr) { + // /* Nothing to version. */ + // } + // else if (ELEM(material->blend_method, MA_BM_HASHED, MA_BM_BLEND)) { + // /* Compatible modes. Nothing to change. */ + // } + // else if (material->blend_shadow == MA_BS_NONE) { + // /* No need to match the surface since shadows are disabled. */ + // } + // else if (material->blend_shadow == MA_BS_SOLID) { + // /* This is already versioned an transferred to `transparent_shadows`. */ + // } + // else if ((material->blend_shadow == MA_BS_CLIP && material->blend_method != MA_BM_CLIP) || + // (material->blend_shadow == MA_BS_HASHED)) + // { + // BLO_reportf_wrap( + // fd->reports, + // RPT_WARNING, + // RPT_("Material %s could not be converted because of different Blend Mode " + // "and Shadow Mode (need manual adjustment)\n"), + // material->id.name + 2); + // } + // else { + // /* TODO(fclem): Check if threshold is driven or has animation. Bail out if needed? */ - float threshold = (material->blend_method == MA_BM_CLIP) ? material->alpha_threshold : - 2.0f; + // float threshold = (material->blend_method == MA_BM_CLIP) ? material->alpha_threshold : + // 2.0f; - if (!versioning_eevee_material_blend_mode_settings(material->nodetree, threshold)) { - BLO_reportf_wrap(fd->reports, - RPT_WARNING, - RPT_("Material %s could not be converted because of non-trivial " - "alpha blending (need manual adjustment)\n"), - material->id.name + 2); - } - } + // if (!versioning_eevee_material_blend_mode_settings(material->nodetree, threshold)) { + // BLO_reportf_wrap(fd->reports, + // RPT_WARNING, + // RPT_("Material %s could not be converted because of non-trivial " + // "alpha blending (need manual adjustment)\n"), + // material->id.name + 2); + // } + // } - if (material->blend_shadow == MA_BS_NONE) { - versioning_eevee_material_shadow_none(material); - } - /* Set blend_mode & blend_shadow for forward compatibility. */ - material->blend_method = (material->blend_method != MA_BM_BLEND) ? MA_BM_HASHED : - MA_BM_BLEND; - material->blend_shadow = (material->blend_shadow == MA_BS_SOLID) ? MA_BS_SOLID : - MA_BS_HASHED; - } - } - } + // if (material->blend_shadow == MA_BS_NONE) { + // versioning_eevee_material_shadow_none(material); + // } + // /* Set blend_mode & blend_shadow for forward compatibility. */ + // material->blend_method = (material->blend_method != MA_BM_BLEND) ? MA_BM_HASHED : + // MA_BM_BLEND; + // material->blend_shadow = (material->blend_shadow == MA_BS_SOLID) ? MA_BS_SOLID : + // MA_BS_HASHED; + // } + // } + // } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 52)) { - LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { - if (STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE)) { - STRNCPY(scene->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT); - } - } - } + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 52)) { + // LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { + // if (STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE)) { + // STRNCPY(scene->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT); + // } + // } + // } /** * Always bump subversion in BKE_blender_version.h when adding versioning @@ -2768,16 +2767,6 @@ static void fix_built_in_curve_attribute_defaults(Main *bmain) void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) { - /* Goo engine version warning script - remove if it exists. */ - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 400, 0)) { - LISTBASE_FOREACH_MUTABLE (Text *, text, &bmain->texts) { - if (strcmp(text->id.name, "TX.version_warning.py") > 0) { - continue; - } - BLI_remlink(&bmain->texts, text); - } - } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 400, 1)) { LISTBASE_FOREACH (Mesh *, mesh, &bmain->meshes) { version_mesh_legacy_to_struct_of_array_format(*mesh); @@ -3387,23 +3376,23 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) FOREACH_NODETREE_END; } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 401, 5)) { - /* Unify Material::blend_shadow and Cycles.use_transparent_shadows into the - * Material::blend_flag. */ - bool is_eevee = all_scenes_use(bmain, - {RE_engine_id_BLENDER_EEVEE, RE_engine_id_BLENDER_EEVEE_NEXT}); - LISTBASE_FOREACH (Material *, material, &bmain->materials) { - bool transparent_shadows = true; - if (is_eevee) { - transparent_shadows = material->blend_shadow != MA_BS_SOLID; - } - else if (IDProperty *cmat = version_cycles_properties_from_ID(&material->id)) { - transparent_shadows = version_cycles_property_boolean( - cmat, "use_transparent_shadow", true); - } - SET_FLAG_FROM_TEST(material->blend_flag, transparent_shadows, MA_BL_TRANSPARENT_SHADOW); - } - } + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 401, 5)) { + // /* Unify Material::blend_shadow and Cycles.use_transparent_shadows into the + // * Material::blend_flag. */ + // bool is_eevee = all_scenes_use(bmain, + // {RE_engine_id_BLENDER_EEVEE, RE_engine_id_BLENDER_EEVEE_NEXT}); + // LISTBASE_FOREACH (Material *, material, &bmain->materials) { + // bool transparent_shadows = true; + // if (is_eevee) { + // transparent_shadows = material->blend_shadow != MA_BS_SOLID; + // } + // else if (IDProperty *cmat = version_cycles_properties_from_ID(&material->id)) { + // transparent_shadows = version_cycles_property_boolean( + // cmat, "use_transparent_shadow", true); + // } + // SET_FLAG_FROM_TEST(material->blend_flag, transparent_shadows, MA_BL_TRANSPARENT_SHADOW); + // } + // } if (!MAIN_VERSION_FILE_ATLEAST(bmain, 401, 5)) { /** NOTE: This versioning code didn't update the subversion number. */ @@ -4029,41 +4018,41 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) } } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 31)) { - bool only_uses_eevee_legacy_or_workbench = true; - LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { - if (!(STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE) || - STREQ(scene->r.engine, RE_engine_id_BLENDER_WORKBENCH))) - { - only_uses_eevee_legacy_or_workbench = false; - } - } - /* Mark old EEVEE world volumes for showing conversion operator. */ - LISTBASE_FOREACH (World *, world, &bmain->worlds) { - if (world->nodetree) { - bNode *output_node = version_eevee_output_node_get(world->nodetree, SH_NODE_OUTPUT_WORLD); - if (output_node) { - bNodeSocket *volume_input_socket = static_cast( - BLI_findlink(&output_node->inputs, 1)); - if (volume_input_socket) { - LISTBASE_FOREACH (bNodeLink *, node_link, &world->nodetree->links) { - if (node_link->tonode == output_node && node_link->tosock == volume_input_socket) { - world->flag |= WO_USE_EEVEE_FINITE_VOLUME; - /* Only display a warning message if we are sure this can be used by EEVEE. */ - if (only_uses_eevee_legacy_or_workbench) { - BLO_reportf_wrap(fd->reports, - RPT_WARNING, - RPT_("%s contains a volume shader that might need to be " - "converted to object (see world volume panel)\n"), - world->id.name + 2); - } - } - } - } - } - } - } - } + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 31)) { + // bool only_uses_eevee_legacy_or_workbench = true; + // LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) { + // if (!(STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE) || + // STREQ(scene->r.engine, RE_engine_id_BLENDER_WORKBENCH))) + // { + // only_uses_eevee_legacy_or_workbench = false; + // } + // } + // /* Mark old EEVEE world volumes for showing conversion operator. */ + // LISTBASE_FOREACH (World *, world, &bmain->worlds) { + // if (world->nodetree) { + // bNode *output_node = version_eevee_output_node_get(world->nodetree, SH_NODE_OUTPUT_WORLD); + // if (output_node) { + // bNodeSocket *volume_input_socket = static_cast( + // BLI_findlink(&output_node->inputs, 1)); + // if (volume_input_socket) { + // LISTBASE_FOREACH (bNodeLink *, node_link, &world->nodetree->links) { + // if (node_link->tonode == output_node && node_link->tosock == volume_input_socket) { + // world->flag |= WO_USE_EEVEE_FINITE_VOLUME; + // /* Only display a warning message if we are sure this can be used by EEVEE. */ + // if (only_uses_eevee_legacy_or_workbench) { + // BLO_reportf_wrap(fd->reports, + // RPT_WARNING, + // RPT_("%s contains a volume shader that might need to be " + // "converted to object (see world volume panel)\n"), + // world->id.name + 2); + // } + // } + // } + // } + // } + // } + // } + // } if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 33)) { constexpr int NTREE_EXECUTION_MODE_GPU = 2; @@ -4136,20 +4125,20 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) } } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 39)) { - /* Unify cast shadow property with Cycles. */ - if (!all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { - const Light *default_light = DNA_struct_default_get(Light); - LISTBASE_FOREACH (Light *, light, &bmain->lights) { - IDProperty *clight = version_cycles_properties_from_ID(&light->id); - if (clight) { - bool value = version_cycles_property_boolean( - clight, "cast_shadow", default_light->mode & LA_SHADOW); - SET_FLAG_FROM_TEST(light->mode, value, LA_SHADOW); - } - } - } - } + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 39)) { + // /* Unify cast shadow property with Cycles. */ + // if (!all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { + // const Light *default_light = DNA_struct_default_get(Light); + // LISTBASE_FOREACH (Light *, light, &bmain->lights) { + // IDProperty *clight = version_cycles_properties_from_ID(&light->id); + // if (clight) { + // bool value = version_cycles_property_boolean( + // clight, "cast_shadow", default_light->mode & LA_SHADOW); + // SET_FLAG_FROM_TEST(light->mode, value, LA_SHADOW); + // } + // } + // } + // } if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 40)) { LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) { @@ -4322,20 +4311,20 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) } } - if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 64)) { - if (all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { - /* Re-apply versioning made for EEVEE-Next in 4.1 before it got delayed. */ - LISTBASE_FOREACH (Material *, material, &bmain->materials) { - bool transparent_shadows = material->blend_shadow != MA_BS_SOLID; - SET_FLAG_FROM_TEST(material->blend_flag, transparent_shadows, MA_BL_TRANSPARENT_SHADOW); - } - LISTBASE_FOREACH (Material *, mat, &bmain->materials) { - mat->surface_render_method = (mat->blend_method == MA_BM_BLEND) ? - MA_SURFACE_METHOD_FORWARD : - MA_SURFACE_METHOD_DEFERRED; - } - } - } + // if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 64)) { + // if (all_scenes_use(bmain, {RE_engine_id_BLENDER_EEVEE})) { + // /* Re-apply versioning made for EEVEE-Next in 4.1 before it got delayed. */ + // LISTBASE_FOREACH (Material *, material, &bmain->materials) { + // bool transparent_shadows = material->blend_shadow != MA_BS_SOLID; + // SET_FLAG_FROM_TEST(material->blend_flag, transparent_shadows, MA_BL_TRANSPARENT_SHADOW); + // } + // LISTBASE_FOREACH (Material *, mat, &bmain->materials) { + // mat->surface_render_method = (mat->blend_method == MA_BM_BLEND) ? + // MA_SURFACE_METHOD_FORWARD : + // MA_SURFACE_METHOD_DEFERRED; + // } + // } + // } if (!MAIN_VERSION_FILE_ATLEAST(bmain, 402, 66)) { fix_built_in_curve_attribute_defaults(bmain); diff --git a/source/blender/blenloader/intern/versioning_defaults.cc b/source/blender/blenloader/intern/versioning_defaults.cc index 60fdc067f09..9ef6822745c 100644 --- a/source/blender/blenloader/intern/versioning_defaults.cc +++ b/source/blender/blenloader/intern/versioning_defaults.cc @@ -334,7 +334,7 @@ void BLO_update_defaults_workspace(WorkSpace *workspace, const char *app_templat static void blo_update_defaults_scene(Main *bmain, Scene *scene) { - STRNCPY(scene->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT); + STRNCPY(scene->r.engine, RE_engine_id_BLENDER_EEVEE); scene->r.cfra = 1.0f; diff --git a/source/blender/blenloader/intern/versioning_userdef.cc b/source/blender/blenloader/intern/versioning_userdef.cc index 22b7097c374..de415a9c698 100644 --- a/source/blender/blenloader/intern/versioning_userdef.cc +++ b/source/blender/blenloader/intern/versioning_userdef.cc @@ -533,7 +533,7 @@ void blo_do_versions_userdef(UserDef *userdef) if (!USER_VERSION_ATLEAST(278, 6)) { /* Clear preference flags for re-use. */ - userdef->flag &= ~(USER_FLAG_NUMINPUT_ADVANCED | (1 << 2) | USER_FLAG_UNUSED_3 | + userdef->flag &= ~(USER_FLAG_NUMINPUT_ADVANCED | (1 << 2) | USER_FLAG_VERSION_SCRIPT | USER_FLAG_UNUSED_6 | USER_FLAG_UNUSED_7 | USER_INTERNET_ALLOW | USER_DEVELOPER_UI); userdef->uiflag &= ~(USER_HEADER_BOTTOM); diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt index 66136912fa5..4374a3f1e9e 100644 --- a/source/blender/draw/CMakeLists.txt +++ b/source/blender/draw/CMakeLists.txt @@ -108,6 +108,33 @@ set(SRC engines/compositor/compositor_engine.cc engines/image/image_engine.cc engines/image/image_shader.cc + engines/eevee/eevee_bloom.cc + engines/eevee/eevee_cryptomatte.cc + engines/eevee/eevee_data.cc + engines/eevee/eevee_depth_of_field.cc + engines/eevee/eevee_effects.cc + engines/eevee/eevee_engine.cc + engines/eevee/eevee_lightcache.cc + engines/eevee/eevee_lightprobes.cc + engines/eevee/eevee_lights.cc + engines/eevee/eevee_lookdev.cc + engines/eevee/eevee_lut_gen.cc + engines/eevee/eevee_materials.cc + engines/eevee/eevee_mist.cc + engines/eevee/eevee_motion_blur.cc + engines/eevee/eevee_occlusion.cc + engines/eevee/eevee_render.cc + engines/eevee/eevee_renderpasses.cc + engines/eevee/eevee_sampling.cc + engines/eevee/eevee_screen_raytrace.cc + engines/eevee/eevee_shaders.cc + engines/eevee/eevee_shaders_extra.cc + engines/eevee/eevee_shadows.cc + engines/eevee/eevee_shadows_cascade.cc + engines/eevee/eevee_shadows_cube.cc + engines/eevee/eevee_subsurface.cc + engines/eevee/eevee_temporal_sampling.cc + engines/eevee/eevee_volumes.cc engines/eevee_next/eevee_ambient_occlusion.cc engines/eevee_next/eevee_camera.cc engines/eevee_next/eevee_cryptomatte.cc @@ -240,6 +267,10 @@ set(SRC engines/basic/basic_engine.h engines/basic/basic_private.h engines/compositor/compositor_engine.h + engines/eevee/eevee_engine.h + engines/eevee/eevee_lightcache.h + engines/eevee/eevee_private.hh + engines/eevee/engine_eevee_shared_defines.h engines/eevee_next/eevee_ambient_occlusion.hh engines/eevee_next/eevee_camera.hh engines/eevee_next/eevee_cryptomatte.hh @@ -322,6 +353,104 @@ set(LIB ) set(GLSL_SRC + engines/eevee/shaders/ambient_occlusion_lib.glsl + engines/eevee/shaders/background_vert.glsl + engines/eevee/shaders/common_uniforms_lib.glsl + engines/eevee/shaders/common_utiltex_lib.glsl + engines/eevee/shaders/lights_lib.glsl + engines/eevee/shaders/lightprobe_lib.glsl + engines/eevee/shaders/lightprobe_filter_glossy_frag.glsl + engines/eevee/shaders/lightprobe_filter_diffuse_frag.glsl + engines/eevee/shaders/lightprobe_filter_visibility_frag.glsl + engines/eevee/shaders/lightprobe_geom.glsl + engines/eevee/shaders/lightprobe_vert.glsl + engines/eevee/shaders/lightprobe_vert_no_geom.glsl + engines/eevee/shaders/lightprobe_cube_display_frag.glsl + engines/eevee/shaders/lightprobe_cube_display_vert.glsl + engines/eevee/shaders/lightprobe_grid_display_frag.glsl + engines/eevee/shaders/lightprobe_grid_display_vert.glsl + engines/eevee/shaders/lightprobe_grid_fill_frag.glsl + engines/eevee/shaders/lightprobe_planar_display_frag.glsl + engines/eevee/shaders/lightprobe_planar_display_vert.glsl + engines/eevee/shaders/lookdev_world_frag.glsl + engines/eevee/shaders/closure_eval_lib.glsl + engines/eevee/shaders/closure_eval_diffuse_lib.glsl + engines/eevee/shaders/closure_eval_glossy_lib.glsl + engines/eevee/shaders/closure_eval_surface_lib.glsl + engines/eevee/shaders/closure_eval_refraction_lib.glsl + engines/eevee/shaders/closure_eval_volume_lib.glsl + engines/eevee/shaders/closure_eval_translucent_lib.glsl + engines/eevee/shaders/closure_type_lib.glsl + engines/eevee/shaders/eevee_empty.glsl + engines/eevee/shaders/eevee_empty_volume.glsl + engines/eevee/shaders/effect_bloom_frag.glsl + engines/eevee/shaders/effect_dof_bokeh_frag.glsl + engines/eevee/shaders/effect_dof_dilate_tiles_frag.glsl + engines/eevee/shaders/effect_dof_downsample_frag.glsl + engines/eevee/shaders/effect_dof_filter_frag.glsl + engines/eevee/shaders/effect_dof_flatten_tiles_frag.glsl + engines/eevee/shaders/effect_dof_gather_frag.glsl + engines/eevee/shaders/effect_dof_lib.glsl + engines/eevee/shaders/effect_dof_reduce_frag.glsl + engines/eevee/shaders/effect_dof_resolve_frag.glsl + engines/eevee/shaders/effect_dof_scatter_frag.glsl + engines/eevee/shaders/effect_dof_scatter_vert.glsl + engines/eevee/shaders/effect_dof_setup_frag.glsl + engines/eevee/shaders/effect_reflection_lib.glsl + engines/eevee/shaders/effect_reflection_resolve_frag.glsl + engines/eevee/shaders/effect_reflection_trace_frag.glsl + engines/eevee/shaders/effect_downsample_frag.glsl + engines/eevee/shaders/effect_downsample_cube_frag.glsl + engines/eevee/shaders/effect_gtao_frag.glsl + engines/eevee/shaders/effect_velocity_resolve_frag.glsl + engines/eevee/shaders/effect_velocity_tile_frag.glsl + engines/eevee/shaders/effect_minmaxz_frag.glsl + engines/eevee/shaders/effect_mist_frag.glsl + engines/eevee/shaders/effect_motion_blur_frag.glsl + engines/eevee/shaders/effect_subsurface_frag.glsl + engines/eevee/shaders/effect_translucency_frag.glsl + engines/eevee/shaders/effect_temporal_aa.glsl + engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl + engines/eevee/shaders/lightprobe_planar_downsample_geom.glsl + engines/eevee/shaders/lightprobe_planar_downsample_vert.glsl + engines/eevee/shaders/object_motion_frag.glsl + engines/eevee/shaders/object_motion_vert.glsl + engines/eevee/shaders/prepass_frag.glsl + engines/eevee/shaders/shadow_accum_frag.glsl + engines/eevee/shaders/shadow_frag.glsl + engines/eevee/shaders/shadow_vert.glsl + engines/eevee/shaders/bsdf_lut_frag.glsl + engines/eevee/shaders/btdf_lut_frag.glsl + engines/eevee/shaders/bsdf_common_lib.glsl + engines/eevee/shaders/irradiance_lib.glsl + engines/eevee/shaders/octahedron_lib.glsl + engines/eevee/shaders/bsdf_sampling_lib.glsl + engines/eevee/shaders/random_lib.glsl + engines/eevee/shaders/raytrace_lib.glsl + engines/eevee/shaders/renderpass_accumulate_frag.glsl + engines/eevee/shaders/renderpass_lib.glsl + engines/eevee/shaders/renderpass_postprocess_frag.glsl + engines/eevee/shaders/cryptomatte_frag.glsl + engines/eevee/shaders/cryptomatte_vert.glsl + engines/eevee/shaders/ltc_lib.glsl + engines/eevee/shaders/ssr_lib.glsl + engines/eevee/shaders/surface_frag.glsl + engines/eevee/shaders/surface_geom.glsl + engines/eevee/shaders/surface_lib.glsl + engines/eevee/shaders/surface_vert.glsl + engines/eevee/shaders/update_noise_frag.glsl + engines/eevee/shaders/volumetric_accum_frag.glsl + engines/eevee/shaders/volumetric_lib.glsl + engines/eevee/shaders/volumetric_frag.glsl + engines/eevee/shaders/volumetric_geom.glsl + engines/eevee/shaders/volumetric_vert.glsl + engines/eevee/shaders/volumetric_resolve_frag.glsl + engines/eevee/shaders/volumetric_scatter_frag.glsl + engines/eevee/shaders/volumetric_integration_frag.glsl + engines/eevee/shaders/world_vert.glsl + engines/eevee/shaders/infos/engine_eevee_legacy_shared.h + engines/eevee/engine_eevee_shared_defines.h + engines/eevee_next/shaders/eevee_ambient_occlusion_lib.glsl engines/eevee_next/shaders/eevee_ambient_occlusion_pass_comp.glsl engines/eevee_next/shaders/eevee_attributes_lib.glsl diff --git a/source/blender/draw/engines/eevee_next/eevee_film.cc b/source/blender/draw/engines/eevee_next/eevee_film.cc index ba34d5556cd..0364d16f400 100644 --- a/source/blender/draw/engines/eevee_next/eevee_film.cc +++ b/source/blender/draw/engines/eevee_next/eevee_film.cc @@ -236,7 +236,7 @@ void Film::init(const int2 &extent, const rcti *output_rect) } /* Filter obsolete passes. */ - enabled_passes_ &= ~(EEVEE_RENDER_PASS_UNUSED_8 | EEVEE_RENDER_PASS_UNUSED_14); + enabled_passes_ &= ~(EEVEE_RENDER_PASS_UNUSED_8 | EEVEE_RENDER_PASS_BLOOM); if (scene.r.mode & R_MBLUR) { /* Disable motion vector pass if motion blur is enabled. */ diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.cc b/source/blender/draw/engines/gpencil/gpencil_cache_utils.cc index 1e06fd187d2..cb967e863dc 100644 --- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.cc +++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.cc @@ -484,7 +484,7 @@ GPENCIL_tLayer *gpencil_layer_cache_add(GPENCIL_PrivateData *pd, DRW_shgroup_uniform_float_copy(grp, "gpThicknessWorldScale", thickness_scale); DRW_shgroup_uniform_float_copy(grp, "gpVertexColorOpacity", vert_col_opacity); DRW_shgroup_uniform_bool_copy(grp, "gpThicknessFixedWorldScale", is_fixed_view_scale); - + /* If random color type, need color by layer. */ float gpl_color[4]; copy_v4_v4(gpl_color, layer_tint); diff --git a/source/blender/draw/intern/draw_common.cc b/source/blender/draw/intern/draw_common.cc index 717121acb1a..67d88c27fd9 100644 --- a/source/blender/draw/intern/draw_common.cc +++ b/source/blender/draw/intern/draw_common.cc @@ -177,7 +177,7 @@ void DRW_globals_update() gb->size_light_circle = U.pixelsize * 9.0f; gb->size_light_circle_shadow = gb->size_light_circle + U.pixelsize * 3.0f; gb->size_viewport_line = max_ff(U.viewport_line_width, 1.0f); - + /* M_SQRT2 to be at least the same size of the old square */ gb->size_vertex = U.pixelsize * max_ff(1.0f, UI_GetThemeValuef(TH_VERTEX_SIZE) * float(M_SQRT2) / 2.0f); diff --git a/source/blender/draw/intern/draw_common_shader_shared.hh b/source/blender/draw/intern/draw_common_shader_shared.hh index 8bfc419b54e..a30a4ed5511 100644 --- a/source/blender/draw/intern/draw_common_shader_shared.hh +++ b/source/blender/draw/intern/draw_common_shader_shared.hh @@ -136,9 +136,9 @@ struct GlobalsUboStorage { float size_vertex, size_edge, size_edge_fix, size_face_dot; float size_checker; float size_vertex_gpencil; - float size_viewport_line; float fresnel_mix_edit; - float _pad1, _pad2; + float size_viewport_line; + float _pad0, _pad1; }; BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16) diff --git a/source/blender/draw/intern/draw_manager_c.cc b/source/blender/draw/intern/draw_manager_c.cc index 0d08826a618..7d2377ac878 100644 --- a/source/blender/draw/intern/draw_manager_c.cc +++ b/source/blender/draw/intern/draw_manager_c.cc @@ -90,6 +90,7 @@ #include "engines/basic/basic_engine.h" #include "engines/compositor/compositor_engine.h" +#include "engines/eevee/eevee_engine.h" #include "engines/eevee_next/eevee_engine.h" #include "engines/external/external_engine.h" #include "engines/gpencil/gpencil_engine.h" @@ -3060,6 +3061,9 @@ void DRW_engine_register(DrawEngineType *draw_engine_type) void DRW_engines_register() { using namespace blender::draw; + RE_engines_register(&DRW_engine_viewport_eevee_type); + /* Always register EEVEE Next so it can be used in background mode with `--factory-startup`. + * (Needed for tests). */ RE_engines_register(&DRW_engine_viewport_eevee_next_type); RE_engines_register(&DRW_engine_viewport_workbench_type); diff --git a/source/blender/draw/intern/shaders/common_gpencil_lib.glsl b/source/blender/draw/intern/shaders/common_gpencil_lib.glsl index 2296725dc6f..5a6eacb46e2 100644 --- a/source/blender/draw/intern/shaders/common_gpencil_lib.glsl +++ b/source/blender/draw/intern/shaders/common_gpencil_lib.glsl @@ -79,7 +79,7 @@ float gpencil_stroke_thickness_modulate(float thickness, vec4 ndc_pos, vec4 view /* World space point size. */ thickness *= gpThicknessWorldScale * ProjectionMatrix[1][1] * viewport_size.y; } - + if (gpThicknessFixedWorldScale) { /* 0.1 factor is evil, but makes thickness align better with pre-existing world scale. */ thickness *= ndc_pos.w * 0.1; diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index 2cf9dc8e1cb..3d671d9356c 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -927,7 +927,6 @@ if(WITH_BLENDER) # Images. data_to_c_simple(../../../../release/datafiles/splash.png SRC) - data_to_c_simple(../../../../release/datafiles/splash_alt.png SRC) data_to_c_simple(../../../../release/datafiles/alert_icons.png SRC) data_to_c_simple(../../../../release/datafiles/blender_logo.png SRC) # XXX These are handy, but give nasty "false changes" in svn :/ diff --git a/source/blender/editors/gpencil_legacy/gpencil_sculpt_paint.cc b/source/blender/editors/gpencil_legacy/gpencil_sculpt_paint.cc index 1525f1fc3eb..40b848ab7f2 100644 --- a/source/blender/editors/gpencil_legacy/gpencil_sculpt_paint.cc +++ b/source/blender/editors/gpencil_legacy/gpencil_sculpt_paint.cc @@ -109,14 +109,14 @@ struct tGP_BrushEditData { /* Is multiframe editing enabled, and are we using falloff for that? */ bool is_multiframe; bool use_multiframe_falloff; - + int smooth_type; bool use_position_prev; bool use_strength_prev; bool use_thickness_prev; bool use_uv_prev; - + /* Current frame */ int cfra; @@ -1353,9 +1353,9 @@ static void gpencil_sculpt_brush_exit(bContext *C, wmOperator *op) } default: - if (gso->stroke_customdata != nullptr) { - BLI_ghash_free(gso->stroke_customdata, nullptr, nullptr); - gso->stroke_customdata = nullptr; + if (gso->stroke_customdata != NULL) { + BLI_ghash_free(gso->stroke_customdata, NULL, NULL); + gso->stroke_customdata = NULL; } break; } @@ -2381,7 +2381,7 @@ static int gpencil_sculpt_brush_invoke(bContext *C, wmOperator *op, const wmEven gso->brush = gso->brush_prev; gso->brush_prev = NULL; } - + /* start drawing immediately? */ if (is_modal == false) { ARegion *region = CTX_wm_region(C); diff --git a/source/blender/editors/include/ED_datafiles.h b/source/blender/editors/include/ED_datafiles.h index 10326f532a0..efa90f1e0bb 100644 --- a/source/blender/editors/include/ED_datafiles.h +++ b/source/blender/editors/include/ED_datafiles.h @@ -44,9 +44,6 @@ extern const char datatoc_blender_logo_png[]; extern int datatoc_splash_png_size; extern const char datatoc_splash_png[]; -extern int datatoc_splash_alt_png_size; -extern const char datatoc_splash_alt_png[]; - extern int datatoc_bfont_pfb_size; extern const char datatoc_bfont_pfb[]; diff --git a/source/blender/editors/interface/interface_icons.cc b/source/blender/editors/interface/interface_icons.cc index 8259c8a86c2..33fc2e479ad 100644 --- a/source/blender/editors/interface/interface_icons.cc +++ b/source/blender/editors/interface/interface_icons.cc @@ -1453,7 +1453,7 @@ static void icon_set_image(const bContext *C, return; } - + if (!prv_img) { if (G.debug & G_DEBUG) { printf("%s: no preview image for this ID: %s\n", __func__, id->name); diff --git a/source/blender/editors/interface/interface_ops.cc b/source/blender/editors/interface/interface_ops.cc index d1c178c1926..731492d7c02 100644 --- a/source/blender/editors/interface/interface_ops.cc +++ b/source/blender/editors/interface/interface_ops.cc @@ -56,7 +56,6 @@ #include "WM_api.hh" #include "WM_types.hh" -#include "ED_anim_api.hh" #include "ED_object.hh" #include "ED_paint.hh" #include "ED_undo.hh" @@ -254,6 +253,130 @@ static void UI_OT_copy_as_driver_button(wmOperatorType *ot) /** \} */ +/* -------------------------------------------------------------------- */ +/** \name Show FCurve in editor Operator + * \{ */ + +static bool show_fcurve_in_editor_poll(bContext *C) +{ + uiBut *but = UI_context_active_but_get(C); + + if (but) { + PointerRNA *ptr = &but->rnapoin; + PropertyRNA *prop = but->rnaprop; + + return RNA_property_animated(ptr, prop); + } + + return false; +} + +static int show_fcurve_in_editor_exec(bContext *C, wmOperator *op) +{ + uiBut *but = UI_context_active_but_get(C); + + /* Find any open FCurve Editor for Operator context */ + bScreen *screen = CTX_wm_screen(C); + ScrArea *graph_area = nullptr; + LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { + if (area->spacetype == SPACE_GRAPH) { + SpaceGraph *space = (SpaceGraph *)area->spacedata.first; + if (space->mode == SIPO_MODE_ANIMATION) { + graph_area = area; + break; + } + } + } + + if (!graph_area) { + BKE_report(op->reports, RPT_ERROR, "No open Graph editors"); + return OPERATOR_CANCELLED; + } + + /* Find the correlated FCurve. */ + bAction *action; + FCurve *fcu_active = BKE_fcurve_find_by_rna( + &but->rnapoin, but->rnaprop, but->rnaindex, nullptr, &action, nullptr, nullptr); + + if (!fcu_active) { + BKE_report(op->reports, RPT_ERROR, "No FCurve on property"); + return OPERATOR_CANCELLED; + } + + { /* Context override begin */ + ScrArea *cur_area = CTX_wm_area(C); + ARegion *cur_region = CTX_wm_region(C); + CTX_wm_area_set(C, graph_area); + CTX_wm_region_set( + C, BKE_region_find_in_listbase_by_type(&graph_area->regionbase, RGN_TYPE_WINDOW)); + + wmOperatorType *ot; + PointerRNA ptr; + + /* Select all FCurves. */ + ot = WM_operatortype_find("GRAPH_OT_select_all", true); + BLI_assert(ot); + WM_operator_properties_create_ptr(&ptr, ot); + RNA_enum_set(&ptr, "action", 1); /* SEL_SELECT */ + WM_operator_name_call(C, "graph.select_all", WM_OP_EXEC_DEFAULT, &ptr, nullptr); + WM_operator_properties_free(&ptr); + + /* Hide all fcurves. */ + ot = WM_operatortype_find("GRAPH_OT_hide", true); + BLI_assert(ot); + WM_operator_properties_create_ptr(&ptr, ot); + RNA_boolean_set(&ptr, "unselected", false); + WM_operator_name_call(C, "graph.hide", WM_OP_EXEC_DEFAULT, &ptr, nullptr); + WM_operator_properties_free(&ptr); + + /* Unhide FCurve of selected property path and make it Active. */ + fcu_active->flag |= FCURVE_VISIBLE | FCURVE_ACTIVE | FCURVE_SELECTED; + + /* Perform zoom-in on FCurve in all FCurve editor regions. */ + LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { + if (area->spacetype == SPACE_GRAPH) { + SpaceGraph *space = (SpaceGraph *)area->spacedata.first; + if (space->mode == SIPO_MODE_ANIMATION) { + CTX_wm_area_set(C, area); + CTX_wm_region_set( + C, BKE_region_find_in_listbase_by_type(&area->regionbase, RGN_TYPE_WINDOW)); + /* Focus view on active FCurve. */ + ot = WM_operatortype_find("GRAPH_OT_view_all", true); + BLI_assert(ot); + WM_operator_properties_create_ptr(&ptr, ot); + /* Use INVOKE_DEFAULT to preserve UI animation. */ + WM_operator_name_call(C, "graph.view_all", WM_OP_INVOKE_DEFAULT, &ptr, nullptr); + WM_operator_properties_free(&ptr); + } + } + } + + CTX_wm_area_set(C, cur_area); + CTX_wm_region_set(C, cur_region); + } /* Context override end */ + + WM_event_add_notifier(C, NC_ANIMATION | ND_SPACE_GRAPH, nullptr); + + return OPERATOR_FINISHED; +} + +static void UI_OT_show_fcurve_in_editor(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Show FCurve in Editor"; + ot->idname = "UI_OT_show_fcurve_in_editor"; + ot->description = "Select and isolate this animation channel in Curve editors"; + + /* callbacks */ + ot->exec = show_fcurve_in_editor_exec; + ot->poll = show_fcurve_in_editor_poll; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/** \} */ + /* -------------------------------------------------------------------- */ /** \name Copy Python Command Operator * \{ */ diff --git a/source/blender/editors/interface/regions/interface_region_menu_popup.cc b/source/blender/editors/interface/regions/interface_region_menu_popup.cc index be2c2f8f0c9..86be2515a2c 100644 --- a/source/blender/editors/interface/regions/interface_region_menu_popup.cc +++ b/source/blender/editors/interface/regions/interface_region_menu_popup.cc @@ -621,7 +621,7 @@ static void ui_popup_menu_create_from_menutype(bContext *C, WorkspaceStatus status(C); if (bool(mt->flag & MenuTypeFlag::SearchOnKeyPress) && !bool(U.experimental.disable_search_on_keypress)) { - ED_workspace_status_text(C, IFACE_("Type to search...")); + status.range(IFACE_("Search"), ICON_EVENT_A, ICON_EVENT_Z); } else if (mt->idname[0]) { status.item(IFACE_("Search"), ICON_EVENT_SPACEKEY); diff --git a/source/blender/editors/object/object_constraint.cc b/source/blender/editors/object/object_constraint.cc index 9767a9da66c..20df8f37a25 100644 --- a/source/blender/editors/object/object_constraint.cc +++ b/source/blender/editors/object/object_constraint.cc @@ -65,8 +65,8 @@ #include "UI_interface.hh" #include "UI_resources.hh" -#include "BKE_lib_id.hh" #include "object_intern.hh" +#include "BKE_lib_id.hh" namespace blender::ed::object { @@ -2279,10 +2279,10 @@ static int pose_constraints_merge_exec(bContext *C, wmOperator *op) LISTBASE_FOREACH(bConstraint *, con, &pchan->constraints) { num_cons += 1; const bConstraintTypeInfo *cti = BKE_constraint_typeinfo_get(con); - - struct IDRelinkUserData userdata; - userdata.src_object = (ID *) obact; - userdata.dst_object = (ID *) pose_ob; + + struct IDRelinkUserData userdata{}; + userdata.src_object = reinterpret_cast(obact); + userdata.dst_object = reinterpret_cast(pose_ob); if (cti->id_looper) { cti->id_looper(con, con_relink_id_cb, &userdata); diff --git a/source/blender/editors/object/object_intern.hh b/source/blender/editors/object/object_intern.hh index d97083dcd00..173c39b629f 100644 --- a/source/blender/editors/object/object_intern.hh +++ b/source/blender/editors/object/object_intern.hh @@ -271,7 +271,7 @@ void POSE_OT_constraint_add_with_targets(wmOperatorType *ot); void OBJECT_OT_constraints_copy(wmOperatorType *ot); void POSE_OT_constraints_copy(wmOperatorType *ot); -void POSE_OT_constraints_merge(struct wmOperatorType *ot); +void POSE_OT_constraints_merge(wmOperatorType *ot); void OBJECT_OT_constraints_clear(wmOperatorType *ot); void POSE_OT_constraints_clear(wmOperatorType *ot); diff --git a/source/blender/editors/render/render_intern.hh b/source/blender/editors/render/render_intern.hh index 6c4353e3fd4..6b24ffa53ef 100644 --- a/source/blender/editors/render/render_intern.hh +++ b/source/blender/editors/render/render_intern.hh @@ -39,6 +39,9 @@ void SCENE_OT_view_layer_remove_lightgroup(wmOperatorType *ot); void SCENE_OT_view_layer_add_used_lightgroups(wmOperatorType *ot); void SCENE_OT_view_layer_remove_unused_lightgroups(wmOperatorType *ot); +void SCENE_OT_light_cache_bake(wmOperatorType *ot); +void SCENE_OT_light_cache_free(wmOperatorType *ot); + void OBJECT_OT_lightprobe_cache_bake(wmOperatorType *ot); void OBJECT_OT_lightprobe_cache_free(wmOperatorType *ot); diff --git a/source/blender/editors/render/render_ops.cc b/source/blender/editors/render/render_ops.cc index b3a49bafc15..d18af8532a4 100644 --- a/source/blender/editors/render/render_ops.cc +++ b/source/blender/editors/render/render_ops.cc @@ -51,6 +51,9 @@ void ED_operatortypes_render() WM_operatortype_append(SCENE_OT_render_view_add); WM_operatortype_append(SCENE_OT_render_view_remove); + WM_operatortype_append(SCENE_OT_light_cache_bake); + WM_operatortype_append(SCENE_OT_light_cache_free); + #ifdef WITH_FREESTYLE WM_operatortype_append(SCENE_OT_freestyle_module_add); WM_operatortype_append(SCENE_OT_freestyle_module_remove); diff --git a/source/blender/editors/render/render_preview.cc b/source/blender/editors/render/render_preview.cc index 05f0a47d54c..584de654344 100644 --- a/source/blender/editors/render/render_preview.cc +++ b/source/blender/editors/render/render_preview.cc @@ -275,7 +275,7 @@ const char *ED_preview_collection_name(const ePreviewType pr_type) static bool render_engine_supports_ray_visibility(const Scene *sce) { - return !STREQ(sce->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT); + return !(STREQ(sce->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT) && STREQ(sce->r.engine, RE_engine_id_BLENDER_EEVEE)); } static void switch_preview_collection_visibility(ViewLayer *view_layer, const ePreviewType pr_type) @@ -524,7 +524,7 @@ static Scene *preview_prepare_scene( if (id_type == ID_TE) { /* Texture is not actually rendered with engine, just set dummy value. */ - STRNCPY(sce->r.engine, RE_engine_id_BLENDER_EEVEE_NEXT); + STRNCPY(sce->r.engine, RE_engine_id_BLENDER_EEVEE); } if (id_type == ID_MA) { diff --git a/source/blender/editors/render/render_shading.cc b/source/blender/editors/render/render_shading.cc index ee0e2651bbe..d49513e6204 100644 --- a/source/blender/editors/render/render_shading.cc +++ b/source/blender/editors/render/render_shading.cc @@ -95,6 +95,7 @@ #include "RE_engine.h" #include "RE_pipeline.h" +#include "engines/eevee/eevee_lightcache.h" #include "engines/eevee_next/eevee_lightcache.hh" #include "render_intern.hh" /* own include */ @@ -1337,10 +1338,177 @@ void SCENE_OT_view_layer_remove_unused_lightgroups(wmOperatorType *ot) enum { LIGHTCACHE_SUBSET_ALL = 0, + LIGHTCACHE_SUBSET_DIRTY, + LIGHTCACHE_SUBSET_CUBE, LIGHTCACHE_SUBSET_SELECTED, LIGHTCACHE_SUBSET_ACTIVE, }; +static void light_cache_bake_tag_cache(Scene *scene, wmOperator *op) +{ + if (scene->eevee.light_cache_data != nullptr) { + int subset = RNA_enum_get(op->ptr, "subset"); + switch (subset) { + case LIGHTCACHE_SUBSET_ALL: + scene->eevee.light_cache_data->flag |= LIGHTCACHE_UPDATE_GRID | LIGHTCACHE_UPDATE_CUBE; + break; + case LIGHTCACHE_SUBSET_CUBE: + scene->eevee.light_cache_data->flag |= LIGHTCACHE_UPDATE_CUBE; + break; + case LIGHTCACHE_SUBSET_DIRTY: + /* Leave tag untouched. */ + break; + default: + BLI_assert_unreachable(); + break; + } + } +} + +/** Catch escape key to cancel. */ +static int light_cache_bake_modal(bContext *C, wmOperator *op, const wmEvent *event) +{ + Scene *scene = (Scene *)op->customdata; + + /* no running blender, remove handler and pass through */ + if (0 == WM_jobs_test(CTX_wm_manager(C), scene, WM_JOB_TYPE_RENDER)) { + LightCache *lcache = scene->eevee.light_cache_data; + if (lcache && (lcache->flag & LIGHTCACHE_INVALID)) { + BKE_report(op->reports, RPT_ERROR, "Lightcache cannot allocate resources"); + return OPERATOR_CANCELLED; + } + return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH; + } + + /* running render */ + switch (event->type) { + case EVT_ESCKEY: + return OPERATOR_RUNNING_MODAL; + } + return OPERATOR_PASS_THROUGH; +} + +static void light_cache_bake_cancel(bContext *C, wmOperator *op) +{ + wmWindowManager *wm = CTX_wm_manager(C); + Scene *scene = (Scene *)op->customdata; + + /* kill on cancel, because job is using op->reports */ + WM_jobs_kill_type(wm, scene, WM_JOB_TYPE_RENDER); +} + +/* executes blocking render */ +static int light_cache_bake_exec(bContext *C, wmOperator *op) +{ + ViewLayer *view_layer = CTX_data_view_layer(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + + G.is_break = false; + + /* TODO: abort if selected engine is not eevee. */ + void *rj = EEVEE_lightbake_job_data_alloc(bmain, view_layer, scene, false, scene->r.cfra); + + light_cache_bake_tag_cache(scene, op); + + /* Not actually used. */ + wmJobWorkerStatus worker_status = {}; + /* Do the job. */ + EEVEE_lightbake_job(rj, &worker_status); + /* Free baking data. Result is already stored in the scene data. */ + EEVEE_lightbake_job_data_free(rj); + + /* No redraw needed, we leave state as we entered it. */ + ED_update_for_newframe(bmain, CTX_data_depsgraph_pointer(C)); + + WM_event_add_notifier(C, NC_SCENE | NA_EDITED, scene); + + return OPERATOR_FINISHED; +} + +static int light_cache_bake_invoke(bContext *C, wmOperator *op, const wmEvent * /*event*/) +{ + wmWindowManager *wm = CTX_wm_manager(C); + wmWindow *win = CTX_wm_window(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + int delay = RNA_int_get(op->ptr, "delay"); + + wmJob *wm_job = EEVEE_lightbake_job_create( + wm, win, bmain, view_layer, scene, delay, scene->r.cfra); + + if (!wm_job) { + return OPERATOR_CANCELLED; + } + + /* add modal handler for ESC */ + WM_event_add_modal_handler(C, op); + + light_cache_bake_tag_cache(scene, op); + + /* store actual owner of job, so modal operator could check for it, + * the reason of this is that active scene could change when rendering + * several layers from compositor #31800. */ + op->customdata = scene; + + WM_jobs_start(wm, wm_job); + + WM_cursor_wait(false); + + return OPERATOR_RUNNING_MODAL; +} + +void SCENE_OT_light_cache_bake(wmOperatorType *ot) +{ + static const EnumPropertyItem light_cache_subset_items[] = { + {LIGHTCACHE_SUBSET_ALL, + "ALL", + 0, + "All Light Probes", + "Bake both irradiance grids and reflection cubemaps"}, + {LIGHTCACHE_SUBSET_DIRTY, + "DIRTY", + 0, + "Dirty Only", + "Only bake light probes that are marked as dirty"}, + {LIGHTCACHE_SUBSET_CUBE, + "CUBEMAPS", + 0, + "Cubemaps Only", + "Try to only bake reflection cubemaps if irradiance grids are up to date"}, + {0, nullptr, 0, nullptr, nullptr}, + }; + + /* identifiers */ + ot->name = "Bake Light Cache"; + ot->idname = "SCENE_OT_light_cache_bake"; + ot->description = "Bake the active view layer lighting"; + + /* api callbacks */ + ot->invoke = light_cache_bake_invoke; + ot->modal = light_cache_bake_modal; + ot->cancel = light_cache_bake_cancel; + ot->exec = light_cache_bake_exec; + + ot->prop = RNA_def_int(ot->srna, + "delay", + 0, + 0, + 2000, + "Delay", + "Delay in millisecond before baking starts", + 0, + 2000); + RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE); + + ot->prop = RNA_def_enum( + ot->srna, "subset", light_cache_subset_items, 0, "Subset", "Subset of probes to update"); + RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE); +} + +/* NOTE: New version destined to replace the old lightcache bake operator. */ + static blender::Vector lightprobe_cache_irradiance_volume_subset_get(bContext *C, wmOperator *op) { @@ -1372,6 +1540,15 @@ static blender::Vector lightprobe_cache_irradiance_volume_subset_get(b FOREACH_OBJECT_END; break; } + case LIGHTCACHE_SUBSET_DIRTY: { + FOREACH_OBJECT_BEGIN (scene, view_layer, ob) { + if (is_irradiance_volume(ob) && ob->lightprobe_cache && ob->lightprobe_cache->dirty) { + irradiance_volume_setup(ob); + } + } + FOREACH_OBJECT_END; + break; + } case LIGHTCACHE_SUBSET_SELECTED: { ObjectsInViewLayerParams parameters; parameters.filter_fn = nullptr; @@ -1550,6 +1727,51 @@ void OBJECT_OT_lightprobe_cache_bake(wmOperatorType *ot) /** \name Light Cache Free Operator * \{ */ +static bool light_cache_free_poll(bContext *C) +{ + Scene *scene = CTX_data_scene(C); + + return scene->eevee.light_cache_data; +} + +static int light_cache_free_exec(bContext *C, wmOperator * /*op*/) +{ + Scene *scene = CTX_data_scene(C); + + /* kill potential bake job first (see #57011) */ + wmWindowManager *wm = CTX_wm_manager(C); + WM_jobs_kill_type(wm, scene, WM_JOB_TYPE_LIGHT_BAKE); + + if (!scene->eevee.light_cache_data) { + return OPERATOR_CANCELLED; + } + + EEVEE_lightcache_free(scene->eevee.light_cache_data); + scene->eevee.light_cache_data = nullptr; + + EEVEE_lightcache_info_update(&scene->eevee); + + DEG_id_tag_update(&scene->id, ID_RECALC_SYNC_TO_EVAL); + + WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, scene); + + return OPERATOR_FINISHED; +} + +void SCENE_OT_light_cache_free(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Delete Light Cache"; + ot->idname = "SCENE_OT_light_cache_free"; + ot->description = "Delete cached indirect lighting"; + + /* api callbacks */ + ot->exec = light_cache_free_exec; + ot->poll = light_cache_free_poll; +} + +/* NOTE: New version destined to replace the old lightcache bake operator. */ + static int lightprobe_cache_free_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); diff --git a/source/blender/editors/space_outliner/outliner_collections.cc b/source/blender/editors/space_outliner/outliner_collections.cc index ba05628b591..8897c70febf 100644 --- a/source/blender/editors/space_outliner/outliner_collections.cc +++ b/source/blender/editors/space_outliner/outliner_collections.cc @@ -193,6 +193,7 @@ static bool collection_new_poll(bContext *C) } return true; } + /** \} */ /* -------------------------------------------------------------------- */ diff --git a/source/blender/editors/space_outliner/outliner_tree.cc b/source/blender/editors/space_outliner/outliner_tree.cc index 645f1cb00af..c1f98bf44f6 100644 --- a/source/blender/editors/space_outliner/outliner_tree.cc +++ b/source/blender/editors/space_outliner/outliner_tree.cc @@ -871,11 +871,6 @@ static bool outliner_element_visible_get(const Scene *scene, } TreeStoreElem *tselem = TREESTORE(te); - if ((exclude_filter & SO_FILTER_NO_BONE_FLAG) && (tselem->type == TSE_POSE_CHANNEL)) { - auto *pchan = (bPoseChannel*)te->directdata; - return pchan->drawflag & PCHAN_DRAW_SHOW_OUTLINER; - } - if ((tselem->type == TSE_SOME_ID) && (te->idcode == ID_OB)) { if ((exclude_filter & SO_FILTER_OB_TYPE) == SO_FILTER_OB_TYPE) { return false; @@ -1004,11 +999,6 @@ static bool outliner_element_is_collection_or_object(TreeElement *te) return true; } - /* WORKAROUND: Pose Bones can be hidden while having visible children. */ - if (tselem->type == TSE_POSE_CHANNEL) { - return true; - } - /* Collection instance datablocks should not be extracted. */ if (outliner_is_collection_tree_element(te) && !(te->parent && te->parent->idcode == ID_OB)) { return true; diff --git a/source/blender/editors/space_view3d/space_view3d.cc b/source/blender/editors/space_view3d/space_view3d.cc index 6fa36637c60..ba615c87627 100644 --- a/source/blender/editors/space_view3d/space_view3d.cc +++ b/source/blender/editors/space_view3d/space_view3d.cc @@ -895,6 +895,27 @@ static void view3d_id_path_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop) } } +static void view3d_lightcache_update(bContext *C) +{ + PointerRNA op_ptr; + + Scene *scene = CTX_data_scene(C); + + if (!BKE_scene_uses_blender_eevee(scene)) { + /* Only do auto bake if eevee is the active engine */ + return; + } + + wmOperatorType *ot = WM_operatortype_find("SCENE_OT_light_cache_bake", true); + WM_operator_properties_create_ptr(&op_ptr, ot); + RNA_int_set(&op_ptr, "delay", 200); + RNA_enum_set_identifier(C, &op_ptr, "subset", "DIRTY"); + + WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &op_ptr, nullptr); + + WM_operator_properties_free(&op_ptr); +} + /* region dropbox definition */ static void view3d_dropboxes() { @@ -1968,7 +1989,14 @@ static void space_view3d_listener(const wmSpaceTypeListenerParams *params) static void space_view3d_refresh(const bContext *C, ScrArea *area) { - UNUSED_VARS(C); + Scene *scene = CTX_data_scene(C); + LightCache *lcache = scene->eevee.light_cache_data; + + if (lcache && (lcache->flag & LIGHTCACHE_UPDATE_AUTO) != 0) { + lcache->flag &= ~LIGHTCACHE_UPDATE_AUTO; + view3d_lightcache_update((bContext *)C); + } + View3D *v3d = (View3D *)area->spacedata.first; MEM_SAFE_FREE(v3d->runtime.local_stats); } diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index 44172532e4d..0db6f16b18b 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -1580,7 +1580,7 @@ RenderEngineType *ED_view3d_engine_type(const Scene *scene, int drawtype) */ RenderEngineType *type = RE_engines_find(scene->r.engine); if (drawtype == OB_MATERIAL && (type->flag & RE_USE_EEVEE_VIEWPORT)) { - return RE_engines_find(RE_engine_id_BLENDER_EEVEE_NEXT); + return RE_engines_find(RE_engine_id_BLENDER_EEVEE); } return type; } @@ -2477,7 +2477,8 @@ bool ED_view3d_has_depth_buffer_updated(const Depsgraph *depsgraph, const View3D bool is_viewport_preview_solid = v3d->shading.type == OB_SOLID; bool is_viewport_preview_material = v3d->shading.type == OB_MATERIAL; bool is_viewport_render_eevee = v3d->shading.type == OB_RENDER && - (STREQ(engine_name, RE_engine_id_BLENDER_EEVEE_NEXT)); + (STREQ(engine_name, RE_engine_id_BLENDER_EEVEE) || + STREQ(engine_name, RE_engine_id_BLENDER_EEVEE_NEXT)); bool is_viewport_render_workbench = v3d->shading.type == OB_RENDER && STREQ(engine_name, RE_engine_id_BLENDER_WORKBENCH); bool is_viewport_render_external_with_overlay = v3d->shading.type == OB_RENDER && diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index e17a48a882e..040df1446d6 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -768,6 +768,16 @@ set(SRC_SHADER_CREATE_INFOS ../draw/engines/workbench/shaders/infos/workbench_transparent_resolve_info.hh ../draw/engines/workbench/shaders/infos/workbench_volume_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_bloom_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_common_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_dof_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_effects_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_lightprobe_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_material_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_motion_blur_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_shadow_info.hh + ../draw/engines/eevee/shaders/infos/eevee_legacy_volume_info.hh + ../draw/engines/image/shaders/infos/engine_image_info.hh ../draw/intern/shaders/draw_debug_create_info.hh ../draw/intern/shaders/draw_fullscreen_info.hh diff --git a/source/blender/gpu/GPU_material.hh b/source/blender/gpu/GPU_material.hh index 2797048ce8d..fe80a547587 100644 --- a/source/blender/gpu/GPU_material.hh +++ b/source/blender/gpu/GPU_material.hh @@ -355,13 +355,11 @@ bool GPU_material_has_displacement_output(GPUMaterial *mat); void GPU_material_flag_set(GPUMaterial *mat, eGPUMaterialFlag flag); bool GPU_material_flag_get(const GPUMaterial *mat, eGPUMaterialFlag flag); +bool GPU_material_gooengine_get(const GPUMaterial *mat); eGPUMaterialFlag GPU_material_flag(const GPUMaterial *mat); bool GPU_material_recalc_flag_get(GPUMaterial *mat); uint64_t GPU_material_uuid_get(GPUMaterial *mat); -void GPU_pass_cache_init(); -void GPU_pass_cache_garbage_collect(); -void GPU_pass_cache_free(); void GPU_material_light_group_bits_get(GPUMaterial *mat, int *out); void GPU_material_light_group_shadow_bits_get(GPUMaterial *mat, int *out); diff --git a/source/blender/gpu/intern/gpu_codegen.cc b/source/blender/gpu/intern/gpu_codegen.cc index 0283f09de77..0a9a9a63af3 100644 --- a/source/blender/gpu/intern/gpu_codegen.cc +++ b/source/blender/gpu/intern/gpu_codegen.cc @@ -284,6 +284,10 @@ class GPUCodegen { create_info = new GPUCodegenCreateInfo("codegen"); output.create_info = reinterpret_cast( static_cast(create_info)); + + if (GPU_material_flag_get(mat_, GPU_MATFLAG_OBJECT_INFO) && GPU_material_gooengine_get(mat_)) { + create_info->additional_info("draw_object_infos"); + } } ~GPUCodegen() diff --git a/source/blender/gpu/intern/gpu_material.cc b/source/blender/gpu/intern/gpu_material.cc index 00c940cade1..73a240ec9fe 100644 --- a/source/blender/gpu/intern/gpu_material.cc +++ b/source/blender/gpu/intern/gpu_material.cc @@ -807,6 +807,11 @@ bool GPU_material_flag_get(const GPUMaterial *mat, eGPUMaterialFlag flag) return (mat->flag & flag) != 0; } +bool GPU_material_gooengine_get(const GPUMaterial *mat) +{ + return mat->engine == GPU_MAT_EEVEE_LEGACY; +} + eGPUMaterialFlag GPU_material_flag(const GPUMaterial *mat) { return mat->flag; @@ -829,7 +834,7 @@ uint64_t GPU_material_uuid_get(GPUMaterial *mat) void GPU_material_light_group_bits_get(GPUMaterial *mat, int* out) { Material* ma = mat->ma; - const int grps_all[4] = {MA_GROUPS_ALL, MA_GROUPS_ALL, MA_GROUPS_ALL, MA_GROUPS_ALL}; + const int grps_all[4] = {static_cast(MA_GROUPS_ALL), static_cast(MA_GROUPS_ALL), static_cast(MA_GROUPS_ALL), static_cast(MA_GROUPS_ALL)}; if (ma) { copy_v4_v4_int(out, ma->light_group_bits); } else { @@ -840,7 +845,7 @@ void GPU_material_light_group_bits_get(GPUMaterial *mat, int* out) void GPU_material_light_group_shadow_bits_get(GPUMaterial *mat, int* out) { Material* ma = mat->ma; - const int grps_all[4] = {MA_GROUPS_ALL, MA_GROUPS_ALL, MA_GROUPS_ALL, MA_GROUPS_ALL}; + const int grps_all[4] = {static_cast(MA_GROUPS_ALL), static_cast(MA_GROUPS_ALL), static_cast(MA_GROUPS_ALL), static_cast(MA_GROUPS_ALL)}; if (ma) { copy_v4_v4_int(out, ma->light_group_shadow_bits); } else { diff --git a/source/blender/gpu/intern/gpu_shader_create_info.cc b/source/blender/gpu/intern/gpu_shader_create_info.cc index daae989dfe0..30d4a7c1e4d 100644 --- a/source/blender/gpu/intern/gpu_shader_create_info.cc +++ b/source/blender/gpu/intern/gpu_shader_create_info.cc @@ -525,6 +525,21 @@ void gpu_shader_create_info_init() /* Edit UV Edges. */ overlay_edit_uv_edges = overlay_edit_uv_edges_no_geom; + /* Down-sample Cube/Probe rendering. */ + eevee_legacy_effect_downsample_cube = eevee_legacy_effect_downsample_cube_no_geom; + eevee_legacy_probe_filter_glossy = eevee_legacy_probe_filter_glossy_no_geom; + eevee_legacy_lightprobe_planar_downsample = eevee_legacy_lightprobe_planar_downsample_no_geom; + + /* EEVEE Volumetrics */ + eevee_legacy_volumes_clear = eevee_legacy_volumes_clear_no_geom; + eevee_legacy_volumes_scatter = eevee_legacy_volumes_scatter_no_geom; + eevee_legacy_volumes_scatter_with_lights = eevee_legacy_volumes_scatter_with_lights_no_geom; + eevee_legacy_volumes_integration = eevee_legacy_volumes_integration_no_geom; + eevee_legacy_volumes_integration_OPTI = eevee_legacy_volumes_integration_OPTI_no_geom; + + /* EEVEE Volumetric Material */ + eevee_legacy_material_volumetric_vert = eevee_legacy_material_volumetric_vert_no_geom; + /* GPencil stroke. */ gpu_shader_gpencil_stroke = gpu_shader_gpencil_stroke_no_geom; diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_curvature.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_curvature.glsl index 307948a3866..fdf3a0f30ec 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_curvature.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_curvature.glsl @@ -1,4 +1,8 @@ void node_screenspace_curvature(float iiterations, float sample_scale, float clamp_dist, vec3 scale, out float scene_curvature, out float scene_rim) { +#ifndef EEVEE_ENGINE + return; +#else screenspace_curvature(iiterations, sample_scale, clamp_dist, scale, scene_curvature, scene_rim); +#endif } diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_screenspace_info.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_screenspace_info.glsl index 8e631d93fbe..fecf512108a 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_screenspace_info.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_screenspace_info.glsl @@ -1,4 +1,8 @@ void node_screenspace_info(vec3 viewPos, out vec4 scene_col, out float scene_depth) { +#ifndef EEVEE_ENGINE + return; +#else screenspace_info(viewPos, scene_col, scene_depth); +#endif } diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_set_depth.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_set_depth.glsl index 42d17544a0d..70932cf9468 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_set_depth.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_set_depth.glsl @@ -6,16 +6,24 @@ void view_z_get(out float z) { +#ifndef EEVEE_ENGINE + return; +#else z = abs(viewPosition.z); +#endif } void node_set_depth(in Closure _in, in float z_in, out Closure _out) { +#ifndef EEVEE_ENGINE + return; +#else _out = _in; float viewNear = get_view_z_from_depth(0.0f); float viewFar = get_view_z_from_depth(1.0f); float z_clipped = max(min(-z_in, viewNear), viewFar); FRAG_DEPTH = get_depth_from_view_z(z_clipped); +#endif } #undef FRAG_DEPTH diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_shader_info.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_shader_info.glsl index 7d917ce7794..898e4cb62b3 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_shader_info.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_shader_info.glsl @@ -2,13 +2,21 @@ void node_shader_info(vec3 position, vec3 normal, out vec4 half_light, out float shadows, out float self_shadows, out vec4 ambient, out float half_lambert) { +#ifndef EEVEE_ENGINE + return; +#else // Implicitly included by eevee shader linking. calc_shader_info(position, normal, half_light, shadows, self_shadows, ambient, half_lambert); +#endif } void node_shader_info_light_groups(vec3 position, vec3 normal, vec4 light_groups, vec4 light_group_shadows, out vec4 half_light, out float shadows, out float self_shadows, out vec4 ambient, out float half_lambert) { +#ifndef EEVEE_ENGINE + return; +#else // Implicitly included by eevee shader linking. calc_shader_info(position, normal, floatBitsToInt(light_groups), floatBitsToInt(light_group_shadows), half_light, shadows, self_shadows, ambient, half_lambert); +#endif } diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_world_normals.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_world_normals.glsl index 9d4d289e2f8..1df4d09b685 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_world_normals.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_world_normals.glsl @@ -9,11 +9,18 @@ void world_normals_get(out vec3 N) void world_position_get(out vec3 P) { - P = worldPosition; +#ifndef EEVEE_ENGINE + return; +#else + P = worldPosition; +#endif } void view_position_get(out vec3 P) { - P = viewPosition * vec3(1.0, 1.0, -1.0); +#ifndef EEVEE_ENGINE + return; +#else + P = viewPosition * vec3(1.0, 1.0, -1.0); +#endif } - diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h index 4c2b345524f..6d60be6af30 100644 --- a/source/blender/makesdna/DNA_layer_types.h +++ b/source/blender/makesdna/DNA_layer_types.h @@ -32,7 +32,7 @@ typedef enum eViewLayerEEVEEPassType { EEVEE_RENDER_PASS_ENVIRONMENT = (1 << 11), EEVEE_RENDER_PASS_SHADOW = (1 << 12), EEVEE_RENDER_PASS_AO = (1 << 13), - EEVEE_RENDER_PASS_UNUSED_14 = (1 << 14), /* EEVEE_RENDER_PASS_BLOOM */ + EEVEE_RENDER_PASS_BLOOM = (1 << 14), EEVEE_RENDER_PASS_AOV = (1 << 15), /* * TODO(@jbakker): Clean up conflicting bits after EEVEE has been removed. diff --git a/source/blender/makesdna/DNA_light_defaults.h b/source/blender/makesdna/DNA_light_defaults.h index 2c584e67913..b59cc8eae41 100644 --- a/source/blender/makesdna/DNA_light_defaults.h +++ b/source/blender/makesdna/DNA_light_defaults.h @@ -42,11 +42,11 @@ .spec_fac = 1.0f, \ .transmission_fac = 1.0f, \ .volume_fac = 1.0f, \ - .light_group_bits = {0, 0, 0, 1}, \ .shadow_filter_radius = 1.0f, \ .shadow_maximum_resolution = 0.001f, \ .shadow_jitter_overblur = 10.0f, \ .att_dist = 40.0f, \ + .light_group_bits = {0, 0, 0, 1}, \ .sun_angle = DEG2RADF(0.526f), \ .area_spread = DEG2RADF(180.0f), \ } diff --git a/source/blender/makesdna/DNA_light_types.h b/source/blender/makesdna/DNA_light_types.h index 008d11dcb06..ba71c73b669 100644 --- a/source/blender/makesdna/DNA_light_types.h +++ b/source/blender/makesdna/DNA_light_types.h @@ -82,12 +82,12 @@ typedef struct Light { float shadow_filter_radius; float shadow_maximum_resolution; float shadow_jitter_overblur; - char _pad3[4]; /* Goo-engine */ int light_group_bits[4]; + char _pad4[4]; - /* preview */ + /* Preview */ struct PreviewImage *preview; /* Nodes */ diff --git a/source/blender/makesdna/DNA_material_defaults.h b/source/blender/makesdna/DNA_material_defaults.h index 9b263f6e4f6..f4f39325d45 100644 --- a/source/blender/makesdna/DNA_material_defaults.h +++ b/source/blender/makesdna/DNA_material_defaults.h @@ -30,13 +30,13 @@ .pr_type = MA_SPHERE, \ \ .alpha_threshold = 0.5f, \ - \ + \ .blend_shadow = MA_BS_SOLID, \ - .light_group_bits = {0,0,0,1}, \ - .light_group_shadow_bits = {0,0,0,1},\ \ .blend_flag = MA_BL_TRANSPARENT_SHADOW,\ \ + .light_group_bits = {0,0,0,1}, \ + .light_group_shadow_bits = {0,0,0,1},\ .lineart.mat_occlusion = 1, \ } diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h index 4d3d6f18912..a1af15b0669 100644 --- a/source/blender/makesdna/DNA_material_types.h +++ b/source/blender/makesdna/DNA_material_types.h @@ -223,7 +223,7 @@ typedef struct Material { char blend_shadow; /* TODO(fclem): Deprecate once we remove legacy EEVEE. */ char blend_flag; char check_shadow_id; - + /* Goo-engine */ int light_group_bits[4]; int light_group_shadow_bits[4]; @@ -231,8 +231,10 @@ typedef struct Material { /* Volume. */ char volume_intersection_method; char _pad3[3]; + /* Displacement. */ float inflate_bounds; + /** * Cached slots for texture painting, must be refreshed via * BKE_texpaint_slot_refresh_cache before using. @@ -249,7 +251,7 @@ typedef struct Material { /* **************** MATERIAL ********************* */ -#define MA_GROUPS_ALL (int)0xFFFFFFFF +#define MA_GROUPS_ALL 0xFFFFFFFF /* maximum number of materials per material array. * (on object, mesh, light, etc.). limited by @@ -386,10 +388,6 @@ enum { MA_BS_HASHED = 3, }; -enum { - MA_SHADOW_ID = (1 << 0) -}; - /** #Material::displacement_method */ enum { MA_DISPLACEMENT_BUMP = 0, @@ -403,6 +401,10 @@ enum { MA_THICKNESS_SLAB = 1, }; +enum { + MA_SHADOW_ID = (1 << 0) +}; + /* Grease Pencil Stroke styles */ enum { GP_MATERIAL_STROKE_STYLE_SOLID = 0, diff --git a/source/blender/makesdna/DNA_scene_defaults.h b/source/blender/makesdna/DNA_scene_defaults.h index b6e145e4a8f..86d20492bd7 100644 --- a/source/blender/makesdna/DNA_scene_defaults.h +++ b/source/blender/makesdna/DNA_scene_defaults.h @@ -250,6 +250,7 @@ \ .ray_tracing_options = _DNA_DEFAULT_RaytraceEEVEE, \ \ + .light_cache_data = NULL, \ .light_threshold = 0.01f, \ \ .overscan = 3.0f, \ diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index b8774c268f0..abb41ae65cb 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -1909,6 +1909,11 @@ typedef struct SceneEEVEE { struct RaytraceEEVEE ray_tracing_options; + struct LightCache *light_cache DNA_DEPRECATED; + struct LightCache *light_cache_data; + /* Need a 128 byte string for some translations of some messages. */ + char light_cache_info[128]; + float overscan; float light_threshold; } SceneEEVEE; @@ -2825,7 +2830,7 @@ enum { SCE_EEVEE_GTAO_BENT_NORMALS = (1 << 5), SCE_EEVEE_GTAO_BOUNCE = (1 << 6), // SCE_EEVEE_DOF_ENABLED = (1 << 7), /* Moved to camera->dof.flag */ - // SCE_EEVEE_BLOOM_ENABLED = (1 << 8), /* Unused */ + SCE_EEVEE_BLOOM_ENABLED = (1 << 8), SCE_EEVEE_MOTION_BLUR_ENABLED_DEPRECATED = (1 << 9), /* Moved to scene->r.mode */ SCE_EEVEE_SHADOW_HIGH_BITDEPTH = (1 << 10), SCE_EEVEE_TAA_REPROJECTION = (1 << 11), @@ -2842,10 +2847,10 @@ enum { SCE_EEVEE_DOF_HQ_SLIGHT_FOCUS = (1 << 22), SCE_EEVEE_DOF_JITTER = (1 << 23), SCE_EEVEE_SHADOW_ENABLED = (1 << 24), + SCE_EEVEE_SHADOW_ID_HIGH_BITDEPTH = (1 << 24), SCE_EEVEE_RAYTRACE_OPTIONS_SPLIT = (1 << 25), SCE_EEVEE_SHADOW_JITTERED_VIEWPORT = (1 << 26), SCE_EEVEE_VOLUME_CUSTOM_RANGE = (1 << 27), - SCE_EEVEE_SHADOW_ID_HIGH_BITDEPTH = (1 << 28), }; typedef enum RaytraceEEVEE_Flag { diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 158d863e32b..cbc681b7243 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -756,11 +756,9 @@ typedef struct UserDef_Experimental { char enable_overlay_next; char use_new_volume_nodes; char use_shader_node_previews; - char use_extension_repos; - char use_grease_pencil_version3_convert_on_load; char use_animation_baklava; - char _pad[7]; + /* char _pad[0]; */ /** `makesdna` does not allow empty structs. */ } UserDef_Experimental; @@ -1178,7 +1176,7 @@ typedef enum eUserPref_Flag { USER_AUTOSAVE = (1 << 0), USER_FLAG_NUMINPUT_ADVANCED = (1 << 1), USER_FLAG_RECENT_SEARCHES_DISABLE = (1 << 2), - USER_FLAG_UNUSED_3 = (1 << 3), /* cleared */ + USER_FLAG_VERSION_SCRIPT = (1 << 3), USER_FLAG_UNUSED_4 = (1 << 4), /* cleared */ USER_TRACKBALL = (1 << 5), USER_FLAG_UNUSED_6 = (1 << 6), /* cleared */ diff --git a/source/blender/makesrna/intern/rna_constraint.cc b/source/blender/makesrna/intern/rna_constraint.cc index 267bf1a980d..245842190d4 100644 --- a/source/blender/makesrna/intern/rna_constraint.cc +++ b/source/blender/makesrna/intern/rna_constraint.cc @@ -1480,9 +1480,9 @@ static void rna_def_constraint_rotate_like(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, nullptr, "flag", ROTLIKE_Z_INVERT); RNA_def_property_ui_text(prop, "Invert Z", "Invert the Z rotation"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); - + prop = RNA_def_property(srna, "invert_all", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", ROTLIKE_INVERT_ALL); + RNA_def_property_boolean_sdna(prop, nullptr, "flag", ROTLIKE_INVERT_ALL); RNA_def_property_ui_text(prop, "Invert All", "Invert final combined rotation"); RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update"); diff --git a/source/blender/makesrna/intern/rna_gpencil_legacy_modifier.cc b/source/blender/makesrna/intern/rna_gpencil_legacy_modifier.cc index 5d989f36477..0c4b792bc56 100644 --- a/source/blender/makesrna/intern/rna_gpencil_legacy_modifier.cc +++ b/source/blender/makesrna/intern/rna_gpencil_legacy_modifier.cc @@ -3296,31 +3296,31 @@ static void rna_def_modifier_gpenciltexture(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update"); prop = RNA_def_property(srna, "rnd_uv_offset", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "rnd_uv_offset"); + RNA_def_property_float_sdna(prop, nullptr, "rnd_uv_offset"); RNA_def_property_ui_text(prop, "Random UV Offset", "Value for changes in stroke UV location"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "rnd_uv_scale", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "rnd_uv_scale"); + RNA_def_property_float_sdna(prop, nullptr, "rnd_uv_scale"); RNA_def_property_ui_text(prop, "Random UV Scale", "Value for changes in stroke UV scale"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "rnd_fill_offset", PROP_FLOAT, PROP_TRANSLATION); - RNA_def_property_float_sdna(prop, NULL, "rnd_fill_offset"); + RNA_def_property_float_sdna(prop, nullptr, "rnd_fill_offset"); RNA_def_property_ui_text(prop, "Random Fill Offset", "Value for changes in fill location"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "rnd_fill_rot", PROP_FLOAT, PROP_EULER); - RNA_def_property_float_sdna(prop, NULL, "rnd_fill_rot"); + RNA_def_property_float_sdna(prop, nullptr, "rnd_fill_rot"); RNA_def_property_ui_text(prop, "Random Fill Rotation", "Value for changes in fill rotation"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 100, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); prop = RNA_def_property(srna, "rnd_fill_scale", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, NULL, "rnd_fill_scale"); + RNA_def_property_float_sdna(prop, nullptr, "rnd_fill_scale"); RNA_def_property_ui_text(prop, "Random Fill Scale", "Value for changes in fill scale"); RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); @@ -3328,7 +3328,7 @@ static void rna_def_modifier_gpenciltexture(BlenderRNA *brna) prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED); RNA_def_property_ui_text(prop, "Seed", "Random seed"); RNA_def_property_update(prop, 0, "rna_GpencilModifier_update"); - + prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, nullptr, "mode"); RNA_def_property_enum_items(prop, mode_items); diff --git a/source/blender/makesrna/intern/rna_light.cc b/source/blender/makesrna/intern/rna_light.cc index 9f919d69838..c5db8183da7 100644 --- a/source/blender/makesrna/intern/rna_light.cc +++ b/source/blender/makesrna/intern/rna_light.cc @@ -182,7 +182,7 @@ static void rna_def_light(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_Light_use_nodes_update"); prop = RNA_def_property(srna, "light_group_bits", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "light_group_bits"); + RNA_def_property_int_sdna(prop, nullptr, "light_group_bits"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Light Groups", "Light group bitfield"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); diff --git a/source/blender/makesrna/intern/rna_lightprobe.cc b/source/blender/makesrna/intern/rna_lightprobe.cc index eaedf953d1f..ac11dc5fbdb 100644 --- a/source/blender/makesrna/intern/rna_lightprobe.cc +++ b/source/blender/makesrna/intern/rna_lightprobe.cc @@ -100,6 +100,14 @@ static void rna_def_lightprobe(BlenderRNA *brna) prop, "Clip Start", "Probe clip start, below which objects will not appear in reflections"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); + prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE); + RNA_def_property_float_sdna(prop, nullptr, "clipend"); + RNA_def_property_range(prop, 1e-6f, FLT_MAX); + RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3); + RNA_def_property_ui_text( + prop, "Clip End", "Probe clip end, beyond which objects will not appear in reflections"); + RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); + prop = RNA_def_property(srna, "show_clip", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_SHOW_CLIP_DIST); RNA_def_property_ui_text(prop, "Clipping", "Show the clipping distances in the 3D view"); @@ -116,13 +124,17 @@ static void rna_def_lightprobe(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Influence Distance", "Influence distance of the probe"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr); -# if 1 /* Deprecated: Remove in Blender 4.5 */ + prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Falloff", "Control how fast the probe influence decreases"); + RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr); + prop = RNA_def_property(srna, "visibility_buffer_bias", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, nullptr, "vis_bias"); RNA_def_property_range(prop, 0.001f, 9999.0f); RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3); RNA_def_property_ui_text( - prop, "Visibility Bias", "Bias for reducing self shadowing (Deprecated)"); + prop, "Visibility Bias", "Bias for reducing self shadowing"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr); prop = RNA_def_property(srna, "visibility_bleed_bias", PROP_FLOAT, PROP_FACTOR); @@ -130,14 +142,22 @@ static void rna_def_lightprobe(BlenderRNA *brna) RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text(prop, "Visibility Bleed Bias", - "Bias for reducing light-bleed on variance shadow maps (Deprecated)"); + "Bias for reducing light-bleed on variance shadow maps"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr); prop = RNA_def_property(srna, "visibility_blur", PROP_FLOAT, PROP_FACTOR); RNA_def_property_float_sdna(prop, nullptr, "vis_blur"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_ui_text( - prop, "Visibility Blur", "Filter size of the visibility blur (Deprecated)"); + prop, "Visibility Blur", "Filter size of the visibility blur"); + RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); + + prop = RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, nullptr, "intensity"); + RNA_def_property_range(prop, 0.0f, FLT_MAX); + RNA_def_property_ui_range(prop, 0.0f, 3.0f, 1.0, 3); + RNA_def_property_ui_text( + prop, "Intensity", "Modify the intensity of the lighting captured by this probe"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); prop = RNA_def_property(srna, "visibility_collection", PROP_POINTER, PROP_NONE); @@ -146,15 +166,14 @@ static void rna_def_lightprobe(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_ui_text( - prop, "Visibility Collection", "Restrict objects visible for this probe (Deprecated)"); + prop, "Visibility Collection", "Restrict objects visible for this probe"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); prop = RNA_def_property(srna, "invert_visibility_collection", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_INVERT_GROUP); RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Invert Collection", "Invert visibility collection (Deprecated)"); + RNA_def_property_ui_text(prop, "Invert Collection", "Invert visibility collection"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); -# endif /* Data preview */ prop = RNA_def_property(srna, "show_data", PROP_BOOLEAN, PROP_NONE); @@ -220,14 +239,6 @@ static void rna_def_lightprobe_sphere(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Falloff", "Control how fast the probe influence decreases"); RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, nullptr); - prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE); - RNA_def_property_float_sdna(prop, nullptr, "clipend"); - RNA_def_property_range(prop, 1e-6f, FLT_MAX); - RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3); - RNA_def_property_ui_text( - prop, "Clip End", "Probe clip end, beyond which objects will not appear in reflections"); - RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); - /* Custom parallax */ prop = RNA_def_property(srna, "use_custom_parallax", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "flag", LIGHTPROBE_FLAG_CUSTOM_PARALLAX); @@ -263,14 +274,6 @@ static void rna_def_lightprobe_volume(BlenderRNA *brna) srna, "Volume Probe", "Light probe that captures low frequency lighting inside a volume"); RNA_def_struct_ui_icon(srna, ICON_LIGHTPROBE_VOLUME); - prop = RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE); - RNA_def_property_float_sdna(prop, nullptr, "intensity"); - RNA_def_property_range(prop, 0.0f, FLT_MAX); - RNA_def_property_ui_range(prop, 0.0f, 3.0f, 1.0, 3); - RNA_def_property_ui_text( - prop, "Intensity", "Modify the intensity of the lighting captured by this probe"); - RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc"); - /* Irradiance grid */ prop = RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, nullptr, "grid_resolution_x"); diff --git a/source/blender/makesrna/intern/rna_material.cc b/source/blender/makesrna/intern/rna_material.cc index 1cd60b33965..ccc79c77187 100644 --- a/source/blender/makesrna/intern/rna_material.cc +++ b/source/blender/makesrna/intern/rna_material.cc @@ -869,7 +869,6 @@ void RNA_def_material(BlenderRNA *brna) {0, nullptr, 0, nullptr, nullptr}, }; -# if 1 /* Delete this section once we remove old eevee. */ static EnumPropertyItem prop_eevee_blend_items[] = { {MA_BM_SOLID, "OPAQUE", 0, "Opaque", "Render surface without transparency"}, {MA_BM_CLIP, @@ -905,7 +904,6 @@ void RNA_def_material(BlenderRNA *brna) "Use noise to dither the binary visibility and use filtering to reduce the noise"}, {0, nullptr, 0, nullptr, nullptr}, }; -# endif static EnumPropertyItem prop_eevee_surface_render_method_items[] = { {MA_SURFACE_METHOD_DEFERRED, @@ -963,16 +961,15 @@ void RNA_def_material(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Displacement Method", "Method to use for the displacement"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); -# if 1 /* Delete this section once we remove old eevee. */ /* Blending (only Eevee for now) */ prop = RNA_def_property(srna, "blend_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_eevee_blend_items); RNA_def_property_ui_text( prop, "Blend Mode", - "Blend Mode for Transparent Faces (Deprecated: use 'surface_render_method')"); - RNA_def_property_enum_funcs( - prop, "rna_Material_blend_method_get", "rna_Material_blend_method_set", nullptr); + "Blend Mode for Transparent Faces"); + // RNA_def_property_enum_funcs( + // prop, "rna_Material_blend_method_get", "rna_Material_blend_method_set", nullptr); RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_MATERIAL); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); @@ -988,8 +985,6 @@ void RNA_def_material(BlenderRNA *brna) "Clip Threshold", "A pixel is rendered only if its alpha value is above this threshold"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); -# endif - prop = RNA_def_property(srna, "use_transparency_overlap", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, nullptr, "blend_flag", MA_BL_HIDE_BACKFACE); RNA_def_property_ui_text(prop, @@ -997,7 +992,6 @@ void RNA_def_material(BlenderRNA *brna) "Render multiple transparent layers " "(may introduce transparency sorting problems)"); -# if 1 /* This should be deleted in Blender 4.5 */ RNA_def_property_update(prop, 0, "rna_Material_draw_update"); prop = RNA_def_property(srna, "show_transparent_back", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, nullptr, "blend_flag", MA_BL_HIDE_BACKFACE); @@ -1005,9 +999,8 @@ void RNA_def_material(BlenderRNA *brna) prop, "Show Backface", "Render multiple transparent layers " - "(may introduce transparency sorting problems) (Deprecated: use 'use_tranparency_overlap')"); + "(may introduce transparency sorting problems)"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); -# endif prop = RNA_def_property(srna, "use_backface_culling", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "blend_flag", MA_BL_CULL_BACKFACE); @@ -1051,21 +1044,20 @@ void RNA_def_material(BlenderRNA *brna) "setting"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); -# if 1 /* This should be deleted in Blender 4.5 */ prop = RNA_def_property(srna, "use_screen_refraction", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "blend_flag", MA_BL_SS_REFRACTION); RNA_def_property_ui_text( prop, - "Raytrace Transmission", + "Raytrace Refraction", "Use raytracing to determine transmitted color instead of using only light probes. " "This prevents the surface from contributing to the lighting of surfaces not using this " - "setting (Deprecated: use 'use_raytrace_refraction')"); + "setting"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); prop = RNA_def_property(srna, "use_sss_translucency", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "blend_flag", MA_BL_TRANSLUCENCY); RNA_def_property_ui_text( - prop, "Subsurface Translucency", "Add translucency effect to subsurface (Deprecated)"); + prop, "Subsurface Translucency", "Add translucency effect to subsurface"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); prop = RNA_def_property(srna, "refraction_depth", PROP_FLOAT, PROP_DISTANCE); @@ -1074,9 +1066,8 @@ void RNA_def_material(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Refraction Depth", "Approximate the thickness of the object to compute two refraction " - "events (0 is disabled) (Deprecated)"); + "events (0 is disabled)"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); -# endif prop = RNA_def_property(srna, "thickness_mode", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, prop_eevee_thickness_method_items); @@ -1111,7 +1102,7 @@ void RNA_def_material(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_Material_draw_update"); prop = RNA_def_property(srna, "light_group_bits", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "light_group_bits"); + RNA_def_property_int_sdna(prop, nullptr, "light_group_bits"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Light Groups", "Light group bitfield"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); @@ -1119,7 +1110,7 @@ void RNA_def_material(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_Material_draw_update"); prop = RNA_def_property(srna, "light_group_shadow_bits", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "light_group_shadow_bits"); + RNA_def_property_int_sdna(prop, nullptr, "light_group_shadow_bits"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Light Group Shadows", "Light group shadow bitfield"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); @@ -1128,7 +1119,7 @@ void RNA_def_material(BlenderRNA *brna) /* Self shadowing */ prop = RNA_def_property(srna, "check_shadow_id", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "check_shadow_id", MA_SHADOW_ID); + RNA_def_property_boolean_sdna(prop, nullptr, "check_shadow_id", MA_SHADOW_ID); RNA_def_property_boolean_default(prop, false); RNA_def_property_ui_text(prop, "Check Self Shadowing", "Filter shadows cast by this Object"); RNA_def_property_update(prop, 0, "rna_Material_draw_update"); diff --git a/source/blender/makesrna/intern/rna_nodetree.cc b/source/blender/makesrna/intern/rna_nodetree.cc index 955b7480446..84a71844b3a 100644 --- a/source/blender/makesrna/intern/rna_nodetree.cc +++ b/source/blender/makesrna/intern/rna_nodetree.cc @@ -373,7 +373,7 @@ const EnumPropertyItem rna_enum_node_sdf_primitive_items[] = { "Parabola Segment", "2d sdf parabola segment"}, {SHD_SDF_2D_UNEVEN_CAPSULE, "CAPSULE_2D", 0, "Uneven Capsule", "2d sdf capsule"}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; const EnumPropertyItem rna_enum_node_sdf_op_items[] = { @@ -422,7 +422,7 @@ const EnumPropertyItem rna_enum_node_sdf_op_items[] = { {SHD_SDF_OP_DIFF_COLUMNS, "DIFF_COLUMNS", 0, "Difference Columns", ""}, {SHD_SDF_OP_DIFF_STAIRS, "DIFF_STAIRS", 0, "Difference Stairs", ""}, {SHD_SDF_OP_DIFF_CHAMFER, "DIFF_CHAMFER", 0, "Difference Chamfer", ""}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; const EnumPropertyItem rna_enum_node_sdf_vector_op_items[] = { @@ -502,7 +502,7 @@ const EnumPropertyItem rna_enum_node_sdf_vector_op_items[] = { {SHD_SDF_VEC_OP_MAP_11, "MAP_11", 0, "Map -1-1", "Map UV range [0,1] to [-1,1]"}, {SHD_SDF_VEC_OP_MAP_05, "MAP_05", 0, "Map -0.5-0.5", "Map UV range [0,1] to [-.5,.5]"}, {SHD_SDF_VEC_OP_MAP_UV, "MAP_UV", 0, "Map 0-1", "Map [-1,1] to UV range [0,1]"}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; const EnumPropertyItem rna_enum_node_float_compare_items[] = { @@ -5300,13 +5300,13 @@ static void def_sh_sdf_primitive(StructRNA *srna) def_sh_tex(srna); prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "mode"); + RNA_def_property_enum_sdna(prop, nullptr, "mode"); RNA_def_property_enum_items(prop, rna_enum_node_sdf_primitive_items); RNA_def_property_ui_text(prop, "Mode", "SDF Function"); RNA_def_property_update(prop, 0, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "invert", 1); + RNA_def_property_boolean_sdna(prop, nullptr, "invert", 1); RNA_def_property_ui_text(prop, "Invert", "Invert signed distance field"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -5318,13 +5318,13 @@ static void def_sh_sdf_op(StructRNA *srna) RNA_def_struct_sdna_from(srna, "NodeSdfOp", "storage"); prop = RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "operation"); + RNA_def_property_enum_sdna(prop, nullptr, "operation"); RNA_def_property_enum_items(prop, rna_enum_node_sdf_op_items); RNA_def_property_ui_text(prop, "SDF Operation", ""); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "invert", 1); + RNA_def_property_boolean_sdna(prop, nullptr, "invert", 1); RNA_def_property_ui_text(prop, "Invert", "Invert operation output value"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } @@ -5338,7 +5338,7 @@ static void def_sh_sdf_vector_op(StructRNA *srna) {SHD_SDF_AXIS_YZX, "YZX_AXIS", 0, "YZX Axis", ""}, {SHD_SDF_AXIS_ZXY, "ZXY_AXIS", 0, "ZXY Axis", ""}, {SHD_SDF_AXIS_ZYX, "ZYX_AXIS", 0, "ZYX Axis", ""}, - {0, NULL, 0, NULL, NULL}, + {0, nullptr, 0, nullptr, nullptr}, }; PropertyRNA *prop; @@ -5346,13 +5346,13 @@ static void def_sh_sdf_vector_op(StructRNA *srna) RNA_def_struct_sdna_from(srna, "NodeSdfVectorOp", "storage"); prop = RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "operation"); + RNA_def_property_enum_sdna(prop, nullptr, "operation"); RNA_def_property_enum_items(prop, rna_enum_node_sdf_vector_op_items); RNA_def_property_ui_text(prop, "Operation", ""); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update"); prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "axis"); + RNA_def_property_enum_sdna(prop, nullptr, "axis"); RNA_def_property_enum_items(prop, sdf_op_axis_items); RNA_def_property_ui_text(prop, "Axis", ""); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); @@ -5365,7 +5365,7 @@ static void def_sh_shader_info(StructRNA *srna) RNA_def_struct_sdna_from(srna, "NodeShaderInfo", "storage"); prop = RNA_def_property(srna, "light_group_bits", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "light_group_bits"); + RNA_def_property_int_sdna(prop, nullptr, "light_group_bits"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Light Groups", "Light group bitfield"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); @@ -5373,7 +5373,7 @@ static void def_sh_shader_info(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "light_group_shadow_bits", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "light_group_shadow_bits"); + RNA_def_property_int_sdna(prop, nullptr, "light_group_shadow_bits"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Light Group Shadows", "Light group shadow bitfield"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); @@ -5381,7 +5381,7 @@ static void def_sh_shader_info(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); prop = RNA_def_property(srna, "use_own_light_groups", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "use_own_light_groups", 1); + RNA_def_property_boolean_sdna(prop, nullptr, "use_own_light_groups", 1); RNA_def_property_ui_text( prop, "Light Groups", "Set light groups for this node separately"); RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); diff --git a/source/blender/makesrna/intern/rna_pose.cc b/source/blender/makesrna/intern/rna_pose.cc index 353166e5519..c5126f3b261 100644 --- a/source/blender/makesrna/intern/rna_pose.cc +++ b/source/blender/makesrna/intern/rna_pose.cc @@ -1150,11 +1150,12 @@ static void rna_def_pose_channel(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update"); prop = RNA_def_property(srna, "hide_outliner", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_negative_sdna(prop, NULL, "drawflag", PCHAN_DRAW_SHOW_OUTLINER); + RNA_def_property_boolean_negative_sdna(prop, nullptr, "drawflag", PCHAN_DRAW_SHOW_OUTLINER); RNA_def_property_ui_text( prop, "Set Outliner Flag", "Hide this pose bone in the Outliner when \"Hidden Pose Bones\" is disabled."); RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update"); + prop = RNA_def_property(srna, "custom_shape_transform", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, nullptr, "custom_tx"); RNA_def_property_struct_type(prop, "PoseBone"); diff --git a/source/blender/makesrna/intern/rna_scene.cc b/source/blender/makesrna/intern/rna_scene.cc index bf57acffe39..e16b690c7ce 100644 --- a/source/blender/makesrna/intern/rna_scene.cc +++ b/source/blender/makesrna/intern/rna_scene.cc @@ -3851,7 +3851,7 @@ static void rna_def_tool_settings(BlenderRNA *brna) RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, nullptr); prop = RNA_def_property(srna, "use_gpencil_autoclose_strokes", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "gpencil_flags", GP_TOOL_FLAG_AUTOCLOSE_STROKE); + RNA_def_property_boolean_sdna(prop, nullptr, "gpencil_flags", GP_TOOL_FLAG_AUTOCLOSE_STROKE); RNA_def_property_boolean_default(prop, false); RNA_def_property_ui_icon(prop, ICON_AUTOMERGE_OFF, 1); RNA_def_property_ui_text( @@ -3859,8 +3859,8 @@ static void rna_def_tool_settings(BlenderRNA *brna) "Autoclose", "Close the last drawn stroke before post processing"); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); - RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, nullptr); prop = RNA_def_property(srna, "gpencil_sculpt", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, nullptr, "gp_sculpt"); RNA_def_property_flag(prop, PROP_DEG_SYNC_ONLY); @@ -4734,14 +4734,10 @@ static void rna_def_view_layer_eevee(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Volume Light", "Deliver volume direct light pass"); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update"); -# if 1 - /* Bloom is deprecated since Blender 4.2, is kept for add-on compatibility reasons and needs to - * be removed in a future release. */ prop = RNA_def_property(srna, "use_pass_bloom", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, nullptr, "render_passes", 0 /*EEVEE_RENDER_PASS_BLOOM*/); - RNA_def_property_ui_text(prop, "Bloom", "Deliver bloom pass (deprecated)"); + RNA_def_property_boolean_sdna(prop, nullptr, "render_passes", EEVEE_RENDER_PASS_BLOOM); + RNA_def_property_ui_text(prop, "Bloom", "Deliver bloom pass"); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_ViewLayer_pass_update"); -# endif prop = RNA_def_property(srna, "use_pass_transparent", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "render_passes", EEVEE_RENDER_PASS_TRANSPARENT); @@ -6715,7 +6711,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna) }; static const EnumPropertyItem engine_items[] = { - {0, "BLENDER_EEVEE_NEXT", 0, "EEVEE", ""}, + {0, "BLENDER_EEVEE", 0, "EEVEE", ""}, {0, nullptr, 0, nullptr, nullptr}, }; @@ -8029,6 +8025,15 @@ static void rna_def_scene_eevee(BlenderRNA *brna) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); } + prop = RNA_def_property(srna, "gi_auto_bake", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, nullptr, "flag", SCE_EEVEE_GI_AUTOBAKE); + RNA_def_property_ui_text(prop, "Auto Bake", "Auto bake indirect lighting when editing probes"); + + prop = RNA_def_property(srna, "gi_cache_info", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, nullptr, "light_cache_info"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Light Cache Info", "Info on current cache status"); + prop = RNA_def_property(srna, "gi_irradiance_pool_size", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, eevee_pool_size_items); RNA_def_property_ui_text(prop, @@ -8456,19 +8461,15 @@ static void rna_def_scene_eevee(BlenderRNA *brna) RNA_def_property_ui_range(prop, 0.0f, 20.0f, 1, 1); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); - /* Bloom is deprecated since Blender 4.2, is kept for add-on compatibility reasons and needs to - * be removed in a future release. */ -# if 1 + /* Bloom */ prop = RNA_def_property(srna, "use_bloom", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, nullptr, "flag", 0 /*SCE_EEVEE_BLOOM_ENABLED*/); - RNA_def_property_ui_text( - prop, "Bloom", "High brightness pixels generate a glowing effect (deprecated)"); + RNA_def_property_boolean_sdna(prop, nullptr, "flag", SCE_EEVEE_BLOOM_ENABLED); + RNA_def_property_ui_text(prop, "Bloom", "High brightness pixels generate a glowing effect"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "bloom_threshold", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_ui_text( - prop, "Threshold", "Filters out pixels under this level of brightness (deprecated)"); + RNA_def_property_ui_text(prop, "Threshold", "Filters out pixels under this level of brightness"); RNA_def_property_range(prop, 0.0f, 100000.0f); RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); @@ -8476,19 +8477,18 @@ static void rna_def_scene_eevee(BlenderRNA *brna) prop = RNA_def_property(srna, "bloom_color", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Color", "Color applied to the bloom effect (deprecated)"); + RNA_def_property_ui_text(prop, "Color", "Color applied to the bloom effect"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "bloom_knee", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_ui_text( - prop, "Knee", "Makes transition between under/over-threshold gradual (deprecated)"); + RNA_def_property_ui_text(prop, "Knee", "Makes transition between under/over-threshold gradual"); RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "bloom_radius", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_ui_text(prop, "Radius", "Bloom spread distance (deprecated)"); + RNA_def_property_ui_text(prop, "Radius", "Bloom spread distance"); RNA_def_property_range(prop, 0.0f, 100.0f); RNA_def_property_ui_range(prop, 0.0f, 10.0f, 1, 3); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); @@ -8496,19 +8496,19 @@ static void rna_def_scene_eevee(BlenderRNA *brna) prop = RNA_def_property(srna, "bloom_clamp", PROP_FLOAT, PROP_FACTOR); RNA_def_property_ui_text( - prop, "Clamp", "Maximum intensity a bloom pixel can have (0 to disable) (deprecated)"); + prop, "Clamp", "Maximum intensity a bloom pixel can have (0 to disable)"); RNA_def_property_range(prop, 0.0f, 100000.0f); RNA_def_property_ui_range(prop, 0.0f, 1000.0f, 1, 3); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "bloom_intensity", PROP_FLOAT, PROP_FACTOR); - RNA_def_property_ui_text(prop, "Intensity", "Blend factor (deprecated)"); + RNA_def_property_ui_text(prop, "Intensity", "Blend factor"); RNA_def_property_range(prop, 0.0f, 10000.0f); RNA_def_property_ui_range(prop, 0.0f, 0.1f, 1, 3); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); -# endif + /* Motion blur */ prop = RNA_def_property(srna, "motion_blur_depth_scale", PROP_FLOAT, PROP_NONE); RNA_def_property_ui_text(prop, @@ -8544,9 +8544,6 @@ static void rna_def_scene_eevee(BlenderRNA *brna) RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); -# if 1 - /* Deprecated since Blender 4.2. Kept for compatibility with add-ons. Needs to be removed in a - * future version. */ prop = RNA_def_property(srna, "shadow_cube_size", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, eevee_shadow_size_items); RNA_def_property_ui_text( @@ -8560,7 +8557,6 @@ static void rna_def_scene_eevee(BlenderRNA *brna) prop, "Directional Shadows Resolution", "Size of sun light shadow maps (deprecated)"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); -# endif prop = RNA_def_property(srna, "shadow_pool_size", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, eevee_pool_size_items); @@ -8593,10 +8589,10 @@ static void rna_def_scene_eevee(BlenderRNA *brna) RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "use_shadow_id_high_bitdepth", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_EEVEE_SHADOW_ID_HIGH_BITDEPTH); + RNA_def_property_boolean_sdna(prop, nullptr, "flag", SCE_EEVEE_SHADOW_ID_HIGH_BITDEPTH); RNA_def_property_ui_text(prop, "High ID Bit Depth", "Use 32-bit shadow IDs (Enable if self-shadow does not work for some objects)"); RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY); - RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, nullptr); prop = RNA_def_property(srna, "use_soft_shadows", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, nullptr, "flag", SCE_EEVEE_SHADOW_SOFT); diff --git a/source/blender/makesrna/intern/rna_space.cc b/source/blender/makesrna/intern/rna_space.cc index 05219a5e54b..b723d460de1 100644 --- a/source/blender/makesrna/intern/rna_space.cc +++ b/source/blender/makesrna/intern/rna_space.cc @@ -457,6 +457,9 @@ static const EnumPropertyItem rna_enum_view3dshading_render_pass_type_items[] = {EEVEE_RENDER_PASS_SPECULAR_COLOR, "SPECULAR_COLOR", 0, "Specular Color", ""}, {EEVEE_RENDER_PASS_VOLUME_LIGHT, "VOLUME_LIGHT", 0, "Volume Light", ""}, + RNA_ENUM_ITEM_HEADING(N_("Effects"), nullptr), + {EEVEE_RENDER_PASS_BLOOM, "BLOOM", 0, "Bloom", ""}, + RNA_ENUM_ITEM_HEADING(N_("Data"), nullptr), {EEVEE_RENDER_PASS_NORMAL, "NORMAL", 0, "Normal", ""}, {EEVEE_RENDER_PASS_MIST, "MIST", 0, "Mist", ""}, @@ -1445,6 +1448,7 @@ static const EnumPropertyItem *rna_3DViewShading_render_pass_itemf(bContext *C, Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + const bool bloom_enabled = scene->eevee.flag & SCE_EEVEE_BLOOM_ENABLED; const bool aov_available = BKE_view_layer_has_valid_aov(view_layer); const bool eevee_next_active = STREQ(scene->r.engine, "BLENDER_EEVEE_NEXT"); @@ -1474,10 +1478,10 @@ static const EnumPropertyItem *rna_3DViewShading_render_pass_itemf(bContext *C, !eevee_next_active) { } - else if (!aov_available && STREQ(item->name, "Shader AOV")) { - /* Don't add Shader AOV submenu when there are no AOVs defined. */ - } - else { + else if (!((!bloom_enabled && + (item->value == EEVEE_RENDER_PASS_BLOOM || STREQ(item->name, "Effects"))) || + (!aov_available && STREQ(item->name, "Shader AOV")))) + { RNA_enum_item_add(&result, &totitem, item); } } @@ -1490,9 +1494,13 @@ static int rna_3DViewShading_render_pass_get(PointerRNA *ptr) { View3DShading *shading = (View3DShading *)ptr->data; eViewLayerEEVEEPassType result = eViewLayerEEVEEPassType(shading->render_pass); + Scene *scene = rna_3DViewShading_scene(ptr); ViewLayer *view_layer = rna_3DViewShading_view_layer(ptr); - if (result == EEVEE_RENDER_PASS_AOV) { + if (result == EEVEE_RENDER_PASS_BLOOM && ((scene->eevee.flag & SCE_EEVEE_BLOOM_ENABLED) == 0)) { + return EEVEE_RENDER_PASS_COMBINED; + } + else if (result == EEVEE_RENDER_PASS_AOV) { if (!view_layer) { return EEVEE_RENDER_PASS_COMBINED; } @@ -1510,6 +1518,7 @@ static int rna_3DViewShading_render_pass_get(PointerRNA *ptr) static void rna_3DViewShading_render_pass_set(PointerRNA *ptr, int value) { View3DShading *shading = (View3DShading *)ptr->data; + Scene *scene = rna_3DViewShading_scene(ptr); ViewLayer *view_layer = rna_3DViewShading_view_layer(ptr); shading->aov_name[0] = 0; @@ -1529,6 +1538,11 @@ static void rna_3DViewShading_render_pass_set(PointerRNA *ptr, int value) shading->render_pass = EEVEE_RENDER_PASS_AOV; STRNCPY(shading->aov_name, aov->name); } + else if (value == EEVEE_RENDER_PASS_BLOOM && + ((scene->eevee.flag & SCE_EEVEE_BLOOM_ENABLED) == 0)) + { + shading->render_pass = EEVEE_RENDER_PASS_COMBINED; + } else { shading->render_pass = value; } @@ -4064,10 +4078,10 @@ static void rna_def_space_outliner(BlenderRNA *brna) RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, nullptr); prop = RNA_def_property(srna, "use_filter_bone_flag", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_negative_sdna(prop, NULL, "filter", SO_FILTER_NO_BONE_FLAG); + RNA_def_property_boolean_negative_sdna(prop, nullptr, "filter", SO_FILTER_NO_BONE_FLAG); RNA_def_property_ui_text( prop, "Show flagged pose-bones", "Show bones with \"Outliner Flag\" set."); - RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL); + RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, nullptr); /* Libraries filter. */ prop = RNA_def_property(srna, "use_filter_id_type", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_userdef.cc b/source/blender/makesrna/intern/rna_userdef.cc index 2ec4220a64b..c92d9a7fd4a 100644 --- a/source/blender/makesrna/intern/rna_userdef.cc +++ b/source/blender/makesrna/intern/rna_userdef.cc @@ -6500,7 +6500,7 @@ static void rna_def_userdef_input(BlenderRNA *brna) "screen size (used by transform, dragging of UI controls, etc.)"); prop = RNA_def_property(srna, "use_accumulative_trackball", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ACCUMULATE_TRACKBALL); + RNA_def_property_boolean_sdna(prop, nullptr, "uiflag", USER_ACCUMULATE_TRACKBALL); RNA_def_property_ui_text( prop, "Continuous Trackball", @@ -7154,6 +7154,13 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna) "Online Access", "The user has been shown the \"Online Access\" prompt and make a choice"); + prop = RNA_def_property(srna, "save_version_warning", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, nullptr, "flag", USER_FLAG_VERSION_SCRIPT); + RNA_def_property_boolean_default(prop, true); + RNA_def_property_ui_text(prop, + "Embed Version Warning Popup", + "Embed a script that provides a warning pop-up if this file is opened in a non-GooEngine build"); + /* Directories. */ prop = RNA_def_property(srna, "font_directory", PROP_STRING, PROP_DIRPATH); diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index 573526d3f3e..f336c7414e7 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -133,7 +133,6 @@ DefNode(ShaderNode, SH_NODE_SET_DEPTH, 0, "SET DefNode(ShaderNode, SH_NODE_CURVATURE, 0, "CURVATURE", Curvature, "Curvature", "" ) DefNode(ShaderNode, SH_NODE_SDF_NOISE, 0, "SDF_NOISE", SdfNoise, "Sdf Noise", "" ) - DefNode(CompositorNode, CMP_NODE_VIEWER, def_cmp_viewer, "VIEWER", Viewer, "Viewer", "Visualize data from inside a node graph, in the image editor or as a backdrop") DefNode(CompositorNode, CMP_NODE_RGB, 0, "RGB", RGB, "RGB", "A color picker") DefNode(CompositorNode, CMP_NODE_VALUE, 0, "VALUE", Value, "Value", "Input numerical values to other nodes in the node graph") diff --git a/source/blender/nodes/shader/nodes/node_shader_set_depth.cc b/source/blender/nodes/shader/nodes/node_shader_set_depth.cc index 687cf06b6c3..657fc4fb0b9 100644 --- a/source/blender/nodes/shader/nodes/node_shader_set_depth.cc +++ b/source/blender/nodes/shader/nodes/node_shader_set_depth.cc @@ -33,12 +33,12 @@ static int node_shader_gpu_add_shader(GPUMaterial *mat, void register_node_type_sh_set_depth(void) { namespace file_ns = blender::nodes::node_shader_set_depth_cc; - static bNodeType ntype; + static blender::bke::bNodeType ntype; sh_node_type_base(&ntype, SH_NODE_SET_DEPTH, "Set Depth", NODE_CLASS_SHADER); ntype.declare = file_ns::node_declare; ntype.gpu_fn = file_ns::node_shader_gpu_add_shader; - nodeRegisterType(&ntype); + blender::bke::nodeRegisterType(&ntype); } diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt index db40b3e7489..a7c589c93fa 100644 --- a/tests/python/CMakeLists.txt +++ b/tests/python/CMakeLists.txt @@ -750,6 +750,17 @@ if(WITH_CYCLES OR WITH_GPU_RENDER_TESTS) list(APPEND _gpu_render_tests_arguments --fail-silently) endif() + # Eevee + foreach(render_test ${gpu_render_tests}) + add_render_test( + eevee_${render_test} + ${CMAKE_CURRENT_LIST_DIR}/eevee_render_tests.py + -testdir "${TEST_SRC_DIR}/render/${render_test}" + -outdir "${TEST_OUT_DIR}/eevee" + ${_gpu_render_tests_arguments} + ) + endforeach() + # Eevee Next foreach(render_test ${gpu_render_tests}) add_render_test( diff --git a/tests/python/eevee_render_tests.py b/tests/python/eevee_render_tests.py new file mode 100644 index 00000000000..6ad48f4f7d5 --- /dev/null +++ b/tests/python/eevee_render_tests.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2015-2022 Blender Authors +# +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import os +import pathlib +import subprocess +import sys +from pathlib import Path + + +def setup(): + import bpy + + for scene in bpy.data.scenes: + scene.render.engine = 'BLENDER_EEVEE' + + # Enable Eevee features + scene = bpy.context.scene + eevee = scene.eevee + + eevee.use_soft_shadows = True + + eevee.use_ssr = True + eevee.use_ssr_refraction = True + + eevee.use_gtao = True + eevee.gtao_distance = 1 + + eevee.use_volumetric_shadows = True + eevee.volumetric_tile_size = '2' + + for mat in bpy.data.materials: + # This needs to be enabled case by case, + # otherwise we loose SSR and GTAO everywhere. + # mat.use_screen_refraction = True + mat.use_sss_translucency = True + + cubemap = None + grid = None + # Does not work in edit mode + try: + # Simple probe setup + bpy.ops.object.lightprobe_add(type='SPHERE', location=(0.5, 0, 1.5)) + cubemap = bpy.context.selected_objects[0] + cubemap.scale = (2.5, 2.5, 1.0) + cubemap.data.falloff = 0 + cubemap.data.clip_start = 2.4 + + bpy.ops.object.lightprobe_add(type='VOLUME', location=(0, 0, 0.25)) + grid = bpy.context.selected_objects[0] + grid.scale = (1.735, 1.735, 1.735) + grid.data.grid_resolution_x = 3 + grid.data.grid_resolution_y = 3 + grid.data.grid_resolution_z = 2 + except: + pass + + try: + # Try to only include the plane in reflections + plane = bpy.data.objects['Plane'] + + collection = bpy.data.collections.new("Reflection") + collection.objects.link(plane) + # Add all lights to light the plane + if not invert: + for light in bpy.data.objects: + if light.type == 'LIGHT': + collection.objects.link(light) + + # Add collection to the scene + scene.collection.children.link(collection) + + cubemap.data.visibility_collection = collection + except: + pass + + eevee.gi_diffuse_bounces = 1 + eevee.gi_cubemap_resolution = '128' + eevee.gi_visibility_resolution = '16' + eevee.gi_irradiance_smoothing = 0 + + bpy.ops.scene.light_cache_bake() + + +# When run from inside Blender, render and exit. +try: + import bpy + inside_blender = True +except ImportError: + inside_blender = False + +if inside_blender: + try: + setup() + except Exception as e: + print(e) + sys.exit(1) + + +def get_gpu_device_type(blender): + command = [ + blender, + "--background", + "--factory-startup", + "--python", + str(pathlib.Path(__file__).parent / "gpu_info.py") + ] + try: + completed_process = subprocess.run(command, stdout=subprocess.PIPE) + for line in completed_process.stdout.read_text(): + if line.startswith("GPU_DEVICE_TYPE:"): + vendor = line.split(':')[1] + return vendor + except BaseException: + return None + return None + + +def get_arguments(filepath, output_filepath): + return [ + "--background", + "--factory-startup", + "--enable-autoexec", + "--debug-memory", + "--debug-exit-on-error", + filepath, + "-E", "BLENDER_EEVEE", + "-P", + os.path.realpath(__file__), + "-o", output_filepath, + "-F", "PNG", + "-f", "1"] + + +def create_argparse(): + parser = argparse.ArgumentParser() + parser.add_argument("-blender", nargs="+") + parser.add_argument("-testdir", nargs=1) + parser.add_argument("-outdir", nargs=1) + parser.add_argument("-oiiotool", nargs=1) + parser.add_argument('--batch', default=False, action='store_true') + parser.add_argument('--fail-silently', default=False, action='store_true') + return parser + + +def main(): + parser = create_argparse() + args = parser.parse_args() + + blender = args.blender[0] + test_dir = args.testdir[0] + oiiotool = args.oiiotool[0] + output_dir = args.outdir[0] + + gpu_device_type = get_gpu_device_type(blender) + reference_override_dir = None + if gpu_device_type == "AMD": + reference_override_dir = "eevee_renders/amd" + + from modules import render_report + report = render_report.Report("Eevee", output_dir, oiiotool) + report.set_pixelated(True) + report.set_reference_dir("eevee_renders") + report.set_reference_override_dir(reference_override_dir) + report.set_compare_engine('cycles', 'CPU') + + test_dir_name = Path(test_dir).name + if test_dir_name.startswith('image'): + report.set_fail_threshold(0.051) + + ok = report.run(test_dir, blender, get_arguments, batch=args.batch, fail_silently=args.fail_silently) + + sys.exit(not ok) + + +if not inside_blender and __name__ == "__main__": + main()