From 98c4224ff032a746a54cc04b6d9a485620de0f4a Mon Sep 17 00:00:00 2001 From: Aidan Haile Date: Thu, 15 Jul 2021 22:15:47 +0200 Subject: Fix T49944: Compositor ID Mask Anti-Aliasing not working Replaces current ID Mask node Anti-Aliasing operation by SMAA operations with default settings as proposed by Jeroen Bakker. SMAA produces smoother edges. Reviewed By: manzanilla Differential Revision: https://developer.blender.org/D11881 --- source/blender/compositor/nodes/COM_IDMaskNode.cc | 26 +++++++++++++++++----- .../compositor/operations/COM_SMAAOperation.cc | 7 +++--- 2 files changed, 25 insertions(+), 8 deletions(-) (limited to 'source/blender/compositor') diff --git a/source/blender/compositor/nodes/COM_IDMaskNode.cc b/source/blender/compositor/nodes/COM_IDMaskNode.cc index 9798dabd035..b51e79f2dea 100644 --- a/source/blender/compositor/nodes/COM_IDMaskNode.cc +++ b/source/blender/compositor/nodes/COM_IDMaskNode.cc @@ -17,9 +17,9 @@ */ #include "COM_IDMaskNode.h" -#include "COM_AntiAliasOperation.h" #include "COM_ExecutionSystem.h" #include "COM_IDMaskOperation.h" +#include "COM_SMAAOperation.h" namespace blender::compositor { @@ -42,11 +42,27 @@ void IDMaskNode::convertToOperations(NodeConverter &converter, converter.mapOutputSocket(getOutputSocket(0), operation->getOutputSocket(0)); } else { - AntiAliasOperation *antiAliasOperation = new AntiAliasOperation(); - converter.addOperation(antiAliasOperation); + SMAAEdgeDetectionOperation *operation1 = nullptr; - converter.addLink(operation->getOutputSocket(), antiAliasOperation->getInputSocket(0)); - converter.mapOutputSocket(getOutputSocket(0), antiAliasOperation->getOutputSocket(0)); + operation1 = new SMAAEdgeDetectionOperation(); + converter.addOperation(operation1); + + converter.addLink(operation->getOutputSocket(0), operation1->getInputSocket(0)); + + /* Blending Weight Calculation Pixel Shader (Second Pass). */ + SMAABlendingWeightCalculationOperation *operation2 = + new SMAABlendingWeightCalculationOperation(); + converter.addOperation(operation2); + + converter.addLink(operation1->getOutputSocket(), operation2->getInputSocket(0)); + + /* Neighborhood Blending Pixel Shader (Third Pass). */ + SMAANeighborhoodBlendingOperation *operation3 = new SMAANeighborhoodBlendingOperation(); + converter.addOperation(operation3); + + converter.addLink(operation->getOutputSocket(0), operation3->getInputSocket(0)); + converter.addLink(operation2->getOutputSocket(), operation3->getInputSocket(1)); + converter.mapOutputSocket(getOutputSocket(0), operation3->getOutputSocket()); } } diff --git a/source/blender/compositor/operations/COM_SMAAOperation.cc b/source/blender/compositor/operations/COM_SMAAOperation.cc index c3647a39909..3c753591ced 100644 --- a/source/blender/compositor/operations/COM_SMAAOperation.cc +++ b/source/blender/compositor/operations/COM_SMAAOperation.cc @@ -21,6 +21,7 @@ #include "COM_SMAAOperation.h" #include "BLI_math.h" #include "COM_SMAAAreaTexture.h" +#include "BKE_node.h" extern "C" { #include "IMB_colormanagement.h" @@ -166,8 +167,8 @@ SMAAEdgeDetectionOperation::SMAAEdgeDetectionOperation() this->flags.complex = true; this->m_imageReader = nullptr; this->m_valueReader = nullptr; - this->m_threshold = 0.1f; - this->m_contrast_limit = 2.0f; + this->setThreshold(CMP_DEFAULT_SMAA_THRESHOLD); + this->setLocalContrastAdaptationFactor(CMP_DEFAULT_SMAA_CONTRAST_LIMIT); } void SMAAEdgeDetectionOperation::initExecution() @@ -297,7 +298,7 @@ SMAABlendingWeightCalculationOperation::SMAABlendingWeightCalculationOperation() this->addOutputSocket(DataType::Color); this->flags.complex = true; this->m_imageReader = nullptr; - this->m_corner_rounding = 25; + this->setCornerRounding(CMP_DEFAULT_SMAA_CORNER_ROUNDING); } void *SMAABlendingWeightCalculationOperation::initializeTileData(rcti *rect) -- cgit v1.2.3