Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/cycles/blender/addon/properties.py6
-rw-r--r--intern/cycles/blender/addon/ui.py5
-rw-r--r--intern/cycles/blender/blender_session.cpp1
-rw-r--r--intern/cycles/blender/blender_sync.cpp1
-rw-r--r--intern/cycles/render/session.cpp21
-rw-r--r--intern/cycles/render/session.h12
6 files changed, 37 insertions, 9 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index c60881f9351..d66a1f70c48 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -569,6 +569,12 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
default=64,
subtype='PIXEL'
)
+ preview_denoising_start_sample: IntProperty(
+ name="Start Denoising",
+ description="Sample to start denoising the preview at",
+ min=0, max=(1 << 24),
+ default=1,
+ )
debug_reset_timeout: FloatProperty(
name="Reset timeout",
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 3efd2a0c209..ed9e3a4c9cf 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -710,6 +710,11 @@ class CYCLES_RENDER_PT_performance_viewport(CyclesButtonsPanel, Panel):
col.prop(rd, "preview_pixel_size", text="Pixel Size")
col.prop(cscene, "preview_start_resolution", text="Start Pixels")
+ if show_optix_denoising(context):
+ sub = col.row(align=True)
+ sub.active = cscene.preview_denoising != 'NONE'
+ sub.prop(cscene, "preview_denoising_start_sample", text="Denoising Start Sample")
+
class CYCLES_RENDER_PT_filter(CyclesButtonsPanel, Panel):
bl_label = "Filter"
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 388af80a79a..5cfb1200c7c 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -849,6 +849,7 @@ void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
/* increase samples, but never decrease */
session->set_samples(session_params.samples);
+ session->set_denoising_start_sample(session_params.denoising_start_sample);
session->set_pause(session_pause);
/* copy recalc flags, outside of mutex so we can decide to do the real
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index bfa3df1b295..50442c6ebdc 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -832,6 +832,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine &b_engine,
/* other parameters */
params.start_resolution = get_int(cscene, "preview_start_resolution");
+ params.denoising_start_sample = get_int(cscene, "preview_denoising_start_sample");
params.pixel_size = b_engine.get_preview_pixel_size(b_scene);
/* other parameters */
diff --git a/intern/cycles/render/session.cpp b/intern/cycles/render/session.cpp
index acf9ca68889..ae0a2cf863a 100644
--- a/intern/cycles/render/session.cpp
+++ b/intern/cycles/render/session.cpp
@@ -908,9 +908,6 @@ void Session::set_samples(int samples)
params.samples = samples;
tile_manager.set_samples(samples);
- {
- thread_scoped_lock pause_lock(pause_mutex);
- }
pause_cond.notify_all();
}
}
@@ -946,6 +943,15 @@ void Session::set_denoising(bool denoising, bool optix_denoising)
tile_manager.schedule_denoising = denoising && !buffers;
}
+void Session::set_denoising_start_sample(int sample)
+{
+ if (sample != params.denoising_start_sample) {
+ params.denoising_start_sample = sample;
+
+ pause_cond.notify_all();
+ }
+}
+
void Session::wait()
{
if (session_thread) {
@@ -1110,8 +1116,8 @@ void Session::denoise()
return;
}
- /* It can happen that denoising was already enabled, but the scene still needs an update. */
- if (scene->film->need_update || !scene->film->denoising_data_offset) {
+ /* Do not denoise viewport until the sample at which denoising should start is reached. */
+ if (!params.background && tile_manager.state.sample < params.denoising_start_sample) {
return;
}
@@ -1122,6 +1128,11 @@ void Session::denoise()
return;
}
+ /* It can happen that denoising was already enabled, but the scene still needs an update. */
+ if (scene->film->need_update || !scene->film->denoising_data_offset) {
+ return;
+ }
+
/* Add separate denoising task. */
DeviceTask task(DeviceTask::DENOISE);
diff --git a/intern/cycles/render/session.h b/intern/cycles/render/session.h
index 3ef2b70879a..40ec3979afd 100644
--- a/intern/cycles/render/session.h
+++ b/intern/cycles/render/session.h
@@ -53,6 +53,7 @@ class SessionParams {
int2 tile_size;
TileOrder tile_order;
int start_resolution;
+ int denoising_start_sample;
int pixel_size;
int threads;
@@ -85,6 +86,7 @@ class SessionParams {
samples = 1024;
tile_size = make_int2(64, 64);
start_resolution = INT_MAX;
+ denoising_start_sample = 0;
pixel_size = 1;
threads = 0;
@@ -109,9 +111,10 @@ class SessionParams {
bool modified(const SessionParams &params)
{
return !(device == params.device && background == params.background &&
- progressive_refine == params.progressive_refine
- /* && samples == params.samples */
- && progressive == params.progressive && experimental == params.experimental &&
+ progressive_refine == params.progressive_refine &&
+ /* samples == params.samples && denoising_start_sample ==
+ params.denoising_start_sample && */
+ progressive == params.progressive && experimental == params.experimental &&
tile_size == params.tile_size && start_resolution == params.start_resolution &&
pixel_size == params.pixel_size && threads == params.threads &&
use_profiling == params.use_profiling &&
@@ -152,9 +155,10 @@ class Session {
bool ready_to_reset();
void reset(BufferParams &params, int samples);
- void set_samples(int samples);
void set_pause(bool pause);
+ void set_samples(int samples);
void set_denoising(bool denoising, bool optix_denoising);
+ void set_denoising_start_sample(int sample);
bool update_scene();
bool load_kernels(bool lock_scene = true);