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:
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));
}