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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-11 15:37:45 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-11 15:37:45 +0300
commit3f8e26370925c94e07f0bbdd51cddad6601fa125 (patch)
tree4a26576894a2f5d65fe56c1ea6c5a024a9a62099 /intern/cycles/device
parent9ec944bbab7a5ba75a526387f8eab52af7f6405e (diff)
parentc10f5d15c25cbc5ee319835c90d5d2a4dda53497 (diff)
Merge branch 'blender2.7'
Diffstat (limited to 'intern/cycles/device')
-rw-r--r--intern/cycles/device/device_denoising.cpp10
-rw-r--r--intern/cycles/device/device_task.h31
2 files changed, 32 insertions, 9 deletions
diff --git a/intern/cycles/device/device_denoising.cpp b/intern/cycles/device/device_denoising.cpp
index 61e0ba47ab8..1bb144ef85a 100644
--- a/intern/cycles/device/device_denoising.cpp
+++ b/intern/cycles/device/device_denoising.cpp
@@ -27,13 +27,13 @@ DenoisingTask::DenoisingTask(Device *device, const DeviceTask &task)
buffer(device),
device(device)
{
- radius = task.denoising_radius;
- nlm_k_2 = powf(2.0f, lerp(-5.0f, 3.0f, task.denoising_strength));
- if(task.denoising_relative_pca) {
- pca_threshold = -powf(10.0f, lerp(-8.0f, 0.0f, task.denoising_feature_strength));
+ radius = task.denoising.radius;
+ nlm_k_2 = powf(2.0f, lerp(-5.0f, 3.0f, task.denoising.strength));
+ if(task.denoising.relative_pca) {
+ pca_threshold = -powf(10.0f, lerp(-8.0f, 0.0f, task.denoising.feature_strength));
}
else {
- pca_threshold = powf(10.0f, lerp(-5.0f, 3.0f, task.denoising_feature_strength));
+ pca_threshold = powf(10.0f, lerp(-5.0f, 3.0f, task.denoising.feature_strength));
}
render_buffer.frame_stride = task.frame_stride;
diff --git a/intern/cycles/device/device_task.h b/intern/cycles/device/device_task.h
index 2871bc5761a..f1fd4246868 100644
--- a/intern/cycles/device/device_task.h
+++ b/intern/cycles/device/device_task.h
@@ -32,6 +32,32 @@ class RenderBuffers;
class RenderTile;
class Tile;
+class DenoiseParams {
+public:
+ /* Pixel radius for neighbouring pixels to take into account. */
+ int radius;
+ /* Controls neighbor pixel weighting for the denoising filter. */
+ float strength;
+ /* Preserve more or less detail based on feature passes. */
+ float feature_strength;
+ /* When removing pixels that don't carry information, use a relative threshold instead of an absolute one. */
+ bool relative_pca;
+ /* How many frames before and after the current center frame are included. */
+ int neighbor_frames;
+ /* Clamp the input to the range of +-1e8. Should be enough for any legitimate data. */
+ bool clamp_input;
+
+ DenoiseParams()
+ {
+ radius = 8;
+ strength = 0.5f;
+ feature_strength = 0.5f;
+ relative_pca = false;
+ neighbor_frames = 2;
+ clamp_input = true;
+ }
+};
+
class DeviceTask : public Task {
public:
typedef enum { RENDER, FILM_CONVERT, SHADER } Type;
@@ -68,10 +94,7 @@ public:
function<void(RenderTile*, Device*)> map_neighbor_tiles;
function<void(RenderTile*, Device*)> unmap_neighbor_tiles;
- int denoising_radius;
- float denoising_strength;
- float denoising_feature_strength;
- bool denoising_relative_pca;
+ DenoiseParams denoising;
bool denoising_from_render;
vector<int> denoising_frames;