RGB и Unreal Engine
Общие понятия RGB-каналов
RGB (часто RGBA) — это аббревиатура от Red-Green-Blue (Alpha). Что означает 3 канала цветов, смешивание которых приводит к передаче нужного оттенка цвета (Если используется Альфа, то и указание степени прозрачности того или иного элемента).
Каждый канал состоит из значений от 0 до 255. Эти значения являются уровнем канала. Чем выше уровень, тем сильнее в канале цвет. Каждый пиксель текстуры (любого изображения и вашего монитора) отображается в формате RGB — то есть, у каждого пикселя одновременно работают 3 канала цветов — каждый со своим уровнем.
Если мы видим красный пиксель, значит, каналы зеленый и синий имеют уровень, равный 0.
Если зеленый, то красный и синий равны 0.
Если синий, то красный и зеленый равны 0.
Ниже на картинке активен только красный канал, остальные имеют значения, равные нулю:
Стоит отметить, что в движке Unreal Engine 4 значения цветов имеют не 0-255, а от 0 до 1. На самом деле, это сделано для удобства программирования, а по факту уровни каналов все так же имеют значения от 0 до 255, только представлены в рамках 0-1, где 0 = 0, а 1 = 255.
Unreal Engine 4 способен работать со всеми каналами одновременно (передача полноценной цветовой гаммы) и с каждым каналом отдельно.
Ниже на картинке показано, как нода цвета выглядит в движке:
Эта нода не содержит в себе цвет. Это набор из 4-х значений — RGBA-каналов, которые записываются, как числа с плавающей точкой от 0 до 1 каждый. И можно установить в каждый канал свое значение и выдавать его. Цвет — лишь общая сумма этих значений в одном пикселе.
Первый пин из ноды — это сумма трех каналов — RGB.
Второй, третий и четвертый пины — это выходы каждого из каналов соответственно.
Пятый пин — это четвертый канал или Альфа-канал. По задумке и общему представлению, этот канал используется для контроля прозрачности — что должно быть прозрачным, что не должно быть прозрачным, а что — полупрозрачным.
На самом деле, Альфа-канала (как канала прозрачности) не существует. Это все тот же набор цифр от 0 до 1, поэтому этот канал можно заменить свободно любым другим каналом, который предоставит нужные уровни прозрачности (уровни значений от 0 до 1 в нужных пикселях).
Офтоп. Вообще, эта нода является вектором — контейнером, содержащим в себе 4 значения.
Использование каналов в Unreal Engine 4
Обычно в Unreal Engine 4 используется текстура типа TARGA. Она позволяет работать с каждым каналом отдельно.
В PBR* существуют такие карты, как АО, Metallic, Roughness, Specullar и Emissive (Еще куча вариантов, но нам и этого достаточно). Все эти карты используют только значения от 0 до 1 (черно-белые карты). То есть, движку для расчета этих карт достаточно 1-го канала со значениями от 0 до 1.
Например, Metallic может быть либо 0, либо 1 (либо металл, либо не металл). Соотвественно, пиксель может иметь значение 1 (белый цвет в визуальном представлении) или 0 (черный цвет в визуальном представлении).
Для примера есть такая текстура. В RGB-канале (все три канала вместе) отображается след.картина:
Если посмотреть на каждый канал отдельно, то видно, как изменяются текстуры — один канал отвечает за Roughness, второй — за Specular, третий за AO, четвертый — за альфу.
На последней картинке так же отображается шкала цвета в Adobe Photoshop, в которой нельзя указать никакой другой цвет, кроме как градиент белого (от 0 до 255) при редактировании в каком-то одном канале (на картинке редактирование происходит на канале «Альфа»).
Соответственно, текстуру можно использовать теперь для подключения в материал Unreal Engine 4 сразу по трем (или 4) параметрам. Канал «альфа» не обязательно использовать для прозрачности — он так же может быть использован в качестве любой другой текстуры, где требуется указывать значения от 0 до 1 в рамках одного канала.
*PBR — PHYSICALLY BASED RENDERING. Физически корректный рендер (рендер, основанный на физике). Система отображения текстур согласно физическому поведению реального света.
Автор: MrBrooks