[Bf-blender-cvs] [81c0dbdcc8] temp-cycles-denoising: Cycles Denoising: Remove post-processing denoising code from the Render API

Lukas Stockner noreply at git.blender.org
Mon Feb 13 02:05:48 CET 2017


Commit: 81c0dbdcc8861eb79663dba7a36d5cb0592aede0
Author: Lukas Stockner
Date:   Sat Feb 11 22:32:00 2017 +0100
Branches: temp-cycles-denoising
https://developer.blender.org/rB81c0dbdcc8861eb79663dba7a36d5cb0592aede0

Cycles Denoising: Remove post-processing denoising code from the Render API

This reverts commits e001dbbcc479, 94fa941f7f65, e7bf6c67b432, e549000b3914, 58619096a5cd, 3bcafb6dc48d, 0d78ac4199d9, c167e5d72378.

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

M	intern/cycles/blender/addon/__init__.py
M	intern/cycles/blender/addon/engine.py
M	intern/cycles/blender/blender_session.h
M	intern/cycles/device/device_cpu.cpp
M	release/scripts/startup/bl_ui/space_image.py
M	source/blender/blenkernel/BKE_scene.h
M	source/blender/blenkernel/intern/scene.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/render/render_intern.h
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/render/render_opengl.c
M	source/blender/editors/space_image/image_intern.h
M	source/blender/editors/space_image/image_ops.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/render/extern/include/RE_engine.h
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/envmap.c
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/pipeline.c
M	source/blender/windowmanager/WM_api.h

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

diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py
index 4593f590b0..0a9d7c5775 100644
--- a/intern/cycles/blender/addon/__init__.py
+++ b/intern/cycles/blender/addon/__init__.py
@@ -107,7 +107,7 @@ class CyclesRender(bpy.types.RenderEngine):
         return engine.can_postprocess(result)
 
     def postprocess(self, scene, result):
-        engine.postprocess(self, scene, result);
+        engine.postprocess(scene, result);
 
 
 def engine_exit():
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index a56b0df26c..4b32b53ac5 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -194,5 +194,5 @@ def system_info():
 def can_postprocess(result):
     return False
 
-def postprocess(engine, scene, result):
+def postprocess(scene, result):
     return
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index 7c302f3bfa..d2e8cdd4cc 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -57,9 +57,6 @@ public:
 	void reset_session(BL::BlendData& b_data,
 	                   BL::Scene& b_scene);
 
-	/* denoising */
-	void denoise(BL::RenderResult& b_rr);
-
 	/* offline render */
 	void render();
 
diff --git a/intern/cycles/device/device_cpu.cpp b/intern/cycles/device/device_cpu.cpp
index dc2fc49123..de98f616fd 100644
--- a/intern/cycles/device/device_cpu.cpp
+++ b/intern/cycles/device/device_cpu.cpp
@@ -576,7 +576,6 @@ public:
 				denoising.tiles_from_rendertiles(rtiles);
 
 				denoising.init_from_devicetask(task);
-
 				denoising.functions.construct_transform = function_bind(&CPUDevice::denoising_construct_transform, this, &denoising);
 				denoising.functions.reconstruct = function_bind(&CPUDevice::denoising_reconstruct, this, _1, _2, _3, _4, _5, &denoising);
 				denoising.functions.divide_shadow = function_bind(&CPUDevice::denoising_divide_shadow, this, _1, _2, _3, _4, _5, &denoising);
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index c35a86edb4..04b4cef951 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -1231,26 +1231,6 @@ class IMAGE_PT_tools_grease_pencil_edit(GreasePencilStrokeEditPanel, Panel):
 class IMAGE_PT_tools_grease_pencil_sculpt(GreasePencilStrokeSculptPanel, Panel):
     bl_space_type = 'IMAGE_EDITOR'
 
-class IMAGE_PT_tools_post_process(Panel):
-    bl_space_type = 'IMAGE_EDITOR'
-    bl_region_type = 'UI'
-    bl_label = "Post-processing"
-
-    @classmethod
-    def poll(cls, context):
-        rd = context.scene.render
-        sima = context.space_data
-
-        return (sima.image.type in {'MULTILAYER', 'RENDER_RESULT'}) and rd.use_result_postprocess
-
-    def draw(self, context):
-        layout = self.layout
-
-        sima = context.space_data
-        ima = sima.image
-
-        layout.operator("image.postprocess");
-
 
 # Grease Pencil drawing brushes
 class IMAGE_PT_tools_grease_pencil_brush(GreasePencilBrushPanel, Panel):
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 3e4444e91d..d2152950bf 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -140,7 +140,6 @@ bool BKE_scene_use_new_shading_nodes(const struct Scene *scene);
 bool BKE_scene_use_shading_nodes_custom(struct Scene *scene);
 bool BKE_scene_use_world_space_shading(struct Scene *scene);
 bool BKE_scene_use_spherical_stereo(struct Scene *scene);
-bool BKE_scene_use_result_postprocess(struct Scene *scene);
 
 bool BKE_scene_uses_blender_internal(const struct Scene *scene);
 bool BKE_scene_uses_blender_game(const struct Scene *scene);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index d9439328c8..c4eef7f229 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -2214,12 +2214,6 @@ bool BKE_scene_use_spherical_stereo(Scene *scene)
 	return (type && type->flag & RE_USE_SPHERICAL_STEREO);
 }
 
-bool BKE_scene_use_result_postprocess(Scene *scene)
-{
-	RenderEngineType *type = RE_engines_find(scene->r.engine);
-	return (type && type->flag & RE_USE_RESULT_POSTPROCESS);
-}
-
 bool BKE_scene_uses_blender_internal(const  Scene *scene)
 {
 	return STREQ(scene->r.engine, RE_engine_id_BLENDER_RENDER);
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 550a7b5292..4db1c845c2 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -3492,8 +3492,7 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
 		Scene *scene;
 		/* another scene can be rendering too, for example via compositor */
 		for (scene = CTX_data_main(C)->scene.first; scene; scene = scene->id.next) {
-			if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER) ||
-			    WM_jobs_test(wm, scene, WM_JOB_TYPE_POSTPROCESS)) {
+			if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER)) {
 				handle_event = B_STOPRENDER;
 				icon = ICON_SCENE;
 				break;
diff --git a/source/blender/editors/render/render_intern.h b/source/blender/editors/render/render_intern.h
index 0edfb3eb60..fb07b03c28 100644
--- a/source/blender/editors/render/render_intern.h
+++ b/source/blender/editors/render/render_intern.h
@@ -102,9 +102,5 @@ void RENDER_OT_view_cancel(struct wmOperatorType *ot);
 /* render_opengl.c */
 void RENDER_OT_opengl(struct wmOperatorType *ot);
 
-/* space_image */
-void image_buffer_rect_update(struct Scene *scene, struct RenderResult *rr, struct ImBuf *ibuf, struct ImageUser *iuser, volatile rcti *renrect, const char *viewname,
-	struct ColorManagedViewSettings *view_settings, struct ColorManagedDisplaySettings *display_settings);
-
 #endif /* __RENDER_INTERN_H__ */
 
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 11bebf9874..7c580bbd89 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -119,6 +119,133 @@ typedef struct RenderJob {
 	bool interface_locked;
 } RenderJob;
 
+/* called inside thread! */
+static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibuf, ImageUser *iuser, volatile rcti *renrect, const char *viewname)
+{
+	Scene *scene = rj->scene;
+	const float *rectf = NULL;
+	int ymin, ymax, xmin, xmax;
+	int rymin, rxmin;
+	int linear_stride, linear_offset_x, linear_offset_y;
+	ColorManagedViewSettings *view_settings;
+	ColorManagedDisplaySettings *display_settings;
+
+	/* Exception for exr tiles -- display buffer conversion happens here,
+	 * NOT in the color management pipeline.
+	 */
+	if (ibuf->userflags & IB_DISPLAY_BUFFER_INVALID &&
+	    rr->do_exr_tile == false)
+	{
+		/* The whole image buffer it so be color managed again anyway. */
+		return;
+	}
+
+	/* if renrect argument, we only refresh scanlines */
+	if (renrect) {
+		/* if (ymax == recty), rendering of layer is ready, we should not draw, other things happen... */
+		if (rr->renlay == NULL || renrect->ymax >= rr->recty)
+			return;
+
+		/* xmin here is first subrect x coord, xmax defines subrect width */
+		xmin = renrect->xmin + rr->crop;
+		xmax = renrect->xmax - xmin + rr->crop;
+		if (xmax < 2)
+			return;
+
+		ymin = renrect->ymin + rr->crop;
+		ymax = renrect->ymax - ymin + rr->crop;
+		if (ymax < 2)
+			return;
+		renrect->ymin = renrect->ymax;
+
+	}
+	else {
+		xmin = ymin = rr->crop;
+		xmax = rr->rectx - 2 * rr->crop;
+		ymax = rr->recty - 2 * rr->crop;
+	}
+
+	/* xmin ymin is in tile coords. transform to ibuf */
+	rxmin = rr->tilerect.xmin + xmin;
+	if (rxmin >= ibuf->x) return;
+	rymin = rr->tilerect.ymin + ymin;
+	if (rymin >= ibuf->y) return;
+
+	if (rxmin + xmax > ibuf->x)
+		xmax = ibuf->x - rxmin;
+	if (rymin + ymax > ibuf->y)
+		ymax = ibuf->y - rymin;
+
+	if (xmax < 1 || ymax < 1) return;
+
+	/* The thing here is, the logic below (which was default behavior
+	 * of how rectf is acquiring since forever) gives float buffer for
+	 * composite output only. This buffer can not be used for other
+	 * passes obviously.
+	 *
+	 * We might try finding corresponding for pass buffer in render result
+	 * (which is actually missing when rendering with Cycles, who only
+	 * writes all the passes when the tile is finished) or use float
+	 * buffer from image buffer as reference, which is easier to use and
+	 * contains all the data we need anyway.
+	 *                                              - sergey -
+	 */
+	/* TODO(sergey): Need to check has_combined here? */
+	if (iuser->pass == 0) {
+		RenderView *rv;
+		const int view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname);
+		rv = RE_RenderViewGetById(rr, view_id);
+
+		/* find current float rect for display, first case is after composite... still weak */
+		if (rv->rectf)
+			rectf = rv->rectf;
+		else {
+			if (rv->rect32) {
+				/* special case, currently only happens with sequencer rendering,
+				 * which updates the whole frame, so we can only mark display buffer
+				 * as invalid here (sergey)
+				 */
+				ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID;
+				return;
+			}
+			else {
+				if (rr->renlay == NULL) return;
+				rectf = RE_RenderLayerGetPass(rr->renlay, RE_PASSNAME_COMBINED, viewname);
+			}
+		}
+		if (rectf == NULL) return;
+
+		rectf += 4 * (rr->rectx * ymin + xmin);
+		linear_stride = rr->rectx;
+		linear_offset_x = rxmin;
+		linear_offset_y = rymin;
+	}
+	else {
+		rectf = ibuf->rect_float;
+		linear_stride = ibuf->x;
+		linear_offset_x = 0;
+		linear_offset_y = 0;
+	}
+
+	if (rr->do_exr_tile) {
+		/* We don't support changing color management settings during rendering
+		 * when using Save Buffers option.
+		 */
+		view_settings = &rj->view_settings;
+		display_settings = &rj->display_settings;
+	}
+	else {
+		view_settings = &scene->view_settings;
+		display_settings = &scene->display_settings;
+	}
+
+	IMB_partial_display_buffer_update(ibuf, rectf, NULL,
+	                                  linear_stride, linear_offs

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list