Realtime Compositor
The Realtime Compositor is a new GPU accelerated compositor introduced in Blender 3.5 and is currently used for viewport compositing. This compositor is currently more limited and not all Compositor Nodes are supported, such nodes are marked with the CPU Compositor Only label along with notes about other limitations. Moreover, MacOS is not supported due to missing support for modern OpenGL.
Данные (data)
Размерность
Ноды композитинга работают с данными, которые являются либо изображением, либо безразмерным единым значением. К примеру, нода Levels выводит единое значение, в то время как нода Render Layers выводит изображение. Входы нод, которые ожидают единое значение, присваивают значение «по умолчанию», если даётся изображение, они полностью игнорируют его, например, нода Transform ожидает единые значения для своих входов и будет присваивать значения «по умолчанию», если на эти входы были переданы изображения. Значения «по умолчанию» – это те, которые считаются тождественными и, таким образом, не оказывают влияния на вывод, поэтому для ноды Transform входы «X», «Y» и «Угол» будут иметь значение по умолчанию, равное нулю, в то время как вход «Масштаб» будет иметь значение «по умолчанию», равное единице. С другой стороны, если входам ноды, ожидающим изображение, дано единое значение, будет предполагаться, что это значение покроет всё пространство композиции. Например, нода Filter ожидает, что её вход «Коэффициент» будет изображением, но если дано единое значение, оно будет присваиваться одинаково для всех пикселей.
Тип (type)
Существуют три типа данных, которые хранятся в форматах половинной точности:
- Нецелое (float)
Число с плавающей точкой со знаком. Целочисленные данные также хранятся как числа с плавающей точкой, поскольку целочисленного типа не существует.
- Вектор (vector)
4D вектор. Хотя он и является четырёхмерным, он может иметь разные интерпретации в зависимости от ноды, которая его использует. Его можно рассматривать как двумерный (2D) вектор с двумя последними компонентами, которые игнорируются, к примеру, вход Vector ноды Displace рассматривается как 2D вектор. Его можно рассматривать как 3D вектор с последним компонентом, например, вход Vector ноды Seperate XYZ рассматривается как 3D вектор. Его можно рассматривать как два последовательных 2D вектора. Например, предполагается, что проход скорости, как и ожидается от ноды Vector Blur, имеет 2D предыдущую скорость в компонентах X и Y вектора и 2D следующую скорость в компонентах Z и W вектора.
- Цвет (color)
Четырехмерный (4D) вектор, хранящий красный, зелёный, синий и альфа каналы цвета. Цвет имеет свободную форму и не соответствует определённому цветовому пространству или модели хранения альфа-канала, вместо этого соответствующие ноды будут иметь настройки для управления представлением их вывода, и ноды существуют для преобразования между различными представлениями.
Неявное преобразование
В случае, если на вход ноды подаются данные типа, отличного от его собственного – выполняются следующие неявные преобразования:
Источник (source) |
Цель (target) |
Преобразование (conversion) |
---|---|---|
Нецелое (float) |
Вектор (vector) |
f => Vector(f, f, f, 0) |
Нецелое (float) |
Цвет (color) |
f => Color(f, f, f, 1) |
Вектор (vector) |
Нецелое (float) |
(x, y, z, w) => Среднее(x, y, z) |
Вектор (vector) |
Цвет (color) |
(x, y, z, w) => Color(x, y, z, 1) |
Цвет (color) |
Нецелое (float) |
(r, g, b, a) => Среднее(r, g, b) |
Цвет (color) |
Вектор (vector) |
(r, g, b, a) => Vector(r, g, b, 0) |
В следующем примере демонстрируется неявное преобразование между типом color и типом float, поскольку нода Math ожидает входные данные float.
Композиционное пространство
Домен изображения
Компо́зитор разработан таким образом, чтобы обеспечить возможность компоновки в бесконечном пространстве композитинга. Следовательно, изображения представлены не только посре́дством своего размера, но и своей трансформацией в этом пространстве, подобно тому, как 3D-объекты имеют свои трансформации. Идентичная трансформация представляет собой изображение, центрированное в пространстве. Прямоугольная область, занимаемая изображением в этом пространстве, определяемая его трансформацией и размером, называется доменом изображения. На рисунке ниже показаны домены двух примеров изображений.
Изображения можно преобразовывать с помощью таких нод, как Transform, Translate и Rotate.
Домен операций
Compositor Nodes operate on a specific rectangular area of the compositing space called the Operation Domain. The nodes only consider the area of the input images that overlap the operation domain and ignores the rest of the images. If an input image doesn’t completely overlap the operation domain, the rest of the operation domain for that input will be assumed to be a zero value, a zero vector, or a transparent zero color depending on the type. This behavior can be changed to an extent, see the section about Wrapping below.
Например, рисунок ниже иллюстрирует случай, где домен операций ноды изображён большой синей областью, а областью входного изображения является маленькая красная. В этом случае входное изображение не полностью перекрывает область операций, поэтому остальная часть синей области для этого входного изображения предполагается равной нулю.
Предыдущая иллюстрация представляет собой реальный пример, в котором используется нода Alpha Over для наложения небольшого логотипа на изображение, как показано на рисунке ниже. В этом случае область операций охватывает всю область просмотра – как будет показано позже, но логотип охватывает только небольшую её область, поэтому предполагается, что остальная область имеет нулевой прозрачный цвет, что удобно для использования в нашем случае.
Интерполяция (interpolation)
If an input image to a node is not perfectly aligned with the operation domain of the node or have a different size in pixels, the node would typically need to do a process called Interpolation, where the input image is read at the exact positions of the pixels of the operation domain. This can be done using different interpolation methods, including Nearest-Neighbor, Bilinear, and Bicubic interpolations. Those interpolation methods are demonstrated in the following Wikipedia gallery. Transformation nodes like the Transform and Rotate nodes include an interpolation option to set how they prefer their output image to be read and interpolated.
Note that the transform nodes don’t do any interpolations themselves, they merely record the preferred interpolation method for the output image and latter nodes that read that image will be the node that does the actual interpolation. It follows that latter transform nodes will overwrite the interpolation methods set by former transform nodes if no interpolation took place in-between.
Оборот (wrapping)
While it was previously stated that areas of the input images that do not overlap the operation domain are assumed to be zero, this is only the default behavior. The alternative behavior is to instruct the compositor to repeat the input image to fill the missing areas along the horizontal direction, vertical direction, or both. This can be set in the Wrap option of the Translate node. Much like the aforementioned interpolation method, the Translate node doesn’t do any wrapping itself, it merely sets the preferred method of filling empty spaces and latter nodes that read the image will be the node that does the actual wrapping.
For instance, the previous Alpha Over example but with Both Axis Wrapping enabled is shown in the figure below.
Определение домена операций
Остаётся вопрос о том, как ноды определяют свою область действия. Различные типы нод могут иметь разные механизмы определения своей области действия. Но, как правило, существуют три класса нод, когда речь идёт о механизме определения области действия, каждый из которых представлен в одном из следующих разделов.
Ноды ввода (input nodes)
Областью операций входных нод, таких как Image, является область с тождественным преобразованием и того же размера, что и их выходные данные, поэтому для ноды Image областью операций будет область, размер которой равен размеру изображения, с тождественным преобразованием.
Ноды вывода (output nodes)
Областью операций нод вывода, таких как Viewer, является область с тождественным преобразованием и того же размера, что и конечный вывод компо́зитора. Для компо́зитинга вьюпорта этот размер будет размером вьюпорта, а для окончательной визуализации компо́зитинга этот размер будет размером визуализации сцены.
Другие ноды (other nodes)
Если на соответствующих страницах документации не указано иное – все остальные ноды используют следующий механизм. Один из входов нод обозначается как «вход домена» ноды, и домен операций ноды идентичен домену этого обозначенного входа. Для многих нод вход домена может быть интуитивно идентифицирован как основной вход ноды, например, входом домена для ноды Filter является вход Image. Но следует отметить некоторые оговорки, которые требуют более глубокого понимания механизма.
Каждый вход в ноду имеет так называемое свойство «приоритета домена», домен операций ноды – это доменный вход не единых значений с наивысшим приоритетом домена. Так, например, нода Filter имеет два входа, приоритет домена входа Image выше, чем у входа Factor, и существует четыре возможных конфигурации:
Оба входа Image и Factor присоединены к изображениям. В этом случае вход Image является доменным входом, поскольку он имеет наивысший приоритет и подсоединён к изображению.
Вход Image подсоединён к изображению, а вход Factor – нет. В этом случае вход Image является доменным входом, поскольку это единственный вход, подключённый к изображению, независимо от его приоритета.
Вход Image не подключён к изображению, а вход Factor – подключён. В этом случае вход Factor является доменным входом, поскольку это единственный вход, подключённый к изображению, независимо от его приоритета.
Ни вход Image, ни вход Factor не подключены к изображениям – в данном случае доменного входа нет, поскольку нода оценивается по единым значениям.
Соображения
Вышеупомянутый механизм определения домена операций имеет ряд последствий, которые необходимо учитывать, поскольку они могут быть нежелательными, каждое из них представлено в одном из следующих разделов.
Отсечение (clipping)
Выход нод будет интуитивно отсечён до домена операций или, скорее, до области доменного входа. Например, если вход переднего плана больше, чем вход фона в ноде Alpha Over, выход будет обрезан до входа фона, поскольку это вход домена, как показано на следующем рисунке.
Нода Alpha Over в настоящее время не поддерживает изменений приоритета домена для своих входов, поэтому в качестве обходного пути можно использовать ноду Mix для достижения желаемого поведения, отметив, что первый вход Image в ноде Mix имеет наивысший приоритет домена, как показано на следующем рисунке.
Pixelation
If the domain input of the node is very large, other inputs will look pixelated. That’s because the resolution of the domain input is the same, while its apparent size is greatly increased, so the number of pixels covered by other inputs is much fewer.
Pixel Space Operations
Nodes operate on their input images in local pixel space irrespective of their transformation in the compositing space. For instance, if an image that is rotated by 90 degrees is blurred along the horizontal direction using the Blur node, the blurring will apparently take place along the vertical direction instead, because the node is applied in the local pixel space of the input.
Вывод (output)
The realtime compositor only supports a single active output target, that is, only one of the Composite nodes, Viewer nodes, or Split Viewer nodes in the node tree will be considered active and the rest will be ignored. In particular, the compositor searches the Active Node Tree Context and falls back to the Root Node Tree Context if no active output was found in the active node tree context. The active node tree context is the node tree of an expanded node group, that is, when the users selects a node group node and edits its underlying tree, while the root node tree context is the top level node tree without any expanded node groups. The compositor searches for the active Composite node, if non was found, it searches for the active Viewer node, be it a Viewer or a Split Viewer node, if non was found, the compositor doesn’t run altogether. Consequently, note that adding a Viewer node will have no effect if there is a Composite node, since the priority is given to Composite nodes.