Blender
V4.3
source
blender
compositor
operations
COM_CryptomatteOperation.cc
Go to the documentation of this file.
1
/* SPDX-FileCopyrightText: 2018 Blender Authors
2
*
3
* SPDX-License-Identifier: GPL-2.0-or-later */
4
5
#include "
COM_CryptomatteOperation.h
"
6
7
namespace
blender::compositor
{
8
9
CryptomatteOperation::CryptomatteOperation
(
size_t
num_inputs)
10
{
11
inputs
.resize(num_inputs);
12
for
(
size_t
i = 0; i < num_inputs; i++) {
13
this->
add_input_socket
(
DataType::Color
);
14
}
15
this->
add_output_socket
(
DataType::Color
);
16
flags_
.can_be_constant =
true
;
17
}
18
19
void
CryptomatteOperation::init_execution
()
20
{
21
for
(
size_t
i = 0; i <
inputs
.size(); i++) {
22
inputs
[i] = this->
get_input_socket_reader
(i);
23
}
24
}
25
26
void
CryptomatteOperation::add_object_index
(
float
object_index)
27
{
28
if
(object_index != 0.0f) {
29
object_index_.append(object_index);
30
}
31
}
32
33
void
CryptomatteOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
34
const
rcti
&area,
35
Span<MemoryBuffer *>
inputs
)
36
{
37
for
(
BuffersIterator<float>
it =
output
->iterate_with(
inputs
, area); !it.is_end(); ++it) {
38
zero_v4
(it.out);
39
for
(
int
i = 0; i < it.get_num_inputs(); i++) {
40
const
float
*input = it.in(i);
41
if
(i == 0) {
42
/* Write the front-most object as false color for picking. */
43
it.out[0] = input[0];
44
uint32_t
m3hash;
45
::memcpy(&m3hash, &input[0],
sizeof
(
uint32_t
));
46
/* Since the red channel is likely to be out of display range,
47
* setting green and blue gives more meaningful images. */
48
it.out[1] = (
float
(m3hash << 8) /
float
(
UINT32_MAX
));
49
it.out[2] = (
float
(m3hash << 16) /
float
(
UINT32_MAX
));
50
}
51
for
(
const
float
hash
: object_index_) {
52
if
(input[0] ==
hash
) {
53
it.out[3] += input[1];
54
}
55
if
(input[2] ==
hash
) {
56
it.out[3] += input[3];
57
}
58
}
59
}
60
}
61
}
62
63
CryptomattePickOperation::CryptomattePickOperation
()
64
{
65
this->
add_input_socket
(
DataType::Color
);
66
this->
add_input_socket
(
DataType::Value
);
67
this->
add_output_socket
(
DataType::Color
);
68
}
69
70
void
CryptomattePickOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
71
const
rcti
&area,
72
Span<MemoryBuffer *>
inputs
)
73
{
74
for
(
BuffersIterator<float>
it =
output
->iterate_with(
inputs
, area); !it.is_end(); ++it) {
75
const
float
*
color
= it.in(0);
76
copy_v3_v3
(it.out,
color
);
77
it.out[3] = 1.0f;
78
}
79
}
80
81
std::unique_ptr<MetaData>
CryptomattePickOperation::get_meta_data
()
82
{
83
std::unique_ptr<MetaData> meta_data = std::make_unique<MetaData>();
84
meta_data->is_data =
true
;
85
return
meta_data;
86
}
87
88
}
// namespace blender::compositor
copy_v3_v3
MINLINE void copy_v3_v3(float r[3], const float a[3])
Definition
math_vector_inline.c:43
zero_v4
MINLINE void zero_v4(float r[4])
Definition
math_vector_inline.c:29
COM_CryptomatteOperation.h
output
#define output
blender::Span
Definition
BLI_span.hh:75
blender::compositor::CryptomatteOperation::add_object_index
void add_object_index(float object_index)
Definition
COM_CryptomatteOperation.cc:26
blender::compositor::CryptomatteOperation::inputs
Vector< SocketReader * > inputs
Definition
COM_CryptomatteOperation.h:16
blender::compositor::CryptomatteOperation::CryptomatteOperation
CryptomatteOperation(size_t num_inputs=6)
Definition
COM_CryptomatteOperation.cc:9
blender::compositor::CryptomatteOperation::init_execution
void init_execution() override
Definition
COM_CryptomatteOperation.cc:19
blender::compositor::CryptomatteOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_CryptomatteOperation.cc:33
blender::compositor::CryptomattePickOperation::get_meta_data
std::unique_ptr< MetaData > get_meta_data() override
Definition
COM_CryptomatteOperation.cc:81
blender::compositor::CryptomattePickOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_CryptomatteOperation.cc:70
blender::compositor::CryptomattePickOperation::CryptomattePickOperation
CryptomattePickOperation()
Definition
COM_CryptomatteOperation.cc:63
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::get_input_socket_reader
SocketReader * get_input_socket_reader(unsigned int index)
Definition
COM_NodeOperation.cc:180
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
float
draw_view in_light_buf[] float
Definition
eevee_light_culling_info.hh:42
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::color
Definition
BLI_color_mix.hh:21
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
hash
#define hash
Definition
noise.c:154
uint32_t
unsigned int uint32_t
Definition
stdint.h:80
UINT32_MAX
#define UINT32_MAX
Definition
stdint.h:142
rcti
Definition
DNA_vec_types.h:68
Generated on Sat Oct 4 2025 05:32:23 for Blender by
doxygen
1.14.0