Типы портов компонентов

GrossGrade

Раздел:  GrossGrade для эксперта >

Типы портов компонентов

Предыдущая страница Вернуться в раздел выше Следующая страница

 

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

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"data" - данные изображения

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"color" - одиночный цвет

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"coloring function" - цветокорректирующая функция

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

 

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

 

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"weight" - вес

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"weighting function" - взвешивающая функция

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"boolean" - логическое выражение (истина / ложь)

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"integer" - целое число

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"enum" - перечисление

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"set" - множество

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"string" - текстовая строка

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

 

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

 

Нажмите, чтобы развернуть/свернуть вложенный блок"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), параметр передается только при наступлении события, и его значение сохраняется в принимающем компоненте сколько угодно долго до наступления следующего события, даже если посылающий компонент был удален.

 

Нажмите, чтобы развернуть/свернуть вложенный блок"instancing" - дублирование и синхронизация экземпляров

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

 

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

 

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

 

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

 

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

 

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

 

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

 


Смотрите также

Компоненты

Стандартные порты