Blender
V4.3
source
blender
compositor
operations
COM_DistanceRGBMatteOperation.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2011 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#include "
COM_DistanceRGBMatteOperation.h
"
6
7
namespace
blender::compositor
{
8
9
DistanceRGBMatteOperation::DistanceRGBMatteOperation
()
10
{
11
this->
add_input_socket
(
DataType::Color
);
12
this->
add_input_socket
(
DataType::Color
);
13
this->
add_output_socket
(
DataType::Value
);
14
15
flags_
.can_be_constant =
true
;
16
}
17
18
float
DistanceRGBMatteOperation::calculate_distance
(
const
float
key[4],
const
float
image
[4])
19
{
20
return
len_v3v3
(key,
image
);
21
}
22
23
void
DistanceRGBMatteOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
24
const
rcti
&area,
25
Span<MemoryBuffer *>
inputs
)
26
{
27
for
(
BuffersIterator<float>
it =
output
->iterate_with(
inputs
, area); !it.is_end(); ++it) {
28
const
float
*in_image = it.in(0);
29
const
float
*in_key = it.in(1);
30
31
float
distance
= this->
calculate_distance
(in_key, in_image);
32
const
float
tolerance =
settings_
->t1;
33
const
float
falloff =
settings_
->t2;
34
35
/* Store matte(alpha) value in [0] to go with
36
* COM_SetAlphaMultiplyOperation and the Value output.
37
*/
38
39
/* Make 100% transparent. */
40
if
(
distance
< tolerance) {
41
it.out[0] = 0.0f;
42
}
43
/* In the falloff region, make partially transparent. */
44
else
if
(
distance
< falloff + tolerance) {
45
distance
=
distance
- tolerance;
46
const
float
alpha =
distance
/ falloff;
47
/* Only change if more transparent than before. */
48
if
(alpha < in_image[3]) {
49
it.out[0] = alpha;
50
}
51
else
{
/* Leave as before. */
52
it.out[0] = in_image[3];
53
}
54
}
55
else
{
56
/* Leave as before. */
57
it.out[0] = in_image[3];
58
}
59
}
60
}
61
62
}
// namespace blender::compositor
len_v3v3
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
Definition
math_vector_inline.c:1114
COM_DistanceRGBMatteOperation.h
output
#define output
blender::Span
Definition
BLI_span.hh:75
blender::compositor::DistanceRGBMatteOperation::calculate_distance
virtual float calculate_distance(const float key[4], const float image[4])
Definition
COM_DistanceRGBMatteOperation.cc:18
blender::compositor::DistanceRGBMatteOperation::DistanceRGBMatteOperation
DistanceRGBMatteOperation()
Definition
COM_DistanceRGBMatteOperation.cc:9
blender::compositor::DistanceRGBMatteOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_DistanceRGBMatteOperation.cc:23
blender::compositor::DistanceRGBMatteOperation::settings_
const NodeChroma * settings_
Definition
COM_DistanceRGBMatteOperation.h:17
blender::compositor::MemoryBuffer
a MemoryBuffer contains access to the data
Definition
COM_MemoryBuffer.h:35
blender::compositor::NodeOperation::add_output_socket
void add_output_socket(DataType datatype)
Definition
COM_NodeOperation.cc:102
blender::compositor::NodeOperation::flags_
NodeOperationFlags flags_
Definition
COM_NodeOperation.h:295
blender::compositor::NodeOperation::add_input_socket
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
Definition
COM_NodeOperation.cc:97
image
input_tx image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "preview_img") .compute_source("compositor_compute_preview.glsl") .do_static_compilation(true)
blender::compositor::DataType::Value
@ Value
Value data type.
Definition
COM_defines.h:23
blender::compositor::DataType::Color
@ Color
Color data type.
Definition
COM_defines.h:27
blender::compositor
Definition
COM_JumpFloodingAlgorithm.cc:20
blender::compositor::BuffersIterator
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
Definition
COM_BuffersIterator.h:179
inputs
static blender::bke::bNodeSocketTemplate inputs[]
Definition
node_texture_at.cc:11
distance
float distance(float a, float b)
Definition
node_voronoi.h:34
rcti
Definition
DNA_vec_types.h:68
Generated on Sat Oct 4 2025 05:32:23 for Blender by
doxygen
1.14.0