[Bf-blender-cvs] [9d482455080] cycles-x: Cycles X: Convert DenoiseParams to a "lite" Node

Sergey Sharybin noreply at git.blender.org
Wed Sep 15 19:37:00 CEST 2021


Commit: 9d4824550807c1d373022370d7b45217b02aec02
Author: Sergey Sharybin
Date:   Wed Sep 15 09:11:17 2021 +0200
Branches: cycles-x
https://developer.blender.org/rB9d4824550807c1d373022370d7b45217b02aec02

Cycles X: Convert DenoiseParams to a "lite" Node

It is not supposed to be a node of a scene graph, but this change
allows to simplify serialization of the denoising parameters.

The goal is to be able to easily (de)serialize denoiser parameters
to/from image metadata, so that processing of the files can happen
outside of the scene graph (for example, on-disk tile buffer and
animation denoising).

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

M	intern/cycles/device/device_denoise.cpp
M	intern/cycles/device/device_denoise.h

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

diff --git a/intern/cycles/device/device_denoise.cpp b/intern/cycles/device/device_denoise.cpp
index d4845ba7bdf..aea7868f65d 100644
--- a/intern/cycles/device/device_denoise.cpp
+++ b/intern/cycles/device/device_denoise.cpp
@@ -35,4 +35,54 @@ const char *denoiserTypeToHumanReadable(DenoiserType type)
   return "UNKNOWN";
 }
 
+const NodeEnum *DenoiseParams::get_type_enum()
+{
+  static NodeEnum type_enum;
+
+  if (type_enum.empty()) {
+    type_enum.insert("optix", DENOISER_OPTIX);
+    type_enum.insert("openimageio", DENOISER_OPENIMAGEDENOISE);
+  }
+
+  return &type_enum;
+}
+
+const NodeEnum *DenoiseParams::get_prefilter_enum()
+{
+  static NodeEnum prefilter_enum;
+
+  if (prefilter_enum.empty()) {
+    prefilter_enum.insert("none", DENOISER_PREFILTER_NONE);
+    prefilter_enum.insert("fast", DENOISER_PREFILTER_FAST);
+    prefilter_enum.insert("accurate", DENOISER_PREFILTER_ACCURATE);
+  }
+
+  return &prefilter_enum;
+}
+
+NODE_DEFINE(DenoiseParams)
+{
+  NodeType *type = NodeType::add("denoise_params", create);
+
+  const NodeEnum *type_enum = get_type_enum();
+  const NodeEnum *prefilter_enum = get_prefilter_enum();
+
+  SOCKET_BOOLEAN(use, "Use", false);
+
+  SOCKET_ENUM(type, "Type", *type_enum, DENOISER_OPENIMAGEDENOISE);
+
+  SOCKET_INT(start_sample, "Start Sample", 0);
+
+  SOCKET_BOOLEAN(use_pass_albedo, "Use Pass Albedo", true);
+  SOCKET_BOOLEAN(use_pass_normal, "Use Pass Normal", false);
+
+  SOCKET_ENUM(prefilter, "Prefilter", *prefilter_enum, DENOISER_PREFILTER_FAST);
+
+  return type;
+}
+
+DenoiseParams::DenoiseParams() : Node(get_node_type())
+{
+}
+
 CCL_NAMESPACE_END
diff --git a/intern/cycles/device/device_denoise.h b/intern/cycles/device/device_denoise.h
index 078efc5ee27..494ff940276 100644
--- a/intern/cycles/device/device_denoise.h
+++ b/intern/cycles/device/device_denoise.h
@@ -17,6 +17,7 @@
 #pragma once
 
 #include "device/device_memory.h"
+#include "graph/node.h"
 #include "render/buffers.h"
 
 CCL_NAMESPACE_BEGIN
@@ -51,8 +52,11 @@ enum DenoiserPrefilter {
   DENOISER_PREFILTER_NUM,
 };
 
-class DenoiseParams {
+/* NOTE: Is not a real scene node. Using Node API for ease of (de)serialization. */
+class DenoiseParams : public Node {
  public:
+  NODE_DECLARE
+
   /* Apply denoiser to image. */
   bool use = false;
 
@@ -70,7 +74,10 @@ class DenoiseParams {
 
   DenoiserPrefilter prefilter = DENOISER_PREFILTER_FAST;
 
-  DenoiseParams() = default;
+  static const NodeEnum *get_type_enum();
+  static const NodeEnum *get_prefilter_enum();
+
+  DenoiseParams();
 
   bool modified(const DenoiseParams &other) const
   {



More information about the Bf-blender-cvs mailing list