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:
authorManuel Castilla <manzanillawork@gmail.com>2021-09-19 21:12:53 +0300
committerManuel Castilla <manzanillawork@gmail.com>2021-09-19 22:13:51 +0300
commit276eebb274744d819dcdab8a95770dd7382c0664 (patch)
tree2f1ab6ee7c3b87eb297143c32f4a2c09bd714f0c /source/blender/compositor/nodes
parentf256bfb3e26c32af12c82dbd32d4b3bcfba252f3 (diff)
Compositor: Add OIDN prefiltering option to Denoise node
It's equivalent to the OpenImageDenoise prefiltering option in Cycles. See D12043. Prefilter modes: - None: No prefiltering, use when guiding passes are noise-free. - Fast: Denoise image and guiding passes together. Improves quality when guiding passes are noisy using least amount of extra processing time. - Accurate: Prefilter noisy guiding passes before denoising image. Improves quality when guiding passes are noisy using extra processing time. Reviewed By: #compositing, jbakker, sergey Differential Revision: https://developer.blender.org/D12342
Diffstat (limited to 'source/blender/compositor/nodes')
-rw-r--r--source/blender/compositor/nodes/COM_DenoiseNode.cc30
1 files changed, 28 insertions, 2 deletions
diff --git a/source/blender/compositor/nodes/COM_DenoiseNode.cc b/source/blender/compositor/nodes/COM_DenoiseNode.cc
index e58a9c7ba9a..cc9328414ef 100644
--- a/source/blender/compositor/nodes/COM_DenoiseNode.cc
+++ b/source/blender/compositor/nodes/COM_DenoiseNode.cc
@@ -31,6 +31,12 @@ DenoiseNode::DenoiseNode(bNode *editorNode) : Node(editorNode)
void DenoiseNode::convertToOperations(NodeConverter &converter,
const CompositorContext & /*context*/) const
{
+ if (!COM_is_denoise_supported()) {
+ converter.mapOutputSocket(getOutputSocket(0),
+ converter.addInputProxy(getInputSocket(0), false));
+ return;
+ }
+
bNode *node = this->getbNode();
NodeDenoise *denoise = (NodeDenoise *)node->storage;
@@ -39,8 +45,28 @@ void DenoiseNode::convertToOperations(NodeConverter &converter,
operation->setDenoiseSettings(denoise);
converter.mapInputSocket(getInputSocket(0), operation->getInputSocket(0));
- converter.mapInputSocket(getInputSocket(1), operation->getInputSocket(1));
- converter.mapInputSocket(getInputSocket(2), operation->getInputSocket(2));
+ if (denoise && denoise->prefilter == CMP_NODE_DENOISE_PREFILTER_ACCURATE) {
+ {
+ DenoisePrefilterOperation *normal_prefilter = new DenoisePrefilterOperation(
+ DataType::Vector);
+ normal_prefilter->set_image_name("normal");
+ converter.addOperation(normal_prefilter);
+ converter.mapInputSocket(getInputSocket(1), normal_prefilter->getInputSocket(0));
+ converter.addLink(normal_prefilter->getOutputSocket(), operation->getInputSocket(1));
+ }
+ {
+ DenoisePrefilterOperation *albedo_prefilter = new DenoisePrefilterOperation(DataType::Color);
+ albedo_prefilter->set_image_name("albedo");
+ converter.addOperation(albedo_prefilter);
+ converter.mapInputSocket(getInputSocket(2), albedo_prefilter->getInputSocket(0));
+ converter.addLink(albedo_prefilter->getOutputSocket(), operation->getInputSocket(2));
+ }
+ }
+ else {
+ converter.mapInputSocket(getInputSocket(1), operation->getInputSocket(1));
+ converter.mapInputSocket(getInputSocket(2), operation->getInputSocket(2));
+ }
+
converter.mapOutputSocket(getOutputSocket(0), operation->getOutputSocket(0));
}