diff --git a/source/blender/nodes/composite/nodes/node_composite_dilate.cc b/source/blender/nodes/composite/nodes/node_composite_dilate.cc index 0535be74d97..ac92052660c 100644 --- a/source/blender/nodes/composite/nodes/node_composite_dilate.cc +++ b/source/blender/nodes/composite/nodes/node_composite_dilate.cc @@ -21,6 +21,7 @@ #include "COM_algorithm_morphological_distance.hh" #include "COM_algorithm_morphological_distance_feather.hh" +#include "COM_algorithm_smaa.hh" #include "COM_node_operation.hh" #include "COM_utilities.hh" @@ -195,7 +196,7 @@ class DilateErodeOperation : public NodeOperation { input_mask.bind_as_texture(shader, "input_tx"); const Domain domain = compute_domain(); - Result &output_mask = get_result("Mask"); + Result output_mask = context().create_temporary_result(ResultType::Float); output_mask.allocate_texture(domain); output_mask.bind_as_image(shader, "output_img"); @@ -204,6 +205,17 @@ class DilateErodeOperation : public NodeOperation { GPU_shader_unbind(); output_mask.unbind_as_image(); input_mask.unbind_as_texture(); + + /* For configurations where there is little user-specified inset, anti-alias the result for + * smoother edges. */ + Result &output = get_result("Mask"); + if (get_inset() < 2.0f) { + smaa(context(), output_mask, output); + output_mask.release(); + } + else { + output.steal_data(output_mask); + } } /* See the discussion in the implementation for more information. */