From 3ef2df3893262e734311c9a7f8e53f379d2d93fb Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 10 Sep 2025 17:15:07 +0200 Subject: [PATCH] Cycles: Remove Use Tiling option Always enforce tiling of some size, up to the 8k tile size. Rendering very big images without tiles have a lot of challenges. While solving those challenges is not impossible, it does not seem to be a practical time investment. The internals of the way how Cycles work, including Cycles Standalone is not affected by this change. A possible downside is that path guiding might not work exactly how one would expect it to due to lack of information sharing across multiple tiles. This is something that never worked nicely, and camera animation and border render has the same issues, so it is not considered a stopper for this change. Fixes #145900 Co-authored-by: Brecht Van Lommel Pull Request: https://projects.blender.org/blender/blender/pulls/146031 --- intern/cycles/blender/addon/presets.py | 1 - intern/cycles/blender/addon/properties.py | 6 ++--- intern/cycles/blender/addon/ui.py | 25 +++++++++++++++---- intern/cycles/blender/addon/version_update.py | 9 ++++++- intern/cycles/blender/sync.cpp | 2 +- scripts/modules/rna_manual_reference.py | 1 - scripts/presets/cycles/performance/Default.py | 1 - .../cycles/performance/Faster_Render.py | 1 - .../cycles/performance/Lower_Memory.py | 1 - .../blender/blenkernel/BKE_blender_version.h | 2 +- 10 files changed, 33 insertions(+), 16 deletions(-) diff --git a/intern/cycles/blender/addon/presets.py b/intern/cycles/blender/addon/presets.py index 4db9f8f1aa0..2e840d0c6a1 100644 --- a/intern/cycles/blender/addon/presets.py +++ b/intern/cycles/blender/addon/presets.py @@ -106,7 +106,6 @@ class AddPresetPerformance(AddPresetBase, Operator): "cycles.debug_use_compact_bvh", "cycles.debug_use_hair_bvh", "cycles.debug_bvh_time_steps", - "cycles.use_auto_tile", "cycles.tile_size", ] diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py index 77d865438ec..d28099e7742 100644 --- a/intern/cycles/blender/addon/properties.py +++ b/intern/cycles/blender/addon/properties.py @@ -1046,14 +1046,14 @@ class CyclesRenderSettings(bpy.types.PropertyGroup): ) use_auto_tile: BoolProperty( - name="Use Tiling", - description="Render high resolution images in tiles to reduce memory usage, using the specified tile size. Tiles are cached to disk while rendering to save memory", + name="Auto Tile", + description="Deprecated, tiling is always enabled", default=True, ) tile_size: IntProperty( name="Tile Size", default=2048, - description="", + description="Render high resolution images in tiles of this size, to reduce memory usage. Tiles are cached to disk while rendering to save memory", min=8, max=8192, ) diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index 61a6c03511e..9362d8f8d34 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -375,6 +375,7 @@ class CYCLES_RENDER_PT_sampling_path_guiding(CyclesButtonsPanel, Panel): cscene = scene.cycles layout = self.layout + layout.use_property_split = True layout.use_property_decorate = False layout.active = cscene.use_guiding @@ -385,6 +386,24 @@ class CYCLES_RENDER_PT_sampling_path_guiding(CyclesButtonsPanel, Panel): col.prop(cscene, "use_surface_guiding", text="Surface") col.prop(cscene, "use_volume_guiding", text="Volume", text_ctxt=i18n_contexts.id_id) + if cscene.use_guiding: + # Calculation matches TileManager::compute_render_tile_size and + # Session::get_effective_tile_size + if cscene.tile_size < 128: + tile_size = cscene.tile_size + else: + tile_size = (cscene.tile_size + 128 - 1) & ~(128 - 1) + tile_size = min(tile_size, 8192) + tile_area = tile_size ** 2 + + render_scale = scene.render.resolution_percentage / 100.0 + render_size_x = int(scene.render.resolution_x * render_scale) + render_size_y = int(scene.render.resolution_y * render_scale) + render_area = render_size_x * render_size_y + + if render_area > tile_area and render_size_x <= 8192 and render_size_y <= 8192: + layout.label(text="May work poorly with render tiling", icon='INFO') + class CYCLES_RENDER_PT_sampling_path_guiding_debug(CyclesDebugButtonsPanel, Panel): bl_label = "Debug" @@ -855,11 +874,7 @@ class CYCLES_RENDER_PT_performance_memory(CyclesButtonsPanel, Panel): scene = context.scene cscene = scene.cycles - col = layout.column() - col.prop(cscene, "use_auto_tile") - sub = col.column() - sub.active = cscene.use_auto_tile - sub.prop(cscene, "tile_size") + layout.prop(cscene, "tile_size") class CYCLES_RENDER_PT_performance_acceleration_structure(CyclesButtonsPanel, Panel): diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py index fa50423083c..e211caed40f 100644 --- a/intern/cycles/blender/addon/version_update.py +++ b/intern/cycles/blender/addon/version_update.py @@ -101,7 +101,7 @@ def do_versions(self): library_versions.setdefault(library.version, []).append(library) # Do versioning per library, since they might have different versions. - max_need_versioning = (4, 2, 52) + max_need_versioning = (5, 0, 77) for version, libraries in library_versions.items(): if version > max_need_versioning: continue @@ -111,6 +111,13 @@ def do_versions(self): if scene.library not in libraries: continue + # Auto tiling is always enabled now + if version <= (5, 0, 77): + cscene = scene.cycles + if not cscene.use_auto_tile: + cscene.use_auto_tile = True + cscene.tile_size = 8192 + # Clamp Direct/Indirect separation in 270 if version <= (2, 70, 0): cscene = scene.cycles diff --git a/intern/cycles/blender/sync.cpp b/intern/cycles/blender/sync.cpp index 6a297b8f821..8353e1f5dc2 100644 --- a/intern/cycles/blender/sync.cpp +++ b/intern/cycles/blender/sync.cpp @@ -1005,7 +1005,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine &b_engine, BlenderSession::print_render_stats; if (background) { - params.use_auto_tile = RNA_boolean_get(&cscene, "use_auto_tile"); + params.use_auto_tile = true; params.tile_size = max(get_int(cscene, "tile_size"), 8); } else { diff --git a/scripts/modules/rna_manual_reference.py b/scripts/modules/rna_manual_reference.py index 8d8ae4e17cc..a90ce1f4672 100644 --- a/scripts/modules/rna_manual_reference.py +++ b/scripts/modules/rna_manual_reference.py @@ -820,7 +820,6 @@ url_manual_mapping = ( ("bpy.types.cyclesrendersettings.film_exposure*", "render/cycles/render_settings/film.html#bpy-types-cyclesrendersettings-film-exposure"), ("bpy.types.cyclesrendersettings.sample_offset*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-sample-offset"), ("bpy.types.cyclesrendersettings.texture_limit*", "render/cycles/render_settings/simplify.html#bpy-types-cyclesrendersettings-texture-limit"), - ("bpy.types.cyclesrendersettings.use_auto_tile*", "render/cycles/render_settings/performance.html#bpy-types-cyclesrendersettings-use-auto-tile"), ("bpy.types.cyclesrendersettings.use_denoising*", "render/cycles/render_settings/sampling.html#bpy-types-cyclesrendersettings-use-denoising"), ("bpy.types.editbone.bbone_custom_handle_start*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-custom-handle-start"), ("bpy.types.editbone.bbone_handle_use_ease_end*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-handle-use-ease-end"), diff --git a/scripts/presets/cycles/performance/Default.py b/scripts/presets/cycles/performance/Default.py index 5c25f23eca0..1f6b457f491 100644 --- a/scripts/presets/cycles/performance/Default.py +++ b/scripts/presets/cycles/performance/Default.py @@ -8,5 +8,4 @@ cycles.debug_use_spatial_splits = False cycles.debug_use_compact_bvh = False cycles.debug_use_hair_bvh = True cycles.debug_bvh_time_steps = 0 -cycles.use_auto_tile = True cycles.tile_size = 2048 diff --git a/scripts/presets/cycles/performance/Faster_Render.py b/scripts/presets/cycles/performance/Faster_Render.py index 7f1e3c68f1f..71ae3d85e31 100644 --- a/scripts/presets/cycles/performance/Faster_Render.py +++ b/scripts/presets/cycles/performance/Faster_Render.py @@ -8,5 +8,4 @@ cycles.debug_use_spatial_splits = True cycles.debug_use_compact_bvh = False cycles.debug_use_hair_bvh = True cycles.debug_bvh_time_steps = 2 -cycles.use_auto_tile = True cycles.tile_size = 2048 diff --git a/scripts/presets/cycles/performance/Lower_Memory.py b/scripts/presets/cycles/performance/Lower_Memory.py index d1a45f1888d..abccb5e1242 100644 --- a/scripts/presets/cycles/performance/Lower_Memory.py +++ b/scripts/presets/cycles/performance/Lower_Memory.py @@ -8,5 +8,4 @@ cycles.debug_use_spatial_splits = False cycles.debug_use_compact_bvh = True cycles.debug_use_hair_bvh = True cycles.debug_bvh_time_steps = 0 -cycles.use_auto_tile = True cycles.tile_size = 512 diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 9c01021436a..21503dc708c 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -27,7 +27,7 @@ /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 76 +#define BLENDER_FILE_SUBVERSION 77 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and cancel loading the file, showing a warning to