[Bf-blender-cvs] [b26cc7ce2e5] experimental-build: Squashed commit of D3889

Lukas Stockner noreply at git.blender.org
Fri Jan 25 15:30:39 CET 2019


Commit: b26cc7ce2e58d1ac2837feec66e49909f2a6fdd9
Author: Lukas Stockner
Date:   Fri Jan 25 15:29:57 2019 +0100
Branches: experimental-build
https://developer.blender.org/rBb26cc7ce2e58d1ac2837feec66e49909f2a6fdd9

Squashed commit of D3889

===================================================================

M	intern/cycles/blender/addon/engine.py
M	intern/cycles/blender/blender_python.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_sync.cpp
M	intern/cycles/device/device_cpu.cpp
M	intern/cycles/device/device_cuda.cpp
M	intern/cycles/device/device_denoising.cpp
M	intern/cycles/device/device_denoising.h
M	intern/cycles/device/device_task.h
M	intern/cycles/device/opencl/opencl.h
M	intern/cycles/device/opencl/opencl_base.cpp
M	intern/cycles/kernel/filter/filter_defines.h
M	intern/cycles/kernel/filter/filter_features.h
M	intern/cycles/kernel/filter/filter_features_sse.h
M	intern/cycles/kernel/filter/filter_nlm_cpu.h
M	intern/cycles/kernel/filter/filter_nlm_gpu.h
M	intern/cycles/kernel/filter/filter_prefilter.h
M	intern/cycles/kernel/filter/filter_reconstruction.h
M	intern/cycles/kernel/filter/filter_transform.h
M	intern/cycles/kernel/filter/filter_transform_gpu.h
M	intern/cycles/kernel/filter/filter_transform_sse.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/kernels/cpu/filter_cpu.h
M	intern/cycles/kernel/kernels/cpu/filter_cpu_impl.h
M	intern/cycles/kernel/kernels/cuda/filter.cu
M	intern/cycles/kernel/kernels/opencl/filter.cl
M	intern/cycles/render/CMakeLists.txt
M	intern/cycles/render/buffers.cpp
M	intern/cycles/render/buffers.h
A	intern/cycles/render/denoising.cpp
A	intern/cycles/render/denoising.h
M	intern/cycles/render/film.cpp
M	intern/cycles/render/film.h
M	intern/cycles/render/session.cpp
M	intern/cycles/render/session.h
M	intern/cycles/util/util_system.cpp
M	intern/cycles/util/util_system.h

===================================================================

diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index 7829e090c98..b8bc74f9e35 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -270,14 +270,11 @@ def register_passes(engine, scene, srl):
         engine.register_pass(scene, srl, "Noisy Image", 4, "RGBA", 'COLOR')
         if crl.denoising_store_passes:
             engine.register_pass(scene, srl, "Denoising Normal",          3, "XYZ", 'VECTOR')
-            engine.register_pass(scene, srl, "Denoising Normal Variance", 3, "XYZ", 'VECTOR')
             engine.register_pass(scene, srl, "Denoising Albedo",          3, "RGB", 'COLOR')
-            engine.register_pass(scene, srl, "Denoising Albedo Variance", 3, "RGB", 'COLOR')
             engine.register_pass(scene, srl, "Denoising Depth",           1, "Z",   'VALUE')
-            engine.register_pass(scene, srl, "Denoising Depth Variance",  1, "Z",   'VALUE')
-            engine.register_pass(scene, srl, "Denoising Shadow A",        3, "XYV", 'VECTOR')
-            engine.register_pass(scene, srl, "Denoising Shadow B",        3, "XYV", 'VECTOR')
-            engine.register_pass(scene, srl, "Denoising Image Variance",  3, "RGB", 'COLOR')
+            engine.register_pass(scene, srl, "Denoising Shadowing",       1, "X",   'VALUE')
+            engine.register_pass(scene, srl, "Denoising Variance",        3, "RGB", 'COLOR')
+            engine.register_pass(scene, srl, "Denoising Intensity",       1, "X",   'VALUE')
             clean_options = ("denoising_diffuse_direct", "denoising_diffuse_indirect",
                              "denoising_glossy_direct", "denoising_glossy_indirect",
                              "denoising_transmission_direct", "denoising_transmission_indirect",
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index bf5c2432bc7..426176d37d0 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -21,6 +21,8 @@
 #include "blender/blender_sync.h"
 #include "blender/blender_session.h"
 
+#include "render/denoising.h"
+
 #include "util/util_debug.h"
 #include "util/util_foreach.h"
 #include "util/util_logging.h"
@@ -618,6 +620,97 @@ static PyObject *opencl_disable_func(PyObject * /*self*/, PyObject * /*value*/)
 }
 #endif
 
+static PyObject *denoise_func(PyObject * /*self*/, PyObject *args, PyObject *keywords)
+{
+	static const char *keyword_list[] = {"in", "out", "device", "threads", "tile_width", "tile_height",
+	                                     "frames", "frameradius", "radius", "strength", "featurestrength",
+	                                     "relativepca", "ldr", "views", "list_devices", "samples", NULL};
+	const char *in_str = NULL, *out_str = NULL, *device_name = NULL, *frames_str = NULL;
+	PyObject *relative_pca = NULL, *ldr = NULL, *views = NULL, *list_devices = NULL;
+	int threads = 0, tile_width = 64, tile_height = -1, frame_radius = 2, radius = 8, samples = 0;
+	float strength = 0.5f, feature_strength = 0.5f;
+
+	if (!PyArg_ParseTupleAndKeywords(args, keywords, "|sssiiisiiffOOOOi", (char**)keyword_list,
+	                                 &in_str, &out_str, &device_name, &threads,
+	                                 &tile_width, &tile_height, &frames_str, &frame_radius,
+	                                 &radius, &strength, &feature_strength, &relative_pca,
+	                                 &ldr, &views, &list_devices, &samples)) {
+		Py_RETURN_FALSE;
+	}
+
+	if(list_devices && PyObject_IsTrue(list_devices)) {
+		vector<DeviceInfo>& devices = Device::available_devices();
+		printf("Devices:\n");
+		foreach(DeviceInfo& info, devices) {
+			printf("    %-10s%s%s\n",
+			       Device::string_from_type(info.type).c_str(),
+			       info.description.c_str(),
+			       (info.display_device)? " (display)": "");
+		}
+
+		Py_RETURN_TRUE;
+	}
+
+	string in = string(in_str? in_str : ""), out = string(out_str? out_str : "");
+
+	if(in.empty() || out.empty()) {
+		fprintf(stderr, "Both input and output name/pattern must be specified!\n");
+		Py_RETURN_FALSE;
+	}
+
+	TaskScheduler::init(threads);
+
+	DeviceType device_type = Device::type_from_string(device_name? device_name : "CPU");
+	vector<DeviceInfo>& devices = Device::available_devices();
+	vector<DeviceInfo> picked_devices;
+	foreach(DeviceInfo& info, devices) {
+		if(device_type == info.type) {
+			picked_devices.push_back(info);
+		}
+	}
+	if(picked_devices.size() == 0) {
+		fprintf(stderr, "Unknown device type!\n");
+		Py_RETURN_FALSE;
+	}
+
+	DeviceInfo device;
+	if(picked_devices.size() == 1) {
+		device = picked_devices[0];
+	}
+	else {
+		device = Device::get_multi_device(picked_devices, 0, true);
+	}
+
+	Stats stats;
+	Profiler profiler;
+	StandaloneDenoiser denoiser(Device::create(device, stats, profiler, true));
+	denoiser.views = views && PyObject_IsTrue(views);
+	denoiser.tile_size = make_int2(tile_width, (tile_height > 0)? tile_height : tile_width);
+	denoiser.samples = samples;
+	denoiser.ldr_out = ldr && PyObject_IsTrue(ldr);
+	denoiser.center_frame = string(frames_str? frames_str : "");
+	denoiser.frame_radius = frame_radius;
+	denoiser.strength = strength;
+	denoiser.feature_strength = feature_strength;
+	denoiser.relative_pca = relative_pca && PyObject_IsTrue(relative_pca);
+	denoiser.radius = radius;
+	denoiser.in_path = in;
+	denoiser.out_path = out;
+	denoiser.passthrough_incomplete = true;
+	denoiser.passthrough_additional = true;
+	denoiser.passthrough_unknown = true;
+
+	if(!denoiser.run_filter()) {
+		fprintf(stderr, "%s\n", denoiser.error.c_str());
+		TaskScheduler::exit();
+		Py_RETURN_FALSE;
+	}
+
+	TaskScheduler::exit();
+
+	Py_RETURN_TRUE;
+}
+
 static PyObject *debug_flags_update_func(PyObject * /*self*/, PyObject *args)
 {
 	PyObject *pyscene;
@@ -778,6 +871,9 @@ static PyMethodDef methods[] = {
 	{"opencl_disable", opencl_disable_func, METH_NOARGS, ""},
 #endif
 
+	/* Standalone denoising */
+	{"denoise", (PyCFunction)denoise_func, METH_VARARGS|METH_KEYWORDS, ""},
+
 	/* Debugging routines */
 	{"debug_flags_update", debug_flags_update_func, METH_VARARGS, ""},
 	{"debug_flags_reset", debug_flags_reset_func, METH_NOARGS, ""},
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index c634926ea9f..aa5a93a2a0e 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -422,15 +422,19 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
 	buffer_params.passes = passes;
 
 	PointerRNA crl = RNA_pointer_get(&b_view_layer.ptr, "cycles");
-	bool use_denoising = get_boolean(crl, "use_denoising");
-	bool denoising_passes = use_denoising || get_boolean(crl, "denoising_store_passes");
+	bool full_denoising = get_boolean(crl, "use_denoising");
+	bool write_denoising_passes = get_boolean(crl, "denoising_store_passes");
 
-	session->tile_manager.schedule_denoising = use_denoising;
-	buffer_params.denoising_data_pass = denoising_passes;
+	bool run_denoising = full_denoising || write_denoising_passes;
+
+	session->tile_manager.schedule_denoising = run_denoising;
+	buffer_params.denoising_data_pass = run_denoising;
 	buffer_params.denoising_clean_pass = (scene->film->denoising_flags & DENOISING_CLEAN_ALL_PASSES);
+	buffer_params.denoising_prefiltered_pass = write_denoising_passes;
 
-	session->params.use_denoising = use_denoising;
-	session->params.denoising_passes = denoising_passes;
+	session->params.run_denoising = run_denoising;
+	session->params.full_denoising = full_denoising;
+	session->params.write_denoising_passes = write_denoising_passes;
 	session->params.denoising_radius = get_int(crl, "denoising_radius");
 	session->params.denoising_strength = get_float(crl, "denoising_strength");
 	session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength");
@@ -438,6 +442,7 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
 
 	scene->film->denoising_data_pass = buffer_params.denoising_data_pass;
 	scene->film->denoising_clean_pass = buffer_params.denoising_clean_pass;
+	scene->film->denoising_prefiltered_pass = buffer_params.denoising_prefiltered_pass;
 	session->params.denoising_radius = get_int(crl, "denoising_radius");
 	session->params.denoising_strength = get_float(crl, "denoising_strength");
 	session->params.denoising_feature_strength = get_float(crl, "denoising_feature_strength");
@@ -508,10 +513,11 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
 			break;
 	}
 
+	BL::RenderResult b_full_rr = b_engine.get_result();
+	string num_aa_samples = string_printf("%d", session->params.samples);
+	render_add_metadata(b_full_rr, "Cycles Samples " + b_rlay_name, num_aa_samples);
 	if(is_single_layer) {
-		BL::RenderResult b_rr = b_engine.get_result();
-		string num_aa_samples = string_printf("%d", session->params.samples);
-		b_rr.stamp_data_add_field("Cycles Samples", num_aa_samples.c_str());
+		render_add_metadata(b_full_rr, "Cycles Samples", num_aa_samples);
 		/* TODO(sergey): Report whether we're doing resumable render
 		 * and also start/end sample if so.
 		 */
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 60192bfa8f8..0a8be11dbad 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -482,7 +482,7 @@ int BlenderSync::get_denoising_pass(BL::RenderPass& b_pass)
 {
 	string name = b_pass.name();
 
-	if(name == "Noisy Image") return DENOISING_PASS_COLOR;
+	if(name == "Noisy Image") return DENOISING_PASS_PREFILTERED_COLOR;
 
 	if(name.substr(0, 10) != "Denoising ") {
 		return -1;
@@ -490,15 +490,12 @@ int BlenderSync::get_denoising_pass(BL::RenderPass& b_pass)
 	name = name.substr(10);
 
 #define MAP_PASS(passname, offset) if(name == passname) return offset;
-	MAP_PASS("Normal", DENOISING_PASS_NORMAL);
-	MAP_PASS("Normal Variance", DENOISING_PASS_NORMAL_VAR);
-	MAP_PASS("Albedo", DENOISING_PASS_ALBEDO);
-	MAP_PASS("Albedo Variance", DENOISING_PASS_ALBEDO_VAR);
-	MAP_PASS("Depth", DENOISING_PASS_DEPTH);
-	MAP_PASS("Depth Variance", DENOISING_PASS_DEPTH_VAR);
-	MAP_PASS("Shadow A", DENOISING_PASS_SHADOW_A);
-	MAP_PASS("Shad

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list