Component port types

GrossGrade

Topic:  GrossGrade as Expert see it >

Component port types

Previous page Parent topic Next page

 

Каждый порт компонента имеет четко определенный тип. Создать связь между портами двух компонентов возможно, только если эти порты имеют одинаковый тип.

Всего существует несколько типов портов:

 

Click toggle to expand/collapse hidden block"data" - данные обрабатываемого изображения

Передает данные обрабатываемого изображения, включающие сведения о цветовом пространстве / профиле, в котором представлено изображение на текущий момент (в текущем узле обработки). Некоторые компоненты, такие как "ColorspaceConverter", могут изменять текущее цветовое пространство изображения. В этом случае результирующее пространство / профиль (на выходном порте "data") будет отличаться от входного (на входном порте "data"). Кроме того, некоторые компоненты внутри себя могут работать в собственном цветовом пространстве / профиле, делая временный перевод из текущего пространства во внутреннее, а затем обратный перевод в текущее. Такой вариант при разработке серьезных модулей не рекомендуется - это обычно увеличивает длительность обработки и делает недоступным тонкий контроль над параметрами перевода между цветовыми пространствами.

 

Click toggle to expand/collapse hidden block"color" - цвет

Передает значение цвета (координаты точки в цветовом пространстве).

 

Click toggle to expand/collapse hidden block"coloring function" - цветокорректирующая функция

В GrossGrade цветокорректирующая функция является некоей закономерностью, по которой все цвета одного множества (исходного изображения) превращаются в цвета другого множества (результирующего изображения). С другой стороны, можно говорить, что цветокорректирующая функция задает некое искривление цветового пространства, в котором представлено изображение. Т.е. какая-то часть цветов исходного изображения меняет свои значения (координаты цветового пространства) в результирующем изображении. Какая часть цветов меняется, и как именно - определяется цветокорректирующей функцией. По сути цветокорректирующую функцию можно представить как 3D LUT-таблицу с очень большой (бесконечной) размерностью.

 

Вы можете рассматривать цветокорректирующую функцию как саму цветокоррекцию изображения без привязки к конкретному изображению. Т.е. данная цветокоррекция работает с изолированными цветами, а не с изображением, и может быть одинаково применима к любому другому изображению. Передавая цветокорректирующую функцию по связям между компонентами, вы информируете один компонент о том, какая цветокоррекция была произведена другим компонентом.

 

Цветокорректирующая функция не может быть инвертирована, поскольку в общем случае отображение цветов не взаимно-однозначное. Т.е. мы не можем построить некоторую цветокорректирующую функцию, выполняющую обратное преобразование всех цветов после преобразования их прямой цветокорректирующей функцией, поскольку один и тот же результирующий цвет мог быть получен из нескольких различных исходных цветов (см. подробно https://ru.wikipedia.org/wiki/Биекция).

 

Однако в GrossGrade возможна псевдо-инверсия цветокорректирующей функции, что в действительности не соответствует реальной инверсии. Этот процесс по сути является разворотом направлений векторов перемещений (которые задает цветокорректирующая функция) каждой точки цветового пространства. Такое действие можно считать инверсией функции лишь условно, поскольку реальная инверсия теоретически невозможна. Кроме того, по этим принципам в GrossGrade возможна генерация различных цветокорректирующих функций, являющихся промежуточными между псевдо-инвертированной и прямой функцией, а также возможны определенные операции над парами цветокорректирующих функций - векторное сложение, вычитание и т.п.

 

Click toggle to expand/collapse hidden block"weight" - вес

Передает значение веса - по сути это обычная вещественная величина, имеющая неограниченный диапазон. При этом имеется условный "рабочий" диапазон от 0 до 1, где 0 означает отсутствие веса (0%), а 1 означает полный вес (100%). Значения, меньшие 0, или большие 1, интерпретируются в зависимости от области применения веса.

 

Click toggle to expand/collapse hidden block"weighting function" - взвешивающая функция

В GrossGrade взвешивающая функция определяет закономерность, по которой каждому цвету исходного изображения присваивается свой вес - величина, которая может принимать значения в пределах от некоторого минимума (0%) до некоторого максимума (100%).

 

Вы можете рассматривать взвешивающую функцию как некую "маску", которая определяет, какие цвета изображения имеют больший вес и, следовательно, могут быть в большей степени задействованы в дальнейшей цветокоррекции, а какие цвета будут иметь меньший или нулевой вес. Следует подчеркнуть, что взвешивающая функция не привязана к определенному изображению, она работает с изолированными цветами.

 

Click toggle to expand/collapse hidden block"boolean" - логическое выражение (истина / ложь)

Передает логическое выражение, которое может принимать одно из двух значений - "истина" или "ложь".

 

Подходит, например, для определения статуса кнопки-флажка (check box): значение "истина" - флажок установлен, значение "ложь" - флажок снят.

 

Click toggle to expand/collapse hidden block"integer" - целое число

Передает целое число (число без дробной части, которое может принимать положительные, отрицательные значения или ноль).

 

Подходит, например, для определения текущего положения ползунка (slider): крайние положения ползунка соответствуют минимальному и максимальному значению, остальные положения - неким промежуточным значениям, которые могут быть переданы через порт "integer".

 

Click toggle to expand/collapse hidden block"enum" - перечисление

Передает значение перечислимого типа. Перечисление - это тип данных, для которого задан полный список всех возможных значений, которые может принимать переменная данного типа. Например, можно представить некое перечисление "Фигура", которое может принимать следующие три значения: "треугольник", "квадрат", "круг". Тогда через порт "enum" может быть передано конкретное значение перечисления "Фигура", например "квадрат".

 

Подходит, например, для определения статуса группы взаимоисключающих переключателей (radio buttons): передаваемое значение соответствует наименованию активного в данный момент переключателя.

 

Click toggle to expand/collapse hidden block"set" - множество

Передает множество, состоящее из некоторых элементов. Список всех возможных элементов определен (также как для перечисления). Например, можно представить некое множество "Фигуры", элементами которого могут быть: "треугольник", "квадрат", "круг". Тогда через порт "set" может быть передано конкретное множество "Фигуры", включающее элементы "треугольник и квадрат".

 

Подходит, например, для определения статуса группы независимых переключателей (check boxes): передаваемое значение соответствует списку наименований активных в данный момент переключателей.

 

Click toggle to expand/collapse hidden block"string" - текстовая строка

Передает текстовую строку переменной длины.

 

Подходит, например, для передачи значения, введенного в текстовое поле.

 

Click toggle to expand/collapse hidden block"event()" - событие

Оповещает о каком-либо событии. Таким событием может быть, к примеру, нажатие пользователем кнопки.

 

Вместе с оповещением через порт "event()" может передаваться специфическая для конкретного события информация. В таком случае это событие с параметром (или с несколькими параметрами): "event(параметр1 [, параметр2 ...])". Параметр может принадлежать одному из следующих типов данных:

 

color (цвет)

coloring function (цветокорректирующая функция)

weight (вес)

weighting function (взвешивающая функция)

boolean (логическое выражение)

integer (целое число)

enum (перечисление)

set (множество)

string (текстовая строка)

 

Порты типа "event()" могут быть связаны, даже если тип параметра события одного не совпадает с типом параметра события другого. Например, выходной порт "event(color)" компонента "A" может быть связан с входным портом "event(boolean)" компонента "B". Но в таком случае при оповещении о событии параметр игнорируется, и тогда поведение компонента "B" четко не определено (у каждого типа компонента своя определенная реакция), но обычно компонент использует некое (свое) значение по умолчанию.

 

Может возникнуть вопрос: зачем передавать параметр через один порт, к примеру event(integer), вместо того, чтобы использовать одновременно два порта - с типом event и с типом integer? Дело в том, что в случае двух портов значение integer передается постоянно вне зависимости от события. А в случае порта event(integer), параметр передается только при наступлении события, и его значение сохраняется в принимающем компоненте сколько угодно долго до наступления следующего события, даже если посылающий компонент был удален.

 

Click toggle to expand/collapse hidden block"instancing" - дублирование и синхронизация экземпляров

Дублирование (instancing) - это специфическая организация процесса обработки в GrossGrade. При дублировании один и тот же компонент или одна группа компонентов может использоваться несколько раз. При этом каждый экземпляр компонента (или группы компонентов) может иметь свои индивидуальные настройки, заданные пользователем. Количество экземпляров также контролируется пользователем. В зависимости от задуманной вами цели множественные экземпляры могут передавать данные, которые каким-либо образом будут объединяться в последующих узлах графа обработки.

 

Для организации дублирования должен быть задан один или несколько компонентов, которые предполагается многократно дублировать, а также некий отдельный компонент, который будет управлять процессом дублирования. Управлять дублированием могут лишь некоторые компоненты - те, для которых эта роль логически обоснована. Наиболее универсальным компонентом, управляющим дублированием, является компонент "InstancingManager" (единственное предназначение которого и есть управление дублированием). Данный компонент (как и любой другой компонент, управляющий дублированием) имеет выходной порт типа "instancing". Данный порт может быть связан с входными портами "instancing" одного или нескольких компонентов, которые будут участвовать в дублировании (иметь множественные экземпляры). Через компонент "InstancingManager" пользователь может управлять количеством экземпляров и выбирать "текущий" экземпляр - тот, который на данный момент представлен визуальными компонентами. Таким образом, экземпляров может быть много, но подчиненный визуальный компонент может представлять только один экземпляр в одно время. Для представления другого экземпляра, "текущий" экземпляр должен быть переключен в контролирующем компоненте "InstancingManager", после чего пользователь увидит, что все настройки компонента изменились. Каждый экземпляр хранит весь набор настроек компонента (или группы компонентов), и при переключении "текущего" экземпляра компоненты загружают соответствующие сохраненные ранее настройки.

 

Повторяемые (replicable) порты

 

Некоторые порты компонентов являются повторяемыми (replicable). Это значит, что данные порты могут быть продублированы сколько угодно раз. Т.е., из одного такого порта вы можете создать несколько его копий, выполняющих те же задачи.

 

Например, представим себе некий компонент "Заменитель цвета", имеющий следующие входные порты: "Заменяемый цвет" и "Заменяющий цвет" типа "color". Пусть порт "Заменяемый цвет" является повторяемым, тогда вы можете сделать несколько копий этого порта и подать на них несколько разных цветов. В этом случае все поданные цвета будут заменены на "Заменяющий цвет".

 

Добавить экземпляр порта можно двойным кликом мыши на области порта. Удалить экземпляр порта можно двойным кликом мыши на области данного экземпляра порта с зажатой клавишей Shift.

 

Вы можете задавать количество копий повторяемого порта только на этапе построения (build-time). Для задания множественных сущностей на этапе выполнения (run-time) используйте механизмы instancing (например, компонент InstancingManager).

 


See also

Components

Standard ports