Tomato Cycles: use actual number of tiles for viewport rendering
Before this debug_tile_size was used as a size of tile, which became hidden property since tile-based rendering implementation and couldn't have been controlled. This resolves the issue with single thread used for viewport rendering in some cases. Also it makes possible to control tiles for CUDA viewport rendering, which still behaves much faster when using the single tile. Also fixed issue with minimal tile size which was used to calculate divider of final resolution to be used for initial rendering. Now it's a Resolution Divider property in Performance tab. This option could be used to tweak initial resolution of viewport for faster navigation or faster refresh when changing some properties.
This commit is contained in:
@@ -235,18 +235,13 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
||||
default=0.0,
|
||||
)
|
||||
|
||||
cls.debug_tile_size = IntProperty(
|
||||
name="Tile Size",
|
||||
description="",
|
||||
min=1, max=4096,
|
||||
default=1024,
|
||||
)
|
||||
cls.debug_min_size = IntProperty(
|
||||
name="Min Size",
|
||||
description="",
|
||||
min=1, max=4096,
|
||||
default=64,
|
||||
cls.resolution_divider = IntProperty(
|
||||
name="Resolution Divider",
|
||||
description="Start viewport rendering with lower resolutionm which would be real resolution divided by two in power of this value",
|
||||
min=1, max=512,
|
||||
default=4,
|
||||
)
|
||||
|
||||
cls.debug_reset_timeout = FloatProperty(
|
||||
name="Reset timeout",
|
||||
description="",
|
||||
|
||||
@@ -205,9 +205,6 @@ class CyclesRender_PT_performance(CyclesButtonsPanel, Panel):
|
||||
subsub.enabled = not rd.use_border
|
||||
subsub.prop(rd, "use_save_buffers")
|
||||
|
||||
#sub.prop(cscene, "debug_tile_size")
|
||||
#sub.prop(cscene, "debug_min_size")
|
||||
|
||||
col = split.column()
|
||||
|
||||
sub = col.column(align=True)
|
||||
@@ -216,6 +213,8 @@ class CyclesRender_PT_performance(CyclesButtonsPanel, Panel):
|
||||
sub.prop(cscene, "debug_use_spatial_splits")
|
||||
sub.prop(cscene, "use_cache")
|
||||
|
||||
sub.prop(cscene, "resolution_divider")
|
||||
|
||||
|
||||
class CyclesRender_PT_layers(CyclesButtonsPanel, Panel):
|
||||
bl_label = "Layers"
|
||||
|
||||
@@ -347,17 +347,8 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::Use
|
||||
int tile_x = b_engine.tile_x();
|
||||
int tile_y = b_engine.tile_y();
|
||||
|
||||
if(tile_x == 0 || tile_y == 0) {
|
||||
tile_x = get_int(cscene, "debug_tile_size");
|
||||
tile_y = tile_x;
|
||||
|
||||
params.tile_size = make_int2(tile_x, tile_y);
|
||||
params.min_size = get_int(cscene, "debug_min_size");
|
||||
}
|
||||
else {
|
||||
params.tile_size = make_int2(tile_x, tile_y);
|
||||
params.min_size = min(tile_x, tile_y);
|
||||
}
|
||||
params.tile_size = make_int2(tile_x, tile_y);
|
||||
params.resolution = 1 << get_int(cscene, "resolution_divider");
|
||||
|
||||
/* other parameters */
|
||||
params.threads = b_scene.render().threads();
|
||||
@@ -368,7 +359,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::Use
|
||||
|
||||
if(background) {
|
||||
params.progressive = false;
|
||||
params.min_size = INT_MAX;
|
||||
params.resolution = 1;
|
||||
}
|
||||
else
|
||||
params.progressive = true;
|
||||
|
||||
@@ -36,7 +36,7 @@ CCL_NAMESPACE_BEGIN
|
||||
|
||||
Session::Session(const SessionParams& params_)
|
||||
: params(params_),
|
||||
tile_manager(params.progressive, params.samples, params.tile_size, params.min_size,
|
||||
tile_manager(params.progressive, params.samples, params.tile_size, params.resolution,
|
||||
(params.background)? 1: max(params.device.multi_devices.size(), 1))
|
||||
{
|
||||
device_use_gl = ((params.device.type != DEVICE_CPU) && !params.background);
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
bool experimental;
|
||||
int samples;
|
||||
int2 tile_size;
|
||||
int min_size;
|
||||
int resolution;
|
||||
int threads;
|
||||
|
||||
double cancel_timeout;
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
experimental = false;
|
||||
samples = INT_MAX;
|
||||
tile_size = make_int2(64, 64);
|
||||
min_size = 64;
|
||||
resolution = 4;
|
||||
threads = 0;
|
||||
|
||||
cancel_timeout = 0.1;
|
||||
@@ -81,7 +81,7 @@ public:
|
||||
&& progressive == params.progressive
|
||||
&& experimental == params.experimental
|
||||
&& tile_size == params.tile_size
|
||||
&& min_size == params.min_size
|
||||
&& resolution == params.resolution
|
||||
&& threads == params.threads
|
||||
&& cancel_timeout == params.cancel_timeout
|
||||
&& reset_timeout == params.reset_timeout
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
TileManager::TileManager(bool progressive_, int num_samples_, int2 tile_size_, int min_size_, int num_devices_)
|
||||
TileManager::TileManager(bool progressive_, int num_samples_, int2 tile_size_, int resolution_, int num_devices_)
|
||||
{
|
||||
progressive = progressive_;
|
||||
tile_size = tile_size_;
|
||||
min_size = min_size_;
|
||||
resolution = resolution_;
|
||||
num_devices = num_devices_;
|
||||
|
||||
BufferParams buffer_params;
|
||||
@@ -42,19 +42,6 @@ void TileManager::reset(BufferParams& params_, int num_samples_)
|
||||
{
|
||||
params = params_;
|
||||
|
||||
start_resolution = 1;
|
||||
|
||||
int w = params.width, h = params.height;
|
||||
|
||||
if(min_size != INT_MAX) {
|
||||
while(w*h > min_size*min_size) {
|
||||
w = max(1, w/2);
|
||||
h = max(1, h/2);
|
||||
|
||||
start_resolution *= 2;
|
||||
}
|
||||
}
|
||||
|
||||
num_samples = num_samples_;
|
||||
|
||||
state.buffer = BufferParams();
|
||||
@@ -62,7 +49,7 @@ void TileManager::reset(BufferParams& params_, int num_samples_)
|
||||
state.num_tiles = 0;
|
||||
state.num_rendered_tiles = 0;
|
||||
state.num_samples = 0;
|
||||
state.resolution = start_resolution;
|
||||
state.resolution = resolution;
|
||||
state.tiles.clear();
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
list<Tile> tiles;
|
||||
} state;
|
||||
|
||||
TileManager(bool progressive, int num_samples, int2 tile_size, int min_size, int num_devices = 1);
|
||||
TileManager(bool progressive, int num_samples, int2 tile_size, int resolution, int num_devices = 1);
|
||||
~TileManager();
|
||||
|
||||
void reset(BufferParams& params, int num_samples);
|
||||
@@ -72,7 +72,7 @@ protected:
|
||||
bool progressive;
|
||||
int num_samples;
|
||||
int2 tile_size;
|
||||
int min_size;
|
||||
int resolution;
|
||||
int num_devices;
|
||||
|
||||
int start_resolution;
|
||||
|
||||
@@ -2824,13 +2824,21 @@ static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar, int draw
|
||||
|
||||
/* create render engine */
|
||||
if (!rv3d->render_engine) {
|
||||
RenderEngine *engine;
|
||||
|
||||
type = RE_engines_find(scene->r.engine);
|
||||
|
||||
if (!(type->view_update && type->view_draw))
|
||||
return 0;
|
||||
|
||||
rv3d->render_engine = RE_engine_create(type);
|
||||
type->view_update(rv3d->render_engine, C);
|
||||
engine = RE_engine_create(type);
|
||||
|
||||
engine->tile_x = scene->r.xparts;
|
||||
engine->tile_y = scene->r.yparts;
|
||||
|
||||
type->view_update(engine, C);
|
||||
|
||||
rv3d->render_engine = engine;
|
||||
}
|
||||
|
||||
/* setup view matrices */
|
||||
|
||||
Reference in New Issue
Block a user