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 <brecht@blender.org>

Pull Request: https://projects.blender.org/blender/blender/pulls/146031
This commit is contained in:
Sergey Sharybin
2025-09-10 17:15:07 +02:00
committed by Sergey Sharybin
parent 5afaa1c4bd
commit 3ef2df3893
10 changed files with 33 additions and 16 deletions

View File

@@ -106,7 +106,6 @@ class AddPresetPerformance(AddPresetBase, Operator):
"cycles.debug_use_compact_bvh", "cycles.debug_use_compact_bvh",
"cycles.debug_use_hair_bvh", "cycles.debug_use_hair_bvh",
"cycles.debug_bvh_time_steps", "cycles.debug_bvh_time_steps",
"cycles.use_auto_tile",
"cycles.tile_size", "cycles.tile_size",
] ]

View File

@@ -1046,14 +1046,14 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
) )
use_auto_tile: BoolProperty( use_auto_tile: BoolProperty(
name="Use Tiling", name="Auto Tile",
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", description="Deprecated, tiling is always enabled",
default=True, default=True,
) )
tile_size: IntProperty( tile_size: IntProperty(
name="Tile Size", name="Tile Size",
default=2048, 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, min=8, max=8192,
) )

View File

@@ -375,6 +375,7 @@ class CYCLES_RENDER_PT_sampling_path_guiding(CyclesButtonsPanel, Panel):
cscene = scene.cycles cscene = scene.cycles
layout = self.layout layout = self.layout
layout.use_property_split = True layout.use_property_split = True
layout.use_property_decorate = False layout.use_property_decorate = False
layout.active = cscene.use_guiding 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_surface_guiding", text="Surface")
col.prop(cscene, "use_volume_guiding", text="Volume", text_ctxt=i18n_contexts.id_id) 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): class CYCLES_RENDER_PT_sampling_path_guiding_debug(CyclesDebugButtonsPanel, Panel):
bl_label = "Debug" bl_label = "Debug"
@@ -855,11 +874,7 @@ class CYCLES_RENDER_PT_performance_memory(CyclesButtonsPanel, Panel):
scene = context.scene scene = context.scene
cscene = scene.cycles cscene = scene.cycles
col = layout.column() layout.prop(cscene, "tile_size")
col.prop(cscene, "use_auto_tile")
sub = col.column()
sub.active = cscene.use_auto_tile
sub.prop(cscene, "tile_size")
class CYCLES_RENDER_PT_performance_acceleration_structure(CyclesButtonsPanel, Panel): class CYCLES_RENDER_PT_performance_acceleration_structure(CyclesButtonsPanel, Panel):

View File

@@ -101,7 +101,7 @@ def do_versions(self):
library_versions.setdefault(library.version, []).append(library) library_versions.setdefault(library.version, []).append(library)
# Do versioning per library, since they might have different versions. # 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(): for version, libraries in library_versions.items():
if version > max_need_versioning: if version > max_need_versioning:
continue continue
@@ -111,6 +111,13 @@ def do_versions(self):
if scene.library not in libraries: if scene.library not in libraries:
continue 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 # Clamp Direct/Indirect separation in 270
if version <= (2, 70, 0): if version <= (2, 70, 0):
cscene = scene.cycles cscene = scene.cycles

View File

@@ -1005,7 +1005,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine &b_engine,
BlenderSession::print_render_stats; BlenderSession::print_render_stats;
if (background) { 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); params.tile_size = max(get_int(cscene, "tile_size"), 8);
} }
else { else {

View File

@@ -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.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.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.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.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_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"), ("bpy.types.editbone.bbone_handle_use_ease_end*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-handle-use-ease-end"),

View File

@@ -8,5 +8,4 @@ cycles.debug_use_spatial_splits = False
cycles.debug_use_compact_bvh = False cycles.debug_use_compact_bvh = False
cycles.debug_use_hair_bvh = True cycles.debug_use_hair_bvh = True
cycles.debug_bvh_time_steps = 0 cycles.debug_bvh_time_steps = 0
cycles.use_auto_tile = True
cycles.tile_size = 2048 cycles.tile_size = 2048

View File

@@ -8,5 +8,4 @@ cycles.debug_use_spatial_splits = True
cycles.debug_use_compact_bvh = False cycles.debug_use_compact_bvh = False
cycles.debug_use_hair_bvh = True cycles.debug_use_hair_bvh = True
cycles.debug_bvh_time_steps = 2 cycles.debug_bvh_time_steps = 2
cycles.use_auto_tile = True
cycles.tile_size = 2048 cycles.tile_size = 2048

View File

@@ -8,5 +8,4 @@ cycles.debug_use_spatial_splits = False
cycles.debug_use_compact_bvh = True cycles.debug_use_compact_bvh = True
cycles.debug_use_hair_bvh = True cycles.debug_use_hair_bvh = True
cycles.debug_bvh_time_steps = 0 cycles.debug_bvh_time_steps = 0
cycles.use_auto_tile = True
cycles.tile_size = 512 cycles.tile_size = 512

View File

@@ -27,7 +27,7 @@
/* Blender file format version. */ /* Blender file format version. */
#define BLENDER_FILE_VERSION BLENDER_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 /* 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 * version. Older Blender versions will test this and cancel loading the file, showing a warning to