Академический Документы
Профессиональный Документы
Культура Документы
1
Оглавление
Работа с проектами 11
Редактор Уровня 14
Стандартный интерфейс 14
Панель вкладок 15
Toolbar 15
Вьюпорт 16
Название объекта 16
Поиск параметров 16
Значения по умолчанию 17
Состояние 17
Заблокированные параметры 17
Категории 18
Дополнительные параметры 18
Scene Outliner 18
Объекты и геометрия 19
Манипуляция объектами 25
Интерактивная манипуляция 26
Виджет перемещения 26
Виджет вращения 27
Виджет масштабирования 28
Привязка 30
Свойства привязки 30
2
Шаг, заданный пользователем 31
FBX 33
Content Browser 33
Основы материалов 34
Текстуры 35
Параметры и свойства 35
Меши (модели) 35
Свойства материалов 36
Base Color 37
Roughness 38
Emissive Color 38
Normal 39
Clear Coat 43
Блупринты (Blueprint) 44
Введение в Блупринты 44
Level Blueprint 44
Class Blueprint 44
Создавать интерфейс 45
Редактор Блупринтов 45
Типы Блупринтов 46
Class Blueprint 46
Level Blueprint 46
3
Blueprint Interface 46
Анатомия Блупринтов 47
Компоненты 47
График (EventGraph) 48
Функции (Functions) 48
Переменные(Variables) 48
Родительские классы 49
Отсылка на объекты 52
Добавление событий 53
Blueprint Interface 59
Добавление Функций 60
Редактирование функции 60
Дополнительно 61
Прямые коммуникации 61
Исправление проблем 64
Типы переменных 65
Создание переменных 67
Переименование переменных 68
Параметры переменных 69
Получение 70
Установка 70
Контроль последовательности 83
4
Редактирование переключателей 84
Branch 86
Do N 86
DoOnce 87
FlipFlop 87
For Loop 88
Gate 89
Multi Gate 89
Sequence 90
Работа с UMG 91
Редактор Виджетов 92
График 92
Типы элементов 94
Common 94
Input 95
Panel 96
Primitive 97
Якоря UMG 97
Шрифты 106
5
Шрифты в UMG 110
Состояния 112
Оттенок\отступ 115
Padding 115
Звуки 115
Освещение 116
Настройки AO 120
6
Ускорение процесса просчета 128
Редактирование 136
Визуализация 136
Ограничения 138
Тени 139
Постобработка 142
7
По Гауссу (Gaussian DoF) 147
Реализация 147
Гистограмма 158
CustomDepth 164
Blendables 166
Blendable 167
Блупринт 169
Vignette 172
Звуки 173
8
Sound Cue 174
Реверберация 175
9
Редактирование Behavior Tree 189
Введение 194
10
Работа с проектами
Здесь будет показан весь список ваших проектов, когда хоть один будет создан. Изначально,
тут будет приведен список всех проектов в папке установки.
Двойной клик по иконке открывает проект.
Иконка проекта состоит из .png картинки размером 192х192 пикселей, которая находится в
папке с проектом. Есть возможность назначить горячую клавишу на обновление иконки, что бы
быстро снять скриншот и поставить его на место иконки. Если же вы вручную не предоставите
иконку, то она будет автоматически снята со скриншота, который создается каждый раз, когда вы
выходите из редактора или из проекта.
Что бы найти проект, вы можете ввести текст в поле Filter Projects. Будут показаны все
проекты, содержащие введенное имя.
Так же вы можете нажать Browse и выбрать проект на вашем компьютере. Вам нужно
выбрать .uproject файл.
Автор: Ханин Владимир
11
В Project Tab вы так же можете поставить галочку на Always load last project on startup, что
позволит пропусить окно Project Browser’а и запускать сразу выбранный вами проект.
Что бы вручную задать эту настройку, войдите в настройки редактоа, найдите вкладку
«General» > «Load & Saving» и установите настройку «Load the Most Recently Loaded Project at
Startup».
Создание новых проектов
Вкладка New Project позволяет вам создать новый проект из существующих заготовок. Blank
создает полностью пустой проект.
Всего имеется два типа заготовок: C++ и Blueprint. C++ означают, что логику вашего проекта
вы будете писать на C++. Другой типо означает, что для логики вам будет предоставлен
визуальный скриптовый язык — Blueprint. В процессе разработки можно совмещать два типа.
● Blank — чистый проект без какой-либо логики
● FirstPerson — заготовка под шутеры от первого лица
● Flying — Заготовка под простые «леталки»
● Puzzle — Заготовка для логической игры
● Rolling — Заготовка с катающимся мячиком
● (2D)Side Scroller — Платформер. 2D создает заготовку для 2х-мерного
платформера.
● Third Person — Заготовка с видом от третьего лица
● Top Down — Вид сверху и управлением мышью
● Twin Stick — Заготовка с аркадой видом сверху
● Vehicle — Заготовка для создания авто-симуляторов. Заготовка Vehicle
Advanced создает автомобиль с улучшенной системой подвески
Что бы создать новый проект:
1. Выберете заготовку из списка
2. Установите настройки проекта.
3. Введите название вашего проекта и путь к нему.
4. Нажмите Create
После создания, откроется редактор и запустится стандартный уровень.
Так же проект можно создать через выпадающеее меню во вкладке File > New Project…
Настройки проекта
При создании проекта, у вас имеется возможность установить его начальные настройки
графики и контента. После создания проекта, эти настройки можно изменить в настройках
проекта.
12
Проект будет оптимизирован для ПК или консолей
13
Редактор Unreal Engine 4
В основу редактора Unreal Engine 4 входит редактор уровня. Данный режим доступен по
умолчанию и отображается в качестве самого главного редактора, поэтому изучение его является
неотемлемой частью изучение движка.
Редактор Уровня
14
Панель вкладок находится вверху основного окна и отображает единственную вкладку с
названием открытого уровня. Вкладки остальных окон могут быть помещены на данную панель
для более удобной навигации между разными редакторами. Панель имеет сходство с панелью
вкладок в веб браузере.
Имя вкладок отображают название открытого уровня или редактируемого ассета, в случае,
если вкладка принадлежит другому окну.
Справа на панеле вкладок отображается название проекта, в котором производится работа
в текущий момент.
Toolbar
15
Запускает режим игры в нормальном состоянии. Нажав на стрелочку
рядом, можно установить дополнительные настройки.
Вьюпорт
Поиск параметров
Параметры отображаемые на панели Details можно отфильтровать используя поисковую
строку. Одновременно с тем, как вы вводите текст, параметры объекта автоматически
фильтруются в соответствии с вашим
текстом.
16
поиска, проверьте, чтобы
убедиться, что он чист, если вы не видите свойство, которое вы ищете.
Значения по умолчанию
Когда свойство изменяется на значение, отличное от значения по умолчанию —
отображается индикатор.
Все настройки могут быть легко сброшены в свои значения по умолчанию путём нажатия по
значку
Состояние
Свойства могут быть включены или отключены. Свойство можно изменить только если оно
включено. По умолчанию, все свойства включены до тех пор пока они имеют условие
редактирования. Свойства с условием редактирования полагаются на значение другой
переменной, чтобы определить когда они включены и могут быть изменены или отключены..
В некоторых случаях, изменение условий используется чтобы определить когда свойство
перепишет некоторые другие значение или не окажет никакого эффекта. В других случаях,
определенные свойства могут просто не оказывать влияния пока не встретятся с некоторым
условием. Например, вы можете иметь группу свойств которые относятся к
непрямому(рассеянному) освещению и булевому свойству, которое глобально переключает когда
непрямое(рассеянное) освещение включено или выключено. Каждое свойство в группе, может
быть обусловлено глобальным переключателем, поэтому они включены только тогда когда
используется рассеянное освещение.
Свойство с единичным условием будет отображено в чекбоксе слева поля. Когда чекбок
включен, свойство включено. Когда не включено, свойство отключено и окрашено в серый.
Заблокированные параметры
Свойства объявленные как EditConst, которые не могут быть изменены в редакторе,
отображают свои значения и освещены серым для отображения того, что их нельзя изменить.
Категории
Свойства на панели Display отображаются в категориях. Как правило, это категории —
Rendering, Lighting, Collision и т.д — они определяют как свойство определяются в коде, и
используется в качестве средства организации связанных с ним свойств на группы. Другие
17
категории, которые вы видите на панели Details - Transform, Static Mesh, Materials, Actor, Code
View, Layers — настраиваемые виджеты разработаны, чтобы выставить определенные свойства
или функциональные возможности на видном месте, что упрощает их нахождение и
использование.
Дополнительные параметры
Некоторые свойства объявлены как расширенные и убраны по умолчанию с панели Details.
Категории, которые содержат дополнительные свойства имеют кнопку
. Нажатие на которую отобразит дополнительные свойства.
Scene Outliner
18
Объекты и геометрия
19
лишь формой зоны воздействия триггера на активирующие его объекты —
коробка, капсула, сфера.
Box Trigger
20
Используются для воспроизведения звуков в пространстве. Эти звуки
Ambient могут быть зацикленны либо нет, иметь распространение в пространстве и
Sound усиление/затухание. Все это должно быть задано в звуковом сигнале и не
доступно в самом звуковом объекте.
Декаль — специальный объект, который проецирует материал на
другую поверхность без необходимости использования геометрии. Её
Декали можно использовать, например, для нанесения различных подтеков,
трещин, вмятин или грязи на геометрию, что бы сделать поверхность более
реалистичной и менее повторяющиеся
Прочее
Камера используется для того, что бы отображать сцену на экран. Она
Camera может существовать отдельно и использоваться вместе с инструментом
Actor Matinee, а так же может существовать в качестве компонента внутри других
объектов, например внутри персонажа.
Volume — специальная зона, в которой действуют какие-либо
постоянные правила. Эти правила могут быть как и для игрового процесса
Volume (например нанесение урона персонажу или изменение его типа
перемещения), так и для редактора (обозначать, где просчитывается свет
или навигация для ИИ).
21
Размещение объектов
Каждая карта начинается с пустого ландшафта. Чтобы создать желаемую среду или
заполнить ее, нужно расположить объекты на карте. Это можно сделать двумя разными
способами, оба они с применением Content Browser’а. Результатом обоих способов, создание
объекта определенного класса вызовет так называемый Инстанс объекта. Данный Инстанс
копирует все свойства вызываемого объекта, однако эти свойства могут быть изменены по ходу
игры. Так же данный объект можно будет перемещать после того, как он был вызван.
Добавление объекта в ваш уровень, помимо прочего, автоматически добавляет его в список
Scene Outliner, находящийся на панели по умолчанию расположенной в левом верхнем углу
редактора.
Размещение объектов через Modes
Можно размещать объекты перетаскивая их из окна Modes. Для этого нужно зажать на
нужном объекте и вытащить его прямо во Вьюпорт в то место, где вы хотите разместить объект.
22
● Правым кликом во вьюпорте откройте контекстное меню
Если у вас выбран один или более объект во Вьюпорте, в так же и в Content Browser’е
выбран предмет, вы можете заменять выбранные объекты с нужным предметом вкладкой
Replace Selected Actors with в контекстном меню.
Размещение объектов через Drag&Drop
Вдобавок к вышеизложенному способу, вы так же можете размещать предметы на вашу
карту, перетаскивая их из Content Browser’а на экран уровня в том месте, где вам нужно его
расположить. При этом вид курсора меняется, чтобы вы знали, можно ли этот предмет поместить
на карте.
Если вы перетаскиваете объект в экран 3d-перспективы, там появляется тот самый объект на
месте курсора. Это облегчает размещение предмета
там, где нужно вам.
Виды предметов наиболее часто размещаемые
на карте с помощью Content Browser:
● Blueprints
● Частицы
● СтатикМеши
● Скелетал Меши
23
● Звуки
Простое выделение
Наиболее простой способ выделить объект — нажать на него левой кнопкой мыши во
Вьюпорте. Нажатие на объект отменит ранее выделенные объекты и выделит текущий. Если
зажать Ctrl при нажатии на объект, он будет удален из выделенной группы.
Что бы выделить несколько объектов, нужно зажать Shift и начать выделять.
Этот способ хорош для выделения малого количество объектов или нескольких отдельных,
разбросанных по карте, но он может быть медленным или вовсе бесполезным при выделении
больших количеств объектов.
24
Прямоугольное выделение — быстрый способ выделить или отменить выделение
нескольких объектов на ортографическом экране уровня. Он требует зажатия определенных
клавиш и движения мышкой для создания «коробки». Все объекты, находящиеся в этой
«коробке» будут выделены или наоборот, в зависимости от комбинации нажатых клавиш, сняты с
выделения.
Левая кнопка Выделяет объекты в переделах «коробки». При этом выделение
мыши (далее — ЛКМ) на других объектах снимается.
Shift + ЛКМ Добавляет объекты в «коробке» к уже выделенным объектам.
Снимает выделение с объектов в «коробке». Выделенные
Ctrl + ALT + ЛКМ
объекты вне «коробки» остаются выделенными.
Манипуляция объектами
Каждая из опций манипуляции имеет поля численных значений для осей X, Y и Z. Вы можете
вводить нужные значения непосредственно в эти поля, чтобы настроить выделенные объекты.
25
Когда выделено более одного объекта, и значения свойств различаются, поля будут отображать
совмещенные значения. В таких случаях ввод значения будет отражаться на всех выделенных
объектах.
Поля параметра Rotation (вращение) имеют уникальную возможность использоваться как
слайдеры. Нажимая и перемещая мышь, вы можете как бы крутить значение, увеличивая или
уменьшая его в зависимости от движения мыши.
Поля параметра Scale (масштабирование) могут быть закреплены нажатием на значок .
При закреплении соотношение значений масштаба привязываются друг к другу, что позволяет
менять масштаб и размеры всего объекта пропорционально.
Интерактивная манипуляция
Второй метод манипуляции объектов включает использование визуального
инструмента(Виджета трансформации), отображающегося во Вьюпорте. Пользуясь этим
инструментом вы можете перемещать, вращать и масштабировать объект непосредственно в во
вьюпорте мышью. Этот метод имеет свои плюсы и минусы перед ручной трансформацией.
Несмотря на его максимальную наглядность, он может быть далек от точности, а точность порой
необходима. Сетка перемещения, сетка вращения и сетка масштабирования могут помочь вам
увеличить точность. Возможность привязки к определенным значениям или задание
определенного шага дадут вам более точный контроль над трансформацией.
В основном, виджет трансформации собран из нескольких частей, с определенным
цветовым кодом для каждой из осей.
● красный — ось Х; зеленый — ось Y; синий — ось Z
Виджет может выглядеть по-разному, в зависимости от того, какой тип манипуляции вы
используете. Выбрать вы можете, нажимая соответствующие иконки в панели инструментов в
правом верхнем углу экрана уровня.
В месте пересечения всех трех осей вы видите небольшую белую сферу. При наведении
курсора она становится желтой, показывая, что готова к перемещению. Перетаскивание эктора за
центральную сферу позволяет перемещает его в пространстве свободно, с привязкой к камере,
26
потенциально меняя значения по всем трем осям сразу.
Виджет вращения
Виджет вращения это набор трех разноцветных дуг, каждая из которых относится к
соответстующей оси координат. Когда вы тащите одну из дуг, выбранный объект(ы) вращается
вокруг этой оси. По сути каждая из дуг лежит в плоскости создаваемой двумя из осей ,
следовательно ось перпендикулярны плоскости дуг. Т.е. дуга, лежащая в плоскости XY будет
вращать ваш эктор вокруг оси Z.
Тут так же, при наведении курсора, дуга выделяется желтым.
Когда вы начинаете вращать объект по дуге, вид виджета меняется, показывая лишь одну
активныю дугу в форме окружности, по которой и вращается объект. Угл поворота отображается в
реальном времени.
Виджет масштабирования
27
Этот виджет представляет собой три разноцветных ручки, заканчивающиеся кубами.
Перетаскивая одну из ручек вы меняете размер объект только по одной соответствующей оси.
Вы можете растягивать-стягивать эктор по двум осям одновременно тем же способом, что
использовался в виджете перемещения для перемещения по плоскости.
Вы так же можете масштабировать эктор по всем трем осям, сохраняя тем самым его
оригинальные пропорции. Для этого нужно навести курсор на находящийся в центре куб виджета
и переместить мышь.
28
Как только вы кликните на любом объекте, центральная ось вернется в свое положение по
умолчанию.
Режимы трансформации мира и окружающей среды
При использовании интерактивного метода трансформации, вы можете выбрать отсылку
системы координат, которая вам нужна для трансформации. Это значит, что вы можете изменять
Actor в пространстве всего игрового мира, по его осям, либо изменят эктор по локальным осям
осям его окружающей среды. Это дает вам гораздо большую гибкость изменений и практически
невозможно при задании значений трансформации вручную, как минимум без огромного
комплекса вычислений.
По умолчанию все изменения происходят по осям мира. Чтобы переключиться между этими
двумя системами координат, нажмите иконку глобуса в панели инструментов в правом верхнем
углу. Глобус изменится на куб, что означает, что изменения привязаны только к окружающей
среде.
Чтобы переключиться обратно, нажмите на иконку куба.
Привязка
Каждый из трех инструментов трансформации имеет возможность привязки к числовым
шагам. Это полезно для точного размещения объектов вашего уровня. Привязка может быть
осуществлена 4-мя разными способами:
● сетка перемещения
● сетка вращения
● сетка масштаба
● привязка верщин
29
Привязка перемещения, вращения и масштабирования
Используя одну из сеток привязки, вы можете задать свое значение шага в колонке «user
defined increments»
30
Автор: Ханин Владимир
31
Стандарты контента Unreal Engine 4
В приведенном ниже списке рассмотрены стандарты контента для Unreal Engine.
Хотя ваши личные проекты могут использовать любой стандарт, который вам нравится, любое
содержание, которое вы хотите распространять другим пользователями вручную или через
специализированные магазины (нп. Marketplace) должно следовать этим стандартам.
Static Mesh (3D модели) стандарты
● Формат файла: FBX.
● Масштаб: 1 Unreal юнит = 1 сантиметр.
● Якорная точка (pivot): Должен быть расположен в месте удобном для размещения, как
правило в нижней центральной части объекта.
● Ориентация: Все модели должны быть ориентированны передом в сторону
положительного направления оси X.
● UV (текстурные координаты): Меши могут использовать перекрывающиеся UV части для
максимального использования текстур.
Тем не менее, они также должны иметь отдельный UV-канал, для карт теней, в которых все UV-
части равномерно выстроены без какого-либо дублирования.
UV развертки для карты теней могут быть сгенерированы в пределах Static Mesh редактора, хотя
их создание в 3D-пакете обеспечит дополнительное редактируемость.
● Материалы: Все меши должны иметь материал применяемый к ним.
● Нормали: Если визуальное качество требует использования групп сглаживания, убедитесь
что вы включили их при экспорте из 3D пакета и при импорте в UE4.
● Максимальное число вершин: Для мобильных устройств вы ограничены числом вершин в
65535. На других же платформах таких как ПК, вы ограничены самой платформой и должны
провести соответствующие тесты.
● Коллизии: Везде где это возможно меши должны иметь свои коллизии. Желательно
использование только примитивных моделей коллизий ради оптимизации.
Skeletal Mesh (меши со скелетной анимацией) стандарты
● Формат файла: FBX.
● Скелет: Скелетал меши должны иметь соответствующий им скелет.
● Масштаб: 1 Unreal юнит = 1 сантиметр.
● Якорная точка (pivot): Должен быть расположен в месте удобном для размещения. Для
скелетал мешей как правило прямо между ног.
● Ориентация: Все модели должны быть ориентированны передом в сторону
положительного направления оси X.
● UV (текстурные координаты): Меши могут использовать перекрывающиеся UV части для
максимального использования текстур.
● Материалы: Все меши должны иметь материал применяемый к ним.
● Нормали: Если визуальное качество требует использования групп сглаживания, убедитесь
что вы включили их при экспорте из 3D пакета и при импорте в UE4.
● Максимальное число вершин: Для мобильных устройств вы ограничены числом вершин в
65535. На других же платформах таких как ПК, вы ограничены самой платформой и должны
провести соответствующие тесты.
● Коллизии: Все скелетал меши должны иметь соответствующую им коллизию.
Текстуры
● Форматы:
o .bmp
o .float
o .pcx
o .png
o .psd
o .tga
o .jpg
Автор: Ханин Владимир
32
o .exr
o .dds — Кубмап текстура (32бита/Канал, 8.8.8.8 ARGB 32 bpp, без знака).
o .hdr
● Разрешение:
o Все текстуры должны иметь разрешение кратное двум (32, 64, 1024, 2048 и т.д.). Текстура
не обязательно должна быть квадратной формы, однако размеры все равно должны быть ^2
(например 512х1024).
o Если вы желаете использовать мипмап уровни ваша текстура не должна превышать
разрешение 4096px (4К).
o Имейте ввиду что некоторые графические карты имеют пределы разрешения до 8192px
(8К).
o Epic Games наиболее часто использует текстуры разрешением 2048px.
● Совет:
o Часто бывает полезным хранение маски для ваших текстур в альфа канале.
FBX
FBX это формат файлов разработанный и принадлежащий Autodesk. Он используется для
обеспечения взаимодействия между цифровыми приложения создания контента, таких как
Autodesk MotionBuilder, Autodesk Maya, и Autodesk 3ds Max. Программное обеспечение Autodesk
MotionBuilder поддерживает FBX изначально, в то время как Autodesk Maya и Autodesk 3ds Max
включает FBX плагины.
Unreal Engine имеет поддержку FBX, который позволяет обеспечивать импорт с любого
приложения для создания контента, поддерживающих данный формат.
Content Browser
Content Browser(Контент Браузер) — панель, где хранятся все Ассеты (контент) вашего
проекта, где можно импортировать новые, организовывать, просматривать, открывать и
модифицировать существующие. Так же Контент Браузер позволяет распределять контент по
папкам, для того, что бы удобно работать с ним в процессе создания проекта. Так же позволяет
копировать или перемещать Ассеты между папками.
33
Основы материалов
Материалы — это, пожалуй, один из самых критических аспектов того, как выглядят ваши
объекты на сцене. Этот документ дает возможность быстро понять, как начать создавать ваши
собственные материалы.
Математические выражения и сети
Первая и самая важная вещь, которую нужно знать о материалах это то, что они
сконструированы не через код, а через сеть визуального скриптинга или нодов в Material
Editor (Редакторе материалов). Каждая нода содержит HLSL код для выполнения специфических
задач. Это значит, что создавая материал, вы создаете код путем визуального скрипта.
34
этого правила является тот случай, когда одним из input является одноканальным (скалярный). В
этом случае скалярное значение просто применяется ко всем другим каналам.Например:
Если добавить RGB к скалярному значению 1.0, результат будет выглядеть так:
0.35 + 1.0 = 1.35
0.28 + 1.0 = 1.28
0.77 + 1.0 = 1.77
Текстуры
В случае материалов, текстуры просто представляют вид данных, состоящий из пикселей.
Эти данные могут быть цветом обьекта, то как он блестит, его прозрачность и другое.
Существует способ олдскульного создания Материалов через текстуры, когда применяется цвет к
игровым моделям. Создание текстур таким способом все еще сложно и в настоящее время —
нужно задумываться о том, что текстура, это компонент материала, и то, что конечный результат
вашей текстуры не сопадает с таковым для материала.
Один материал может использоваться для различных текстур, каждая из которых может
быть применена для различных целей. К примеру, простой материал может иметь Base Color
texture, Specular texture, и Карту Нормалей. В добавок это может быть карта свечения или
карта Roughness в альфа канале одной или более этих текстур.
Вы также можете заметить, что один и те же текстуры, использующиеся для различных
целей, различаются только цветом.
Однажды созданная и добавленная в Unreal Editor, тестура преваращается в материал при
помощи нод Material Expression таких как Texture Sample. Вы можете их видеть на картинке выше,
там где показана система материала для грубого деревянного пола. Эти ноды делают ссылку на
текстуру , которая находится за пределами материал редактора, которую можно найти отдельно
в Content Browser . В отличие от других 3Dприложений, здесь нет другого способа хранить
текстуры для материала, кроме вышеуказанного.
Для получения дополнительной информации о текстурах и их создании, пожалуйста
обратитесь к документации Текстур.
Параметры и свойства
Многое из того, что вы можете сделать с материалами, управляется различнымисвойствами,
установленными в самом материале. И, прежде чем вы сможете понастоящему раскрыть
потенциал системы материалов Unreal Engine, полезно просмотреть на
доступные свойства и параметры этой системы. Они представлены ниже
Применение материалов на поверхности
То, каким образом применяются материалы зависит и от типа поверхности.
Меши (модели)
Применение Материала к Мешам (статических, динамических, или скелетных) может
совершаться различными способами. Просто используйте слот «Materials element»,
расположенный в свойства хMesh. Он может быть найден в панели Details, когда вы добавляете
ваш Mesh на уровень, или, щелкнув правой кнопкой мыши на Mesh, выберите Свойства из
контекстного меню. Вы также найдете их в различных редакторах, таких как Static Mesh Editor или
редактор Personal Skeletal Mesh.
35
1. Выберете Mesh, для которого вы хотите применить Материал.
36
Свойства материала нужны для визуализации материала и его отдельных свойств, например
способность отражать окружающую среду или рельеф материала.
Не все свойства обязательно применять и вносить в них изменения, так как они имеют
значения по умолчанию. Например, когда вы создаете светящийся материал, вам может
понадобится только Emissive Color, так как другие свойства не будут иметь значения или будут
недоступны, в зависимости от Shading Model параметра. Из-за этого важно понимать, как должен
выглядеть ваш материал в итоге. Всего существует три самых важных параметра:
Blend Mode — Определяет, как материал смешивается с пикселями позади.
Shading Model — Определяет, как поверхность материала влияет на свет.
Material Domain — Определяет, как будет использоваться материал.
Редактор материалов автоматически отключает неиспользуемые свойства в зависимости от
параметров.
Подробнее о параметрах материалов.
Base Color
37
поверхностей, рекомендуется использовать значение 0 ИЛИ 1. Для грязных, ржавых и т.п
поверхностей возможно потребуется использовать значение между 0 и 1.
Specular
38
Opacity
Аналогично Opacity, однако используется с Masked Blend Mode. Так же отличается от Opacity
тем, что имеет лишь два состояния: Полностью прозрачный или полностью видимый.
Можете использовать Opacity Mask Clip Value для того, что бы отрезать маску для
использования с данным свойством.
Normal
39
Данное свойство использует карту нормалей, которая служит для того, что бы создать
рельеф(Эффект, не реальное выдавливание) для поверхности.
World Position Offset
40
World Displacement и Tessellation Multiplier
World Displacement работает примерно как и WPO, однако использует тесселляцию вместо
обычных вертексов(как WPO). Для использования данного свойства, опция Tessellation должна
быть включена в параметрах материала.
Tessellation Multiplier определяет силу тесселляции и используется для того, что бы добавить
делатей там, где нужно. При использовании с World Displacement значение нужно выставить
больше нуля.
При использовании World Displacement для того, что бы изменить границы объекта, учтите,
что рендер все равно будет использовать оригинальную геометрию, поэтому могут быть
артефакты в тенях.
Subsurface Color
Определяет цвет света, который проходит свозь поверхность. Например для материала
людской кожи, цвет Subsurface должен быть красным, что бы симулировать влияние крови на
свет, проходящий сквось поверхность.
Данное свойство доступно только при Translucent Blend Mode.
41
Ambient Occlusion
42
Clear Coat
Данный эффект хорошо симулирует двуслойный материал, который имеет прозрачный слой
поверх. Например деревянная поверхность покрытая стеклянной плитой для гладгости.
Используется с Clear Coat Shading Model параметром.
Данная модель имеет два свойства:
Clear Coat: сила эффекта. 0 — обычный материал, 1 — Материал м Clear Coat слоем.
Полезно для использования маски.
Clear Coat Roughness: Шерховитость Clear Coat слоя.
43
Блупринты (Blueprint)
Блупринты — это скриптовая система в Unreal Engine 4, которая представляет собой
визуальный интерфейс для создания элементов геймплея. Система очень гибкая и очень мощная,
и позволяет дизайнерам использовать концепцию и почти полный потанциал программирования.
С помощью Блупринтов, разработчики могут создавать такие вещи, как:
● Игровые режимы — Устанавливать правила игры, изменять поведение игры в общем
плане
● Игроки — Назначать игроков, придавать им особые черт и вид.
● Камеры — Создавать виды для обзора и изменять свойства камер в реальном времени
● Управление — Назначать кнопки, для управления персонажем, автомобилем, или
внешнем уровнем
● Вещи — Оружие, подбираемые предметы и прочее
● Окружение — Созание случайно генерированного окружения
Введение в Блупринты
Блупринты являются типом ассетов, которые предоставляют пользователям интуитивную
систему для создания специальных типов объектов, которые вследствие можно поставить на
сцену. Так же Блупринты используются для создания игровой логики уровня или логики уровня,
при этом не написав ни строчки кода, что облегчит написание логики не только программистам,
но и дизайнерам, кто не силен в программировании.
В качестве облегчения перевода и узнаваемости, все типы, кнопки, блоки, переменные и так
далее, будут написаны на Английском языке.
Как работают Блупринты
Блупринты используют встроенную в редактор систему для визуального построения
логических последовательностей. Соединяя блоки, события, функции и переменные, возможно
создать достаточно сложные логические элементы, которые будут создавать геймплей вашей
игры.
Основные типы Блупринтов
Два самых используемых типов блупринтов — Level Blueprint и Class Blueprint.
Level Blueprint
Level Blueprint исполняет такую же роль, как и Kismet в UDK, и имеет почти теже
возможности. Каждый уровень имеет свой Блупринт уровня. Сам Level Blueprint используется для
манипулирования объектами на сцене в процессе игры, так же контролировать Matinee, стриминг
уровней, чекпоинты и остальные системы, которые относятся к уровням. Level Blueprint’ы так же
могут взаимодействовать с Class блупринтами, которые имеются на сцене.
Class Blueprint
44
скрипт для взаимодействия с игроком, проигрывания анимации и звука, открытии дверей и так
далее.
В данном случае, нажатие кнопки активирует событие внутри Блупринта дверей, открывая
их. С тем же успехом можно сделать взаимодействие любых блупринтов, а так же срабатывания
событий не только на игрока, но и на другие объекты или на Level Blueprint. Class Blueprint могут
быть полностью индивидуальными, а значит, для их работы не обязательно воздействовать из вне
и они могут работать и производить какие-либо действия сами по себе.
Что ещё могут делать Blueprint’ы?
Создавать игрового персонажа
45
Создавая любую логику с помощью Блупринтов, вы будете работать с Редактором
Блупринтов. Редакторы бывают различных типов, в зависимости от редактируемого Блупринта.
Основной функционал редактора остается везде(Графики, переменные и т.д.), однако некоторые
Блупринты, в особенности Level Blueprint не имеют своих свойств или компонентов.
Типы Блупринтов
Class Blueprint
Классовый блупринт — ассет, позволяющий создавать функциональные объекты для
вашей сцены, которые могут состоять из какой либо логики или просто набора
объектов(СтатикМеш, источник света, текст, деколь и т.п). Можно так же комбинировать,
создавая сложные объекты, с которыми может взаимодействовать игрок. Данный тип Блупринтов
предназначен для помещения на сцене, как и обычные объекты.
Level Blueprint
46
Придание какой либо логики функциям из Blueprint Interface возможны только внутри
конкретных Блупринтов, где добавлен BI.
Blueprint Macro Library
Blueprint Macro Library — Специальный тип булпринтов, который не несет в себе никакой
посредственной полезности на игру. Данный тип используется для создания
математических последовательностей, которые в последующей работе над
обычными Блупринтами могут быть использованы для ускорения работы. Обратите
внимание, что в Макро нельзя создавать исполняемые последовательности (Например Установить
цвет лампочки), а только операции над переменными.
Макро Блупринты не требуют компиляции. Изменения в Макро Блупринте повлечет
изменения за собой во всех блупринтах, где используется блок данного Макро.
Анатомия Блупринтов
Вся функциональность Блупринтов использует различного рода элементы, которые и
составляют окончательный вариант вашего Блупринта.
Компоненты
Компоненты — объекты, которые могут быть добавлены в Блупринт. Этим объектами могут
быть СтатикМеши, источники света, СкелеталМеши и т.п. Компоненты можно добавть через меню
Components во вкладке с таким же именем. Использовать компоненты в логике блупринта можно
с момощью панели переменных.
Construction Script
47
График (EventGraph)
EventGraph — Самый главный элемент редактора Блупринтов. Это место, где вы строите
логику вашего Блупринта, используя события и функции, соеденяя это все в последовательность
действий.
Функции (Functions)
48
создания Блупринта и написания всей логики внутри него, Блупринт может быть помещен на
сцене как объект.
Родительские классы
Существует несколько типов классовых Блупринтов, которые можно создать. Эти типы
определяют родительские классы (Parent Class). При создании Блупринта с родительским классом,
он автоматически будет наследовать функциональность своего родителя.
Основные родительские классы:
Actor Блупринт, который может быть помещен на сцену как объект.
Pawn Блупринт, в который можно «вселиться» и управлять им.
Блупринт, который соддержит в себе функциональность готового
Character
персонажа. Так же является Pawn’ом
PlayerControll
Блупринт, который отвечает за управление Pawn классом.
er
Блупринт, который отвечает за игру, её правила, очки, а так же остальные
Game Mode
главные классы (Pawn, HUD, Controller).
Несмотря на то, что существует основные родительские классы, существует ещё множество
классов, которые используются менее активно, однако так же могут пригодиться в работе.
Существует возможность создавать Блупринты, которые будут наследоваться от созданных
вами Блупринтов. Таким образом, вы можете создать свой Блупринт с определенным
функционалом, а потом использовать его как родительский класс для придания этой
функциональности другим блупринтам.
Например, вы создаете классовый Блупринт под названием Animals (животные) и создаете в
нем определенную логику, например голод, жажда, энергия и так далее. Создаете
последовательность и функции, которые будет контролировать эти показатели. После чего вы
можете создать Блупринт Dog(собака) с родительским классом Animals, и можете создать
Блупринт Cat (кошка), который так же будет наследоваться от Animals. Таким образом, оба ваших
Блупринта (Cat и Dog) будут иметь общую логику и функциональность, среди которых будут
жажда, голод, энергия и так далее. При этом не нужно будет создавать эту функциональность ещё
раз, она сразу же будет работать за счет родительского класса Animals.
49
Иногда немного трудно решить, какой тип Блупринта выбрать, особенно когда дело
касается Макро библиотеки или Классовых Блупринтов(Class Blueprint). В таком случае стоит
задать себе вопрос:
Могут ли существовать копии(Instances) этого Блупринта на сцене?
Если возможно создание копий(Например телевизор, который может быть включенным или
выключенным, или который можно расстрелять), то, вероятно, наилучшим решением будет
создать Class Blueprint. Если же вы просто хотите создать какую либо функцию, которая поможет
вам сократить время написания скрипта, то лучше использовать Macro Блупринт.
Создание через Content Browser
Что бы создать Блупринт через Content Browser(CB), Вам нужнно:
50
2. В панеле Details нажмите Blueprint/Add Script
3. Выберете путь, где вы хотите сохранить объект, в открывшимся окне.
4. Ваш блупринт теперь появится в Контент Браузере. Нажмите кнопку Save, что бы
сохранить его и завершить создание.
Блупринты, созданные этим способом автоматически будут создаваться с именем. Нажмите
правой клавишей мыши на нем и выберете Rename, что бы переименовать Блупринт.
Каждая карта имеет свой собственный Level Blueprint.
Стандартный Level Blueprint
Каждая игра может может иметь стандартный Level Blueprint для уровней, который можно
назначить в DefaultGame.ini файле конфигурации. Все Блупринты уровней будут созданы,
используя этот класс, позволяя дополнять функционал уровней.
Открытие Level Blueprint
Что бы открыть Блупринт уровня, кликните на Blueprints в Тулбаре уровня, затем выберете
Open Level Blueprint.
51
Отсылка на объекты
В работе над уровневым Блупринтом, часто приходится ссылаться на объекты,
расположенные на сцене. Что бы сослаться на какой либо объект, нужно:
1. Выбрать объект на сцене
Альтернативно:
Для данного способа нужно так расположить окно редактора, что бы был виден при этом и
сам редактор, так и Scene Outliner. Данный способ не очень хорошо подойдет для узких экранов.
52
1. Перетащите из Scene Outliner нужный объект прямо на график Блупринта уровня.
Добавление событий
Существует два способа добавления событий, относящихся к объектам.
1. Выбрать объект на сцене
2. Открыть Редактор Блупринта уровня и кликнуть правой клавишей мыши в месте,
где хотите поместить событие
53
Макро функции
Blueprint Macros, или Macros, это тоже самое, что и свёрнутый график нодов. Они имеют
контакт входа и выхода, соединённые внутренними блоками. Каждая макро функция может иметь
любое количество контактов выполнения или данных, которые видны на макро нодах при
использовании в других блупринтах и графах.
Создание Макро функции
Макросы могут быть созданы в классовых Блупринтах или Блупринтах уровня, тем же
способом, что и функции. Они также могут быть организованы в макробиблиотеки.
Для создания Blueprint Macro внутри классового или уровневого блупринта:
1. На панели My Blueprint кликните по кнопки + в разделе
2. Введите имя вашего макроса.
54
Редактирование макро функции
Когда вы впервые создаёте макрос, новый граф будет содержать лишь входной и выходной
блоки.
55
Входной и выходной блок в графе макроса автоматически обновятся с добавленными
контактами.
Пример на изображении выше, макро функция проверяет счет, на предмет того, достаточен
ли он для победы.
56
В отличие от функций, макросы могут иметь более одного исполняемого контакта (exec), так
что вы можете иметь последовательность выполнения как этот, где различные контакты
исходящего исполнение активируется в зависимости от результатов логики макро функции. Кроме
этого,вы можете иметь макрос без контактов исполнения, а только манипулировать данными, при
условии, что блоки в пределах макроса не являются блоками исполнения (грязными функциями).
Реализация макроса
Есть несколько способов добавить макро функцию в другой график блупринта. Как блоки
функция или пользовательские события, можно добавить несколько копий ноды Макроса на
график логической последовательности вашего класса.
Для того, чтобы добавить макрос, нажмите правой кнопкой мышки на свободном месте на
графике и выберите ваш макрос в появившемся контекстном меню.
Вы также можете вытянуть макро функцию из другого блока, если у него есть
соответствующий контакт и он соответствует одному из тех, что есть в макросе, по типу данных.
57
После того, как макро функция была добавлена на график блупринта, она ведет себя как и
любой другой блок, а значит входные и исходящие контакты могут быть соединены
соответствующим образом. Двойной щелчок по блоку макроса откроет график с логикой самой
функции.
58
Blueprint Interface
59
После создания, Blueprint Interface не будет иметь никаких функций и окно редактора будет
выглядеть примерно так:
Создастся новый график вместе с функцией. Обратите внимание, что график не активный и не
имеет никаких контактов. Всю функциональность функции вы будете добавлять в конкретных
объектах, к которым будет применен
Редактирование функции
Поскольку на данном этапе, функция не имеет никакой функциональности и реализации,
все, что можно сделать, это создать входные и выходные контакты.
60
1. В панели Details, в разделе Input(вход) или Output(выход) нажать кнопку .
Дополнительно
● На каждом контакте можно нажать , что бы удалить контакт.
● Вы можете изменять положение контактов на блоке функции с помощью кнопок и ,
которые можно найти, если раскрыть дополнительные параметры контакта
Прямые коммуникации
61
Здесь мы имеем персонажа и потолочный светильник, и хотим что бы персонаж мог его
отключить.
В этом случае рабочий блупринт это наш персонаж, а целю является блупринт светильника.
Используя прямые взаимодействия можно сказать, что, когда игрок нажимает кнопку, блупринт
потолочного светильника должен выключить свет.
Для этого нам нужно создать открытую переменную внутри нашего блупринта персонажа.
62
По умолчанию переменная установлена как None. Чтобы определить, какой экземпляр
светильника вы хотите изменять, вы должны нажать на кнопку пипетки и выбрать этот объект на
уровне.
Теперь благодаря этой переменной мы точно знаем к какому объекту мы хотим получить
доступ через блупринт.
Использование прямых коммуникаций в функциях
Когда вы работаете с функциями в блупринтах, вы все еще можете использовать прямые
взаимодействия, указав тип целевого блупринта в качестве параметра для этой функции.
При использовании функции, вам нужно будет еще указать, экземпляр объекта к которому
вы хотите обратиться. Это может быть сделано как и выше, с помощью публичной переменной, но
уже подключаемой к специально созданному вами входу функции.
63
Исправление проблем
Наиболее часто ошибка возникает, когда экземпляр объекта не указан вообще в
переменной. Если у вас возникли проблемы при получении доступа к нужному объекту,
убедитесь,
что вы указали, какой именно экземпляр этого объекта вы хотите использовать.
64
Выше вы видите «Access None» исключение. Исключение указывает на ноду, которая
вызывает проблемы. При нажатии откроется блупринт, в котором используется данная нода
Переменные
65
Строчная переменная для хранения
String Пурпурный
небольших буквенных данных
66
2. Введите имя переменной
67
1. Правый клик по контакту на блоке и выбрать Promote to Variable
Переименование переменных
Что бы переименовать переменную:
1. Правый клик по переменной и выбрать Rename в контекстном меню
Параметры переменных
68
Вы можете установить нужные параметры переменной на панеле Details. Некоторые
переменные могут иметь больше параметров.
Variable
Тип переменной, а так же выбор, будет ли переменная массивом или нет
Type
Возможность изменить значение по умолчанию в режиме Defaults или на
Editable
панеле Details в редакторе уровней
Tooltip Добавляет подсказку при наведении
Устанавливает, будет ли переменная приватной и недоступной в наследуемых
Private
блупринтах
Устанавливает категорию, в которой находится переменная. При введении уже
существующей категории, переменная будет помещена под неё. При введении
Category
другого имени, будет создана новая категория. Установка переменной определяет,
где будет расположена переменная на панелях My Blueprint, Defaults и Details
Replicatio
Должна ли переменная реплицироваться между клиентами в сети или нет.
n
Установка и получение значений переменных
69
Alt + Создает
перетянуть Set блок
70
Компоненты
71
Что бы добавить компонент напрямую через Content Browser, можно перетянуть напрямую
нужный контент на панель Components и отпустить. Вы можете добавить Статик и Скелетал мешы,
звуковые композиции и частицы.
Удаление компонентов
Что бы удалить компонент, нажмите правой клавишей мыши по компоненту и выберете
«Detele«.
Манипулирование компонентами
Изначально, все компоненты становятся в положение по умолчанию. Однако они могут быть
перемещены, повернуты и отмаштабированы через панель Details или во Вьюпорте.
Выбирать компоненты можно как через список, так и в самом Вьюпорте.
Автор: Ханин Владимир
72
При перемещении, повороте или маштабировании вы можете включить привязку к
координатам или процентам, нажав Shift. Для работы привязки, необходимо, что бы она была
включена в редакторе уровня. Настройки привязки так же будут те, что и в редакторе уровня.
Вы так же можете манипулировать вашим компонентов вручную через панель Details.
Манипуляция объектом будет так же влиять на все компоненты, родителем которых является
выбранный компонент.
Корневой (ROOT) (компонент не может быть подвергнут манипуляцией, так как он является
основой. Все остальные компаненты могут быть перемещены, повернуты или отмаштабированы.
Ассеты
Что бы назначить ассет на компонент, вам нужно выбрать нужный в Контент Браузере, а так
же выбрать нужный компонент на панеле Components. Откроются детали на панеле Details
Нажмите стрелочку в разделе *Тип Ассета*, что бы привязать выбранный ассет на нужный
компонент.
Вы так же можете назначить ассет через выпадающее меню прямо в разделе назначения.
73
Что бы снять ассет с компонента, откройте выпадающее меню рядом с выбранным ассетом на
панеле Details. Затем нажмите Clear в открывшемся меню.
После того, как ассет будет снят, на иконке ассета будет надпись «None».
74
Когда ассет назначен на компонент, вы можете быстро найти его в Контент Браузере нажав
на кнопку . Окно Content Browser автоматически откроет папку с выбранным ассетом.
Переименование Компонентов
При создании компонента, он будет автоматически назван в зависимости от его типа.
Однако в целях организации, советуется переименовывть компоненты для того, что бы потом не
запутаться в них.
Для переименования компонента выберете его на панеле Components List. На
панеле Details откроются параметры компонента, и в разделе Variable вы сможете поменять имя
компонента(Variable Name)
75
1. Выберете компонент на панеле Components, для которого нужно создать событие.
76
Таким образом вы создадите событие или функцию, которая будет оперировать с выбранным
ранее компонентом.
Не все компоненты имеют события. Так компонент типа Point Light имеет только функции
События(Events)
Events —События, которые определяют начало конкретной логической последовательности.
Они позволяют Блупринту исполнять какие либо действия при выполнении события, например,
при старте игры, при рестарте уровня или получении урона. Events могут быть доступны в
блупринте через Контекстное меню. В одном Блупринте может быть любое количество событий,
однако по одному каждого типа.
Каждое событие может вызывать только одну последовательность. Если вам нужно вызвать
сразу несколько, используйте соответствующие блоки контроля последовательности.
Event Level Reset
Событие Level Reset срабатывает при перезапуске уровня.
● Данное событие доступно только в Level Blueprint
● Событие выполняется на стороне сервера. В одиночных играх клиент является сервером.
Event Actor Begin Overlap
Событие Actor Begin Overlap срабатывает, когда какой либо объект пересекается с данным
блупринтом или объектом, в случае с объектным событием(Чаще используется в Level Blueprint).
77
Для срабатывания данного события, оба объекта должны иметь тип Overlap, а так же
пересекающийся объект иметь активированную опцию Generate Overlap Events .
Когда нужный объект(Player Actor) пересекается с данным блупринтом, к переменной
Counter прибавляется 1.
Коннекторы
Other
Объект, который пересекается с Блупринтом.
Actor
Event Actor End Overlap
Событие Actor End Overlap срабатывает, когда какой либо объект прекращает пересекается с
данным блупринтом или объектом, в случае с объектным событием(Чаще используется в Level
Blueprint).
Для срабатывания данного события, оба объекта должны иметь тип Overlap, а так же
пересекающийся объект иметь активированную опцию Generate Overlap Events.
Когда нужный объект(Player Actor) перестал пересекается с данным блупринтом, этот
объект удаляется
Коннекторы
Other
Объект, который закончил пересекаться с Блупринтом.
Actor
Event Hit
Событие срабатывает, когда какой либо объект ударяет Блупринт.
Для срабатывания данного события, оба объекта должны иметь иметь активированную
опцию Simulation Generates Hit Events.
Коннекторы
My Comp Компонент в исполняемом(текущем) Блупринте, который был ударен
Other Объект, который учавствовал в ударе
Other Comp Компонент в другом Блупринте, который был ударен.
Self Moved —
Hit Location Положение удара в пространстве
Hit Normal Направление удара
Normal Impulse Сила удара
Вся вышеописанная информация. Используйте блок Break, что бы
Hit
разделить на отдельные составляющие.
Event Any Damage
Событие срабатывает, когда приченяется какой-либо урон.
Событие выполняется на стороне сервера. В одиночных играх клиент является сервером.
Коннекторы
Damage Количество получаемого урона
Damage Type Содержит объект с дополнительной информацией об уроне
Объект, ответственный за причиняемый урон. Это может быть Объект,
Instigated By
который выстрелил или который кинул гранату.
Damage Causer Объект, который нанес урон. Например пуля или граната.
Event Point Damage
Событие срабатывает, когда причиняется точечный урон(От пули, удара холодным оружием
и т.д.)
Коннекторы
Damage Количество получаемого урона
Damage Type Содержит объект с дополнительной информацией об уроне
Hit Location Положение удара в пространстве
Hit Normal Направление удара
Hit Component Компонент в исполняемом(текущем) Блупринте, который был ударен
Bone Name Название кости, которая получила урон
Автор: Ханин Владимир
78
Shot from
Направление, откуда пришелся урон
Direction
Объект, ответственный за причиняемый урон. Это может быть Объект,
Instigated By
который выстрелил или который кинул гранату.
Damage
Объект, который нанес урон. Например пуля или граната.
Causer
Event Radial Damage
Событие срабатывает, когда получаемый урон идет от иточника, причиняемого радиальный
урон. Может быть применяно в случае, к примеру, взрыва бомбы.
Коннекторы
Damage
Количество получаемого урона
Received
Damage Type Содержит объект с дополнительной информацией об уроне
Origin Содержит информацию о том, где расположен Урон в пространстве
Instigated By Контроллер(ИИ или игрок), ответственный за причиняемый урон.
Damage
Объект, который нанес урон. Например ракета или граната.
Causer
Вся информация об ударе. Используйте блок Break, что бы разделить на
Hit Info
отдельные составляющие.
Event Actor Begin Cursor Over
Данное событие срабатывает, когда курсор(когда он активен) находится поверх Объекта.
В примере, при наведении курсора, меняется параметр Highlight Инстанса Материала
Dynamic Material Instance на 1
Event Actor End Cursor Over
Данное событие срабатывает, когда курсор(когда он активен) прекращает находиться
поверх Объекта.
Event Begin Play
Событие срабатывает при старте уровня. Так же срабатывает внутри вызанного на сцену
Блупринта. Например при спауне персонажа, внутри Блупринта персонажа вызывается данное
событие.
Event End Play
Событие вызывается, когда объект прекращает существование на сцене.
Коннекторы
End Play Причина, по которой вызванно
Reason событие
Event Tick
Событие вызывается каждый кадр процесса игры.
Коннекторы
Delta Количество времени между
Seconds кадрами
Event Receive Draw HUD
Событие вызывает прорисовку всех элементов интерфейса. Блоки интерфейса(HUD) требуют
наличие этого события в последовательности.
Size X Ширина окна, в котором рендерится картинка
Size Y Высота окна, в котором рендерится картинка
Custom Event
Пользовательское событие, служащее для создания своего события, которое будет
вызываться из другой последовательности или же из другого Блупринта.
Пользовательские события
79
Как и обычные события(Events), пользовательские события имеют выходной исполняемый
коннектор, а так же набор информационных контактов, которые можно добавить, в случае
необходимости. Пользовательские события можно создавать в любых количествах и помещать на
груфик Блупринта. Они так же как и остальные события, определяют начало последовательности,
выполняя последующие функции. Данные события созданы для того, что бы можно было
вызывать их при каких либо обстоятельствах в других последовательностей с помощью вызова
произвольного события (Custom Event Call) или через консольные команды CE или RE.
Пользовательские события предоставляют возможность начать определенную
последовательность с какими-либо свойствами в любом месте вашего графика. Дополнительные
контакты используются для вызова события с нужными параметрами, которые устанавливаются
либо стандартными значениям, либо при вызове события в другой последовательности. Обычно
Пользовательские События используются для взаимодействия одной части Блупринта с другой,
однако они могут быть вызваны даже из совершенно других блупринтов.
Создание Custom Events
1. Кликнуть правой клавишей мыши по графику и выбрать Custom Event в разделе
Events. Или найти через поиск.
80
3. На панеле Details можно определить, будет ли событие относиться ко всем
клиентам при запуске на сервере или нет.
81
Как и обычные события, созданные самостоятельно будут вызывать последовательность
при срабатывании.
Все параметры, которые были установлены, будут сразу доступны ввиде входных контактов,
которые будут переданы на блок события, при вызове.
Решение проблем
Если у вас высвечивается сообщение Warning на собитии, а в логах написано «Unable to find
function with name [название]», вам нужно скомпилировать Блуприинт.
Если вы меняете количество параметров в событии, то все они будут показывать сообщение об
ошибке при компиляции Блупринта.
82
Вы должны перезагрузить все измененные события. Это можно сделать через контекстное меню,
вызываемого правой клавишей мыши по блоку, выбором пункта Refresh Nodes.
Что бы перезагрузить все блоки в графике Блупринта, нажмите File > Refresh All Nodes в меню окна
редактора Блупринтов.
Контроль последовательности
Блоки управления логическими последовательностями позволяют контролировать то, в
какой последовательности вызываются функции. Данные блоки могут делать разветления,
выполнять последовательности определенное количество раз, определять, какие
последовательности будут исполняться раньше других и так далее. Данные блоки можно найти в
разделе Utilities > Flow Control.
Блок Switch (переключатели)
83
исполняемые контакты. Переключатели Enum автоматически генерируют выходные контакты, в то
время как Int, String и Name имеют настраевымые контакты.
Блоки Switch доступны в разделе Utilities > Flow Control > Switches в списке всех
блоков(например контекстное меню графика).
Редактирование переключателей
Как только переключатель добавлен в Блупринт, единственный контакт на выходе —
Default. Данный контакт сработает в том случае, если данные на входе не совпадают ни с одним
вариантом в переключателе. Его можно удалить, нажав правой кнопкой на нем и выбрав Remove
Execution Pin, или отключив опцию Has Default Pin на панеле Defaults.
Int Switch
1. Выставите Switch блок на график для настройки
2. Измените Start Index на самое низкое значение, с которого вы хотите вести
сравнение
3. Нажмите Add Pin на блоке что бы добавить выходной исполняемый контакт. Число
введенное в Start Index отвечает за первый контакт. Все остальные за следующие по порядку
Что бы удалить контакт, нажмите правой клавишей мыши по контакту и выберете Remove
Execution Pin. Учтите, что удаление контакта в Switch on Int блоке, придаст всем следующим
блокам по списку знаечение на 1 меньше.
Name или String Switch
1. Нажмите на кнопку + на панеле Defaults что бы добавить параметр для сравнения
84
2. Введите желаемое значение для сравнение в поле.
85
Branch
Branch блок предоставляет стандартное TrueFalse разветление. Как только блок вызван, он
считывает булевый параметр на входе и в зависимости от значения, вызывает True(если правда)
или False(если ложь).
Входные конекторы
Без
Вызывает срабатывание блока
названия
Булевое значение(Правда/Ложь), которое влияет на то, какой выход будет
Condition
использован для продолжения последовательности
Выходные конекторы
True Срабатывает, если значение на входе — True(Правда)
False Срабатывает, если значение на входе — False(Ложь)
Do N
86
DoOnce
Блок DoOnce вызовет следующую последовательность только один раз. После того, как блок
один раз пропустил последовательность, он блокируется и продолжить последовательность
можно только вызвав Reset. Блок является эквивалентом Do N блока со значением 1.
Вход
Без
Вызывает блок
названия
Reset Перезапускает блок, позволяя снова пропустить последовательность
Выход
Продолжает следующую последовательность, если блок не был вызван
Completed
ранее или не был сброшен
FlipFlop
Вызывает выходящие события по очереди. Первый раз, когда вызван блок, вызывается
последовательность А, второй раз — В. Потом A, потом В и так по очереди. Блок так же имеет
булевый контакт, который предоставляет информацию о том, какая последовательность вызвана.
Вход
Без
названи Вызывает блок
я
Выход
А Вызывается каждый нечетный раз при срабатывании блока
В Вызывается каждый четный раз при срабатывании блока
Предоставляет булевое значение, которое указывает, какая последовательность
Is A
была продолжена. А — Правда, В — Ложь.
87
For Loop
88
Блок Gate используется для прерывания или продолжения последовательности в
зависимости от того, что было вызвано. Булевый контакт определяет, будет ли прервана
последовательность изначально или нет.
Вход
Enter Вход для последовательности, которая может быть продолжена или нет.
Open Открывает блок для продолжения последовательности
Close Закрывает блок
Переводит блок в другое состояние при срабатывании. От закрытого к
Toggle
открытому или наоборот.
Start
Булевое значение, определяющее, будет ли блок открыт изначально или нет
Closed
Выход
Exit Вызывает последовательность в том случае, если блок открыт.
Multi Gate
89
выходы можно нажав по одному правой клавишей мыши и выбрав Remove Pin.
Sequence
Блок WhileLoop циклично вызывает последовательность до тех пор, пока условие — Правда.
Вход
Без
Вызывает срабатывание блока
названия
Булевое значение, определяющее, зацикливается ли
Condition
последовательность.
Выход
Вызывает последовательность до тех пор, пока условие
Loop Body
положительно.
Completed Вызывает следующую последовательность, когда цикл закончится.
90
1. Нажмите Create копку на Контент Браузере, под вкладкой User Interface выберее
Widget Blueprint
Редактор Виджетов
91
По умолчанию при редактировании Виджетов будет открыт редактор в режиме
Desiger(Дизайнер). Данный режим отвечает за создание визуальной составляющей вашего
виджета, который в последствии будет отображен на экране пользователя.
Нажмите на картинку справа, что бы увидеть числовую разметку.
1. Visual Окно, в котором происходит настройка вашего виджета в графическом
Designer режиме.
Список заготовленных элементов виджета, которые могут быть пересены и
2. Pallete
установлены в редакторе посредством перетаскивания
3. Hierarchy Отображает древовидную струкруру компонентов вашего виджета
4. Sequencer Панель для создания анимаций компонентов вашего виджета
5. Details Отображает настройке выбранного компонента или виджета в целом.
График
UMG редактор так же поддерживает создание логики вашего виджета. Вся эта логика
создается по системе Blueprint в режиме Graph, в который можно войти, переключив режим на
Тулбаре редактора.
Создание и вызов виджета
После того, как вы создали и настроили оболочку и логику вашего Виджета, вам нужно
вызвать и показать его из нужного Блупринта для того, что ваш виджет появился на экране.
92
Создание виджета происходит путем вызова блока Create Widget, в котором устанавливается
класс виджета(какий именно виджет) и «владелец» виджета(Player Controller), а на выходе в
Return Value получаете созданный виджет. После создания, виджет нужно отобразить на экране,
что можно сделать вызовом блока Add to Viewport.
Что бы убрать виджет с экрана, воспользуйтесь блоком Remove from Parent
В примере выше показано, как виджет с Scroll Box добавляется к созданному виджету Main
Menu, используя ноду Add Child.
Add Child блок делает родителем виджета, который был присоеденен, поэтому при вызове
Add to Viewport родительского виджета, наследуемые виджеты (Дети) автоматически будут
показаны на экране. Для того, что бы убрать виджет из другого, воспользуйтесь блоком Remove
Child.
Типы элементов
Внутри редактора виджетов у вас есть доступ к различным элементам, из которых вы
собираете ваш виджет. Все они расположены на Pallete панели и сортированы по категориям. Все
эти элементы можно перенести на окно дизайнера посредством Драг&Дроп’а.
В данной документации данные элементы будут называться элементами однако их
официальное название — Widget.
Список элементов Виджета
93
Common
94
Input
95
Элементы для организации других по определенным правилам, например в табличном
виде или друг за другом
Панель для свободного размещения элементов внутри себя. Так же
Canvas
поддерживает якоря, для выравнивания элементов и Z-Order, который позволяет
Panel
установить, какие элементы будут поверх других.
Таблица с возможностю установки неравномерного размера ячеек. Схоже с
Grid Panel
тегом < Table > в html.
Horizontal
Упорядочивает элементы в горизонтальном порядке
Box
Элемент, который служит для установки одного элемента на другой или
Overlay
просто для организации порядка элементов
Панель, которая маштабирует дочерний контент равномерно, не изменяя
Scale Box
его пропорций.
Панель с возможностью прокрутки внутренних элементов. Полезно, когда
Scroll Box
кол-во дочерних элементов достигает большого количества.
Uniform Таблица с равномерным размером ячеек, которая так же поддерживает
Grid Panel отступы между ячейками.
Vertical Box Упорядочивает элементы в вертикальном порядке.
Widget
Панель, которая позволяет переключать видимость дочерних элементов.
Switcher
Панель, упорядочивающая элементы справа налево. Все эелменты, которые
Wrap Box
не помещаются, автоматически переносятся на следующую строку.
Primitive
96
открытия контекстного меню
Native Widget
Панель, для установки Slate виджета.
Host
Панель для того, что бы устанавливать отступы между виджетами. Не
Spacer
имеет визуального представления и невидима в игре.
Анимированный элемент для отображения нескольких картинок,
Throbber
которые увеличиваются и уменьшаются с течением времени.
Якоря UMG
Якоря используются для определения местоположения требуемого виджета UI на Canvas
Panel и сохранении свей позиции на экранах различых размеров. Якоря нормализованны, что
означает, что их позиция рассчитывается не в пикселях от угла экрана, а в процентном
соотношении между0;0(верхний левый угол) и 1;1 (правый нижний угол).
Если у вас есть Canvas Panel и необходимо к ней добавить UI Widgets, то вы можете выбрать
позицию якоря из готовых пресетов или вручную указать в настройках Min/Max. Учитывайте, что
если элемент вашего виджета находится не внутри Canvas Panel, то якоря или позицию вы
установить не сможете, так как эта возможность свойственна только дочерним элементам Канвас
панели.
Как работают якоря
Внутри нижепоказанной жёлтой рамки находится якорь на Canvas панели.
97
Основываясь на размере вьюпорта, кнопка смещается по экрану.
Если мы переместим якорь в правый нижний угол …
Кнопка сдвигается, что бы не выйти за пределы экрана, из-за положения якоря в правом
нижнем углу (жёлтая рамка).
Данный пример показывает, как вы можете указать местоположение якоря и как это
скажется на отображении виджета на экране. Вы также можете разделить якорь для указания
того, как он должен отображатся на разных разрешениях.
98
Заготовки положения якорей
Для расположения виджета на Canvas Panel, вы можете выбрать ранее заготовленные якоря
с Details панели виджета.
Это полезно, когда вы хотите растянуть что-то вдоль экрана (показано ниже).
Здесь мы выделили место для якоря вдоль нижней части canvas.
99
Растяжение отражается и на самой иконке якоря, теперь вместо одной целой — две
половинки.
Вы можете разбить якорь на части , потянув за одном из краёв.
Если мы захотим сейчас поиграть в нашу игру, то Progress Bar будет выглядеть примерно так
(нормально):
100
Установка якорей вручную
В дополнении к существующим заготовкам, вы можете вручную указать местоположение
якоря. Это удобно в тех случаях, если нужно расположить один виджет относительно другого;
ниже продемонтрирован пример.
На картинке выше у нас имееться виджет картинки и Progress Barа внутри canvas панели,
который в свою очередь находится внутри другой canvas панели. Canvas панель содержит в себе
Image элемент и Progress Bar, закреплённые в левом верхнем углу экрана. Это может быть
использовано, к примеру, чтобы показать картинку персонажа игрока и его полоску здоровья.
Ниже Progress Bar (а также картинка, хотя это не показано) закреплены к верхнему левому
углу canvas панели в которой они находятся.
101
Теперь вы можете видеть на изображении ниже, как мы растягиваем правую сторону canvas
панели, Progress Bar растягивается, но расстояние от правой стороны остается прежним.
Теперь проблема состоит в том, что когда мы изменили размер canvas панели с нашим
виджетом в ней, виджет картинки не остался на прежней позиции, а съехал немного в сторону.
Вместо того, что бы якорь переместился в левый верхний угол, он остался на своей позиции,
мы можем вручную его переместить.
Выше, мы закрепили якорь в левом верхнем углу вместе с Progress Bar. Теперь мы изменим
размер canvas панели содержащей 2 виджета…
102
Виджет картинки остался на фиксированном расстоянии от Progress Bar’а. Теперь другая
проблема, если мы сожмем нашу панель Canvas с виджетами внутри…
Картинка обрезается, так как мы не установили дистанцию для картинки, для того чтобы
исправить это для левой стороны, мы разделим якорь.
Выше мы установили наш якорь и теперь изменяя размер Canvas панели, картинка вместе с
Progress Bar’ом изменяют свой размер и не вылезают за границу.
103
Ещё одно изменение якоря может исправить это. Тут мы указали, на сколько мы хотим,
чтобы картинка была отодвинута от верха и низа по отношению к Progress Bar’у.
104
Шрифты
105
2. Новый композитный ассет шрифта создан, дайте ему имя.
3. После ввода имени вы заметите звёздочку на иконке ассета — это означает, что
ассет не сохранён. Кликните по кнопке Save All для сохранения вашего ассета, после чего
подтвердите сохранение в появившся окошке, для окончательного сохранения.
Вместо того, чтобы каждый раз нажимать кнопку Add New, вы можете кликнуть ПКМ на
пустом месте в контент браузере и в выпавшем меню найти User Interface -> Font для создания
ассета шрифта. Не забывайте сохранять ваши ассеты!
Когда вы создали новый ассет шрифта в редакторе, создался пустой композитный ассет
шрифта в котором вы можете настроить его параметры используя редактор шрифтов. Когда вы
импортируете TTF или OTF файлы, новый композитный ассет шрифта генерируется из
предоставленного образца шрифта (в любой момент вы можете задать дополнительные
параметры через редактор шрифта).
Импорт шрифтов
Вы можете импортировать TTF или OTF файлы в редактор, и сделать это несколькими
путями.
Первый метод — кликните по кнопке Import в контент браузере.
106
Файл будет добавлен в контент браузер как композитный ассет шрифта, используя файл
который вы выбрали.
Вы можете перетащить TTF или OTF файл в контент браузер, после чего создастся
композитный ассет шрифта.
107
Обзор окна редактора шрифта представлен ниже:
1. Toolbar Menu — Из этого меню вы можете сохранить файл после внесения в него
каких либо изменений; найти файл в контент браузере; изменить цвет Background/Foreground в
превью окошке (4). Также есть опции для обновления или экспорта внесённых изменений, однако
эти опции доступны лишь при использовании Offline метода кеширования.
2. Default Font Family — В этом окошке вы можете назначить семейство шрифта
используемый ассетом шрифта по умолчанию. Вы также можете добавить различные версии для
стиля (к примеру — Нормальный, Жирный, Наклонный, Подчёркнутый, и тд.), или назначить
набор различных стилей шрифта как один композитный шрифт. Если вы создали пустой ассет
шрифта, вы можете назначить шрифт внутри этого окошка. После того как шрифт был добавлен,
вы также можете добавить подсказывающий алгоритм используемый со шрифтом.
3. Sub-Font Family — В этом окошке вы можете назначить семейство под-шрифта
используемое ассетом шрифта. Тут вы можете назначить диапазон символов, и если символ
находится в пределах диапазона вы можете назначить различные стили шрифта используемые
вместо стандартного (это удобно, когда вы хотите использовать различные шрифты для разных
языков).
4. Preview - Это окошко даёт вам предпросмотр вашего шрифта и имеет поле ввода
для набора текстового примера.
5. Details - В этом окне вы можете сменить метод кеширования , а также сменить
размер шрифта и его имя (для Runtime).
Если вы используете старый метод, вы всё ещё можете сменить пераметры вашего шрифта.
Вы также можете сконвертировать ассеты шрифта из Offline в Runtime без замены онного.
Пример ассета шрифта представлен ниже.
108
Композитный шрифт всегда по умолчанию содержит семейство шрифтов, а также может
содержать любое количество семейств под-шрифтов которе должно быть использовано с данным
количеством символов.Каждое семейство шрифтов содержит любое количество шрифтов,
которые могут быть названы в зависимости от их стиля. Во время выполнения наиболее
подходящий шрифт использовать для каждого символа на основе шрифтов доступных в семействе
шрифтов для используемого диапазона символов.
Как видно на примере выше, японский текст находится в пределах диапазона символов
японского семейства шрифтов, и отрисовывается в помощью Source Han Sans, а не с помощью
стандартногоартного семейства шрифтов Roboto. Шрифты в семействе под-шрифтов
преимущественно выбираются посредством сходства имени, как и в случае с Regular, Bold, и Light,
однако также может быть сравнение по аттрибутам дефолтного шрифта, как в случае с Bold Italic
(был автоматически выбран жирный японский шрифт, так как шрифт содержит аттритуб Bold, что
было лучшим сходством).
Шрифты в UMG
После того, как вы создали Widget Blueprint и разместили виджет содержащий текст (такой
как Text Box или Text Widget), кликните по нему, и во вкладке Appearance на панели Detailsвы
увидите опции шрифта.
109
Вы также можете выбрать создание композитного шрифта из этого меню и указать, куда
следует его сохранить (по умолчанию он будет пустой, поэтому вам нужно будет его заполнить).
После того, как вы выберите ваш композитный шрифт, второе выпадающее меню даст вам
выбрать шрифт используемый из Default Font Family.
110
Стилизация виджетов
111
перекрываемое, неиспользуемое состояние, однако могут быть дополнительные варианты, в
зависимости от типа виджета, который вы используете.
Настройка изображения состояния
Для каждого состояния, вы можете установить изображение (либо текстуру/материал) для
используемого виджета. Размер изображения зависит от размера ресурса в Slate Units и
опции Draw As, которая использует 9 ячеек масштаба, дающие вам возможность настроить то, как
изображение будет отрисовываться в форме Box, Border, или как Image.
Пример для каждого случая ниже:
112
Изображения на основе материала
Материалы также могут быть назначены как ассет изображения для вашего изображения
состояния, но вам нужно будет сменить несколько параметров.Внутри материала, на
панели Details в разделе Usage отметьте галочкой Used with UI. Это скомпилирует шейдер
специально под Slate. Также необходимо оставить только Emissive Color на выходе.
Динамические материалы
113
При необходимости изменения параметров материала, вам нужен Dynamic Material
Instance. Виджет изображения может это сделать с завидной лёгкость, если у него есть Slate
Brush с материалом, вы можете задать изображение (создаётся 1 раз, а затем кешируется).
Оттенок\отступ
Также, в каждом состоянии можно задать оттенок изображения прикреплённого к данному
состоянию. Также есть опция Margin, которая задаёт размер отступа для режимов
отрисовки Box и Border (в режиме Image отступ игнорируется).
Padding
Padding - опция стриля создающая границы вокруг виджета.
114
Большинство виджетов допускающие применение звуков, используют звуковые события
при перекрытии или нажатии, что в итоге выливается в воспроизведение звука при перекрытии
или клику по виджету. На картинке, выше для виджета чексбоксика присутствуют параметры для
звуковых событий, таких как «выбрано», «невыбрано», «перекрыто».
Для различных видов виджетов доступны различные виды звуковых опций.
Отображение трансформации
Дополнительные опции стиля которые могут использованы для изменения вида вашего
виджета, находятся они в разделе Render Transform на панели Details вашего виджета. С
помощью этих настроек вы можете переместить, масштабировать, обрезать, повернуть ваш
виджет по отношению к пивоту.
Пример отображения трансформации проиллюстрирован ниже.
Каждая из настроек может быть расставлена в ключи, что даст вам возможность
анимировать их, и даже отредактировать через блупринт во время игры на основе действий
произведённых игроком.Отображение трансформации относительно к разметке транформации и
не обрезается родителем (к примеру, если у вас есть Scroll Box полный кнопок, изменение
перемещения в настройках отображения трансформации может сдвинуть кнопки из него
115
Освещение
Для того, что бы ваша сцена выглядела привлекательно, вам может понадобиться
правильно работать с освещением. Unreal Engine 4 предоставляет широкий набор инструментов
для работы со светом. От простых источников света, которые являются основой создания
освещения на сцене, до просчета статичного света и теней, благодаря чему можно получить
наивысшее качество освещенности вашей карты или уровня.
Источники освещения
Освещение на вашей сцене создается благодаря расставлению в ней источников света там,
где вам нужен свет. Благодаря этим источникам, UE4 понимает, какие участки осветлять, а какие
затемнять. А так же в зависимости от источников определять, какое качество освещения должно
быть, каким оно должно быть, какой тип теней использовать и так далее.
Типы источников света
В Unreal Engine 4 имеется четыре типа источников света:
Directional (Направленный), в основном, используется для уличного света, идущий
издалека, например, солнца.
Point (Точечный источник света) – обычная «лампочка». Испускает свет во все стороны из
одной точки.
Spot (Прожекторный) также испускает свет из одной точки, но в одну сторону, подобно
фонарику.
Sky (Небесный) источник света берет фон вашей сцены и применяет его как общее
освещение для мешей на вашем уровне. Иногда называют Эмбиент освещением.
Подвижность источников освещения
Для каждого источника света на вкладке «Transform» вы найдете свойство, называющееся
«Mobility» («Подвижность»).
116
позиция вашей камеры не будет иметь никакого значения при отображении вашего освещения на
экране.
Ниже вы можете видеть пример сцены с одним Directional источником освещения и только с
прямым освещением (без отражения света). Некоторые зоны при этом полностью черные, так как
туда не попадает свет.
Далее идет отражения света (можно увидеть результат на скриншоте ниже). Яркость и цвет
отражения зависит от самого источника света, а так же, как описано ранее, от свойства самой
поверхности. Каждый «отскок» света будет темнее предыдущий итерации, так как часть света
поглощается самой поверхностью. Заметьте, что коллонна получила больше освещения внизу от
непрямого освещения, так как она стоит рядом с тем местом, куда попал основной, прямой свет
от солнца (которое эмулируется через Directional Light).
Второй отскок света. Данная итерация гораздо темнее, чем предыдущие, так как почти весь
свет поглотился поверхностями.
117
Если ваша поверхность имеет контрастный и яркий цвет, то это может сильно повлиять на
непрямое освещение. Если эффекта не достаточно, вы можете увеличить параметр DiffuseBoost в
материале или же самом уровне.
Освещение динамики
В процессе просчета освещения оставляются специальные семплеры в 3х мерном
пространстве вашего уровня. Такие семплеры подхватывают непрямое освещение для того, что
бы потом соответствующим цветом подсвечивать динамические объекты, в особенности
персонажей. Это позволяет «слить» динамические объекты со статическим окружением по
освещению. Такой способ называется «Кеширование непрямого освещения».
Кеширование происходит в достаточно низком разрешении для того, что бы не сильно
нагружать систему, но при этом выдавать приемлимый результат. Границы кеша определяет
Lightmass Importance Volume.
На изображениях ниже включена визуализация семплеров. На втором скриншоте так же
включен Lit режим отображения. Обратите внимание на то, как семплеры рядом с красной тканью
подхватили её свет. Если вдруг в том месте появится динамический объект, он будет подсвечен в
соответствующий цвет.
118
объект должен подсветиться только снизу.
Вы можете визуализировать семплеры через меню Вьюпорта Show > Vizulize > Volume
Lighting Samples.
Ограничения
По умолчанию, создание кеша на больших картах приведет к огромному количеству
подобных семплеров. Это может вызвать проблемы с оптимизацией. Используйте параметр Static
Lighting Level Scale в настройках освещения вашей карты, что бы исправить данную проблему.
Динамические объекты, находящиеся вне Lightmass Importance Volume, будут иметь полностью
черную затененную сторону.
Ambient Occlusion
Процесс просчета освещения просчитывает непрямое освещение на сцене автоматически,
одноко может быть полезным усилить тени от непрямого освещения в труднодоступных местах
для более реалистичного или стилизованного вида.
Ambient Occlusion (AO) — это специальный алгоритм затенения поверхности, который вы
можете увидеть при равномерно яркой атмосфере (например пасмурной погоде). Данный
алгоритм затенияет углы, проемы и остальные «тесные» места при непрямом и прямом
освещении, после чего запекает это вместе с остальным просчетом в текстуры. AO включен по
умолчанию, однако вы можете его выключить в настройках просчета (Lightmass Settings) в World
Settings.
На первом скриншоте сцена без Ambient Occlusion, а второй скриншот уже с ним. Обратите
снимание на затенения поверхности там, где объекты близко друг к другу.
Настройки AO
Параметр Описание
Visualize Помещает в запеченые текстуры только AO, при этом остальное
Ambient освещение не учитывается. Полезно для того, что бы настроить данный
Occlusion эффект и точно видеть, где и как сильно он применяется.
Max
Максимальная дистанция от объекта, на которой он будет отбрасывать
Occlusion
подобную тень на другие поверхности.
Distance
Fully Максимальный процент затенения, выше которого AO будет полностью
Occluded черным.
Автор: Ханин Владимир
119
Samples
Fraction
Occlusion
Контраст
Exponent
Просчет Ambient Occlusion почти ничего не стоит до тех пор, пока Num Indirect Lighting
Bounces выше 0.
Ограничения
Для нормального отображения AO необходимо относительно высокое разрешение текстур
освещения, так как данный эффект обычно имеет значение на малых дистанциях.
Preview качество просчета освещение обычно плохо просчитывает AO. Старайтесь проверять его
на более высоком качестве (например High).
Тени от Masked материалов
Тени от материалов с Masked режимом смешивания так же учитываются при просчете
освещения. Те места на объекте, которые обрезаются маской прозрачностью, не будут
отбрасывать теней, что позволяет делать вам реалистичные тени от различной растительности
или же других тонких объектов, которые используют подобный материал.
120
Радиус Point и Spot Light можно увидеть благодаря желтой сетке сферической формы. Белая
сетка означает радиус влияния источника света. Следите за тем, что бы радиус самого источника
света не пересекал геометрию, иначе такой источник будет излучать свет и с другой стороны и
может так же создать артефакты в конечном результате.
121
При проходе через полупрозрачные материалы, свет так же приобретает оттенок самого
материала. На данный момент нету отдельного свойства у материала, который бы помог
настроить цвет света, который проходит сквозь подобный материал, однако цвет сейчас
рассчитывается исходя из свойств самого прозрачного материала по следующим схемам:
Режимы смешивания BLEND_Translucent и BLEND_Additive — Цвет тени = интерполяция
между белым и цветом из BaseColor в зависимости от свойства Opacity.
Режим BLEND_Modulate выдает цвет тени такой же, как и BaseColor свойство материала.
Учитывайте тот факт, что непрямое освещение будет размывать тени от прозрачных
материалов, из-за чего они будут менее насыщенными, чем сам материал.
Жесткость теней
Существует несколько способов контролировать жесткость теней от полупрозрачных
материалов.
На первом изображении был использован источник света с увеличенным радиусом, а на
втором свет излучался из одной точки.
122
На первом изображении ниже использовался свет из одной точки, как и на втором примере
выше, однако разрешение карт освещения (Lightmap resolution) довольно малое, что бы сохранить
четкость материалов. На втором изображении в материале было установлен параметр Export
Resolution Scale на очень низкий, из-за чего тени хоть и низкого разрешения, но жесткие.
123
Ограничения
Полупрозрачные (Transclucent) материалы пока не поддерживают рассеивание света,
поэтому такой материал не сможет освещать окружение при попадании света на него.
Первая итерация непрямого освещения пока что не поддерживается полупрозрачнымы
материалами. Это означает, что первый отскок света от поверхности не будет учитывать цвет
материала при проходе.
Искажения и преломления света от Refraction свойства пока не поддерживаются.
Создание качественного освещения
Выделяющийся свет
После того, как свет просчитан, может возникнуть проблема в том, что свет довольно
тусклый или слабо заметный. Существует несколько способов сделать его более выделяющимся.
В время рендеринга на экран, цвет пикселя определяется свойством материала BaseColor
умноженного на цвет света из карты освещения, поэтому цвет самого материала имеет прямое
отношение к тому, насколько будет видно освещение. Высокий контраст или темные материалы
не дают свету быть достаточно заметным во время рендеринга. В то время как не сильно
контрастные или светлые текстуры позволяют увидеть свет гораздо лучше.
На изображениях ниже вы можете сравнить, как на первом видно свет при светлых
материалах, и на втором, где заметны только резкие смены освещения из-за того, что там
использовались в основном темные и «шумные» текстуры.
124
Режим Unlit помогает определить насколько хорошо текстуры будут влиять на финальный
рендер. Вы можете видеть, что на первом изображении ниже сцена вся сливается и выглядит
очень монотонно и светло. Это значит, что в итоге всю работу будет доделывать освещение сцены
и оно же убирать всю эту однородность. Часто, чем скучнее и площе ваша сцена, тем лучше она
будет выглядеть после запекания освещения.
Настройка освещения
Избегайте равномерного освещения, например освещения от Cubemap’ов, так как такое
освещение уменьшает контрастность в зонах, где работает только непрямое освещение. Из-за
этого может потеряться детализация сцены.
Устанавливайте источники света таким образом, что бы прямо освещенные зоны хорошо
выделялись на фоне непрямого освещения. Такой контраст хорошо поможет выделить тени и
лучше детализирует вашу сцену.
Так же старайтесь избегать слишком ярких источников света, а так же слишком темных теней.
Улучшение качества освещения
При просчета освещения, одним из важных аспектов деталезированных теней является
высокое разрешение карт освещения на объектах, куда эти тени падают, а так же это позволяет
избежать шума и артефактов в непрямом освещении, в целом повысив его качество. С другой
125
стороны, повышение разрешения «Лайтмапов» заметно увеличит время просчета, а так же будет
требовать большей текстурной памяти во время процесса игры. В идеале, высокое разрешение
должно быть установлено только там, где у вас важная зона с хорошо выделяющимеся тенями.
Предустановка качества просчета
Перед тем, как просчитывать освещение, определитесь, на какой вы стадии. Если у вас
готовая сцена и настроенное освещение, то хорошим решением будет выполнить запекание на
Production качестве (Настройки Lightmass Solver). Это может увеличить время просчета, однако
выдаст наилучшее качество с наименьшим количеством артефактов.
Если же вы ещё на стадии проверки и настройки, то лучше использовать Preview качество
для того, что бы примерно посмотреть, как будет выглядеть ваша сцена в текущем варианте и
сделать соответствующие настройки.
Ускорение процесса просчета
Несколько способов, которые помогут сделать просчет освещения быстрее:
Используйте высокое разрешение карт освещения только в тех местах, где у вас есть
контрастное (сильно меняющиеся) освещение и жесткие тени. Уменьшайте разрешение на тех
моделях, которые не попадают под прямое освещение или тени. Если объект находится в зоне,
где освещение будет непрямым, лучше поставить разрешение поменьше.
Поверхности, которые никогда не увидит игрок должны быть с наименьшим разрешением.
Используйте Lightmass Importance Volume для того, что бы выделить важные зоны для просчета
освещения (например только те, где может находится сам игрок).
Оптимизируйте разрешение карт таким образом, что бы оно было равномерным. Запомните, что
процесс просчета никогда не может быть быстрее, чем самый медленный объект для просчета, не
важно, сколько машин у вас занимается этим процессом. Избегайте больших объектов с очень
высоким разрешением. Лучше поделите их на несколько модульных кусков, в особенности если у
вас несколько ядер или несколько машин, просчитывающих освщение.
Объекты, которые сами себя перекрывают будут просчитываться в разы дольше. Например ковер
с несколькими слоями полигонов, наложенных друг на друга для получения 3х мерного эффекта,
будет просчитываться значительно дольше, нежели просто плоский пол.
Существует очень полезное окно — Lighting Build Info. В нем вы сможете проверить, сколько
заняло времени, что бы просчитать карту для конкретного примера. Вы можете найти это окно
под меню Build > Lighting Info > Lighting StaticMesh Info. Переключите вкладку на Lighting Build Info,
что бы найти нужную информацию.
126
объекты за границами игровой площадки могут сильно тормозить процесс просчета, так как
увеличивается общее количество фотонов. Lightmass Importance Volume устанавливает, в какой
зоне излучаются и просчитываются фотоны более точно и реалистично. Это позволяет
сфокусировать внимание процесса просчета только там, где там, где будет находится игрок и
видеть результаты освещения вплотную. В пространстве вне Lightmap Importance Volume
просчитывается только один отскок непрямого освещения и более низкого качества.
На первом изображении ниже показана игровая локация сверху с включенным режимом
просмотра Wireframe. Зона, где будет находится игрок и которой нужно более качественное
освещение гораздо меньше. На втором изображении игровая зона приближена. На ней так же
установлен Lightmass Importance Volume (Он выделен). Радиус приорететного просчета
уменьшился с 80 000 юнитов до 10 000, что в 64 раза меньше.
Вы так же можете сконвертировать любой BSP Браш. Вам нужно выделить его, нажав на
параметр Convert Actor на панели Details, и выбрать Lightmass Importance Volume из выпадающего
списка.
Если вы установите несколько подобных зон на уровень, тогда большая часть света будет
просчитываться в контейнере, который описывает все Lightmass Importance зоны. Однако
Автор: Ханин Владимир
127
семплеры непрямого освящения будут помещены только внутрь выставленных на сцену
Volume’ов.
Настройки сцены
Настройки просчета освещения можно изменить в настройках сцены — так называемой
World Settings панели. Параметры для освещения находятся под категорией Lightmass.
128
Однако такой прием может повлиять на время просчета освещения в худшую
сторону.
Цвет, который подхватывается в процессе просчета. Данный параметр
Environment
можно визуализировать как сферу вокруг сцены, которая излучает указанный
Color
цвет во все стороны.
Environment
Усиливает параметр Envirement Color.
Intensity
Определяет влияения Diffuse свойства при просчете освещения.
Другими словами, без данного параметра свет будет отражаться от
поверхности со своим цветом, не подхватывая цвет самого материала.
Diffuse Boost
Обратите внимание, что повышая параметр Diffuse Boost, вы не сделаете
непрямое освещение святлее, так как свет ограничен яркостью 1.0, а при
каждом отскоке он становится все слабее.
Use Ambient Определяет, будет ли в процессе просчитываться так называемый
Occlusion Ambient Occlusion и запекаться с основными картами освещения.
Direct
Illumination
Как сильно AO накладывается под прямым освящением.
Occlusion
Fraction
Indirect
Illumination
Как сильно AO накладывается под непрямым освящением.
Occlusion
Fraction
Occlusion
Определяет контраст эффекта AO.
Exponen
Fully Occluded Максимальный процент затенения, выше которого AO будет полностью
Samples Fraction черным.
Max Occlusion Максимальная дистанция от объекта, на которой он будет отбрасывать
Distance подобную тень на другие поверхности.
Заменяет обычное прямое и непрямое освещение цветом,
Visualize соответствующим Diffuse свойством материала. Это полезно для
Material Diffuse удостоверения того, что Diffuse свойство на материалах соответствует тому,
какой цвет будет участвовать в просчете освящения.
Visualize Помещает в запеченые текстуры только AO, при этом остальное
Ambient освещение не учитывается. Полезно для того, что бы настроить данный
Occlusion эффект и точно видеть, где и как сильно он применяется.
Level Lighting
Определяет общее качество просчета освещения и его настройки.
Quality
Настройки источников света
Парамет
Описание
р
Indirect Lighting
Насыщенность непрямого света от источника света.
Saturation
Shadow Контролирует радиус полутени, или другими словами, как быстро тень
Exponent от источника света меняется с полностью темногой до её же отсутствия.
Light Source Определяет угол под которым стоит источник света относительно той
Angle поверхности, куда попадает его свет. Влияет на размер полутеней. Только для
Автор: Ханин Владимир
129
Directional Light.
Настройки материала
Параме
Описание
тр
Cast Shadow У полупрозрачного материала (Translucent) указывает, что тени будут
as Masked отбрасываться как от Masked материала.
Diffuse Boost Определяет вклад Diffuse свойства при просчете статичного освящения.
Export Увеличивает разрешения Diffuse свойство при экспорте в программу
Resolution просчета освящения. Полезно, когда стандартное разрешение не дает нужное
Scale разрешение при непрямом освящении.
Отражения окружающей среды
Отражение окружающей среды обеспечивает эффективное глянцевое отражение в каждом
участке сцены.Многие важные материалы, такие как металлы, имеют отражения во все
направления, что обеспечивает отражения окружающей среды.Отражения должны быстро
работать очень быстро, так как расчитаны на консоли и компьютеры средней конфигурации.Это не
даёт отражений динамических объектов или чётких отражений, поэтому таких результатов
необходим достигать за счёт использования дополнительных методов, таких как отражения
экранного пространства(Screen Space Reflections).
Быстрая настройка
Для того, что бы начать испольвать отражение окружающей среды — настройте освещение
и постройте его.Там (имеет ввиду на сцене) должно присутствовать непрямое диффузное
освещение, что бы отражение окружающей среды могло показыватся.Далее, перетащите
эктор SphereReflectionCapture из вкладки Modes в вашу сцену и убедитесь, что ваши материалы
имеют заметный блеск, и низкую шероховатость.
Используйте режим вихуализации Reflection Override, чтобы увидеть то, что было захвачено.
Глянцевая непрямая зеркальность
В техническом плане, отражения окружающей среды обеспечивает непрямой блеск.Мы
плучаем прямую зеркальность путём аналитического освещения, но это даёт освещение в
нескольких ярких направлениях.Мы также получаем прямые зеркальности от небесного
освещения, но это не даёт локальных отражений, так как кубмапа небесного света бесконечно
Автор: Ханин Владимир
130
далека.Непрямая зеркальность даёт всем элементам сцены способность отражать другие
элементы сцены, это важно для таких материалов как металл, у которых нет диффузной реакции.
Полное освещение
Отражения окружающей среды работают посредством захвата статической сцены во многих
точках и перепроицировании их на простые формы, как в сферах отражений.Пользователь
выбирает точку захвата размещением эктора ReflectionCapture.Отражения обновляются в режиме
реального времени, для помощи в настройке их положения, но статичны в момент
выпонения.Проецирование захваченных сцены в простые формы даёт приблизительный
параллакс для отражений.Каждый пиксель смешивается между несколькими кубмапами, чтобы
получить конечный результат.Меньшие ReflectionCapture экторы переопределяют крупные,
поэтому вы можете уточнить отражения в областях по мере необходимости. Для например, вы
можете разместить захват в центр комнаты, а затем уточнять его отражения поместив меньшие
захваты в углах помещения.
Материалы с разной глянцевитостью поддерживаются путем создания размытых мипмап из
захваченных кубмап.
131
Однако, использования одних лишь кубмап отражений на очень шероховатых поверхностях
приводит к чрезмерно ярким отражениям, что имеет значительные утечки из-за отсутствия
локальной окклюзии.Это решается за счёт использования данных лайтмапы созданной
посредством Lightmass.Отражения кубмап смешиваются вместе с лайтмапой непрямой
зеркальности основанной на шероховатости материала.Очень шероховатый материал (полностью
диффузный) будет сходится с результатом лайтмапы.Такое смешивание, по факту, является
комбинированием частей данных об освещении — высокодетализированной (кубмапы) и
низкочастотной (лайтмапы).Для того, чтобы это работало корректно, в лайтмапе может быть лишь
непрямоей освещение.Это означает, что только рассеянное освещение от стационарных
источников света может улучшить качество отражений на шероховатой поверхности.Статический
тип освещения не может быть использован вместе с отражениями окружающей среды, так как
он даст прямое освещение на лайтмапу. Учтите, что для того чтобы увидеть результат этого
смешивания, лайтмапа должна быть хотя бы раз построена,и карта должна иметь значимое
непрямое диффузное освещение.
132
сцены будет перепроецирована в отражениях, и кака часть сцены сможет получать отражения из
кубмапы (зоны влияния).
Форма сферы
Форма сферы наиболее используемая.Она никогда не совпадает с формой отражаемой
геометрии, но она не имеет разрывов и углов, следовательно искажение равномерное.
Форма сферы имеет оранжевый радиус влияния который контролирует какие пиксели могут
быть затронуты и захвачены в кубмапу и перепроецированы в сферу.
Точки захвата с меньшим радиусом перезаписывают данные больших по размеру точек
захвата.
Форма коробки
Форма коробки довольно ограниченна в применении, и в основном применяется для
корридоров и прямоугольных комнат.В причина в том, что только пиксели внутри коробки, могут
захватить отражения, и в то же время вся геометрия внутри коробки проецируется по форме этой
самой коробки, создавая значительные артефакты во многих случаях.
133
Визуализация
Режим отображения Reflection Override был добавлен, чтобы легче было увидеть, как
настроены отражения.Этот режим перекрывает все нормали сглаживая варшины нормалей, и
делает все поверхности полностью зеркальными и полнстью гладкими (как зеркало).В этот
режиме хорошо видны ограничения и артефакты, поэтому стоит иногда переключатся в этот
режим, чтобы видеть как ведут себя отражения нормальных условиях.
Были добавлены несколько новых полезных флажков для изоляции некоторых компонентов
освещения:
Флажок Описание
Lighting Components >
Отключение диффузного вклада от всех методов освещения.
Diffuse
Lighting Components > Отключение зеркальных вкладов от всех методов
Specular отражений.
Это позволит отключить отражение объектов окружающей
Lighting Features >
среды, но другие свойства отражения по-прежнему будет
ReflectionEnvironment
активной(SSR, analytical specular).
Настройка уровня для использования отражений окрущающей среды
1. Чтобы иметь хорошие отражения, первым делом необходимо создать дифуузное
освещение, включая непрямое освещение, посредством лайтмап.Раздел Lightmassсодержит
больше информации. Основные ошибки Lightmass, неправильные настройки UV
развёрток,отсутствие LightmassImportanceVolume, или Force No Precomputed
Lighting установленные в World Properties.
Диффуз сцены — это то, что будет видно в отражениях окружающей среды.Для лучшего
результата обеспечьте контраст между прямоосвещаемыми и затенёнными участками.Участки с
ярким диффузом будут выглядеть чётче в отражениях, а тёмные участки будут выглядеть более
явно.Используя режим Lit совместно с отключённым флажком Specular, можно увидеть как и
какие отражения были захвачены.
2. Крайне важно,настроить материалы вашей сцены, чтобы они правильно работали с
отражениями окружающей среды.Плоская, зеркальная поверхность позволит выявить неточности
совмещения проекций кубмап на простые формы.Тем не менее, пышные геометрические или
неровные поверхности могут скрыть эти артефакты и обеспечить приемлимые
результаты.Поэтому важно использовать detail normal maps и указать некоторую степень
шероховатости на материалах, которые будутиспользуется в плоских областях.
134
Сглаженная поверхность, но Шероховатая поверхность, но Сглаженная поверхность и
пышная геометрия — хорошее плоская геомертрия — хорошее плоская геометрия — видно,
качество отражений качество отражений что отражения не совпадают
3. Разместите захват отражений в области, где вы хотите видеть
отражения.Попробуйте разместить сферу захвата так, чтобы часть уровня где вам нужны
отражения, поместилась внутри радиуса, так как сцена будет проецировать эту форму на
сферу.Старайтесь избегать размещения захватов слишком близко к любой геометрии сцены,так
как близконаходящаяся геометрия будет доминировать и блокировать важные детали за ними.
Вопросы производительности
Стоимость отражение окружающей среды зависит только от того, сколько захватов влияет
на пиксель на экране.Это очень похоже на отсроченного освещение.Захваты отражений
ограничены своими радиусами влияния.Зеркальность реализуется через кубмапу мипмапов,
поэтому разница в производительности между резкими и грубыми отражениями невелика.
Ограничения
● Отражения с помощью этого метода, являются приблизительными.В частности, отражение
объекта редко совпадает с фактической формой объекта в сцене из-за проекции его на простые
формы.Это приводит к созданию нескольких видов этого объекта в отражениях, так как много
кубмап смешивается вместе.Плоские, гладкие поверхности, которые дають зеркальные
отражения, более заметно покажут ошибки.Используйте детальные карты нормалей и отражений,
чтобы разбить отражения.
● Захват сцены в кубмапы — медленный процесс, который должен быть выполнен вне
игры.Это значит, что динамические объекты не могут быть отображены в отражениях, но тем не
меннее, они могут получать отражения от статической сцены.
● Для уменьшения ошибки, захватывается лишь диффуз сцены.Чисто зеркальные
поверхности (металлы) будут иметь своё зеркальное применение, как будто бы если это было их
диффузом во время захвата.
135
● Могуть присутствовать значительные потёки, когда существуют различные условия
освещения по обе стороны стены.Одна сторона может быть настроена на правильные отражения,
но они всегда будут перетекать на другую сторону.
● Из-за аппаратных ограничений DX11,количество кубмап используемые для захвата сцены
лишь 128 с каждой стороны, и мир может иметь не более 341 захвата отражений включеных
одновременно.
Тени
Тени дают объектам ощущения контакта с поверхностью, тем самым позволяя ощутить
глубину и пространство.Статические тени отображаются настолько далеко, насколько идёт
рендеринг, но динамические тени могут сильнее сказатся на производительности.Данный
документ покажет базовые виды теней которые есть в Unreal Engine 4.
Static Lights
Статическое освещение отбрасывает полностью статические тени и свет, это означает, что
такой тип освещения не имеет прямого влияния на динамические объекты (статическое
освещение запечено в кеш непрямого освещения, поэтому оно имеет некоторый эффект), как на
примере ниже.
Персонаж на картинке выше, тот что слева, стоит под статическим светом, свет и тени никак
не взаимодействуют с ним; а тот что справа, стоит под стационарным источником света.
Прямое освещение каскадными картами теней(затенение всей сцены)
Directional Stationary Lights — специальные источники света, т.к. они поддерживают
затенение всей сцены посредством Cascaded Shadow Maps, в момент использования статического
затенения.Это очень удобно на уровнях с множеством анимированной растительности; вы хотите
движущиеся тени вокруг игрока, но не хотите переплачивать за чрезмерное количество каскадов,
для покрытия больших дистанций обзора.С увеличением расстояния, динамические тени
растворяются среди статических теней настолько, что переход практически незаметен.Чтобы
применить данную возможность, просто измените значение Dynamic Shadow Distance
StationaryLight в DirectionalLightStationary, чтобы изменить дистанцию растворения.
Тени Стационарных источников света
Динамические объекты (такие как StaticMeshComponents и SkeletalMeshComponents с
подвижностью установленной в Movable) должны быть интегрированны в мировое статическое
затенение на дистанции полей карт затенения.Это достигается с помощью теней для каждого
объекта.Каждый подвижный объект создаёт 2 динамические тени от стационарного источника
света: одну, для управления статической тени проецируемой на объект и вторую, для управления
тени проецируемую на остальной мир.С такой настройкой, затенение для стационарных
источников света происходит от динамических объектов,которое оно затрагивает.Это означает,
что стоимость может варьироваться от очень маленькой, до огромной, в зависимости от того,
сколько присутствует динамических объектов.При наличии достаточного количества
динамических объектов, более эффективным будет использование Movable освещения. На сцене
Автор: Ханин Владимир
136
ниже, сферы — подвижный объект, и все они получают тени от статического мира и проецируют
собственные тени, которые соединяются с остальными тенями на отдалении.Фруструм Per
Object теней для каждого подвижного объекта также показан.
Per Object тени используются для подвижных компонентов используя теневую карту границ
объекта, поэтому границы должны быть точными. Для скелетал мешей это значит, что они
должны иметь physics asset. Для частиц — любой фиксированный ограничивающий бокс должен
быть настолько велик, чтобы вместить в себя все частицы.
Динамические тени
Подвижные источники света проецируют полностью динамические тени (и освещение) на
всём.Информация об освещении не будет запекатся в лайтмапы.Статик меши, Скелетал меши,
эффекты, прочее — будут получать и проецировать динамические тени от подвижных источников
света.
Динамические тени самые ресурсоёмкие.
Превью теней
Когда редактируете стационарное или статическое освещение, тени могут стать
«незапечёнными», Preview Shadowing показывает вам как будут выглядеть ваши тени после
запекания.
Такие (имеется ввиду незапечённые ) тени показываются в редакторе с наложенным поверх
текстом «Preview«, для распознавания их среди других теней.
137
Если вы протестируете свою игру в редакторе, до того как перезапечёте освещение, то
превью тени исчезнут, так как они существуют только лишь в режиме редактирования, но никак не
в режиме игры в редакторе.
Для того, чтобы получить тени из превью теней, вам необходимо выбрать опцию Build
Lighting из меню Build.
138
Постобработка
Использование эффектов постобработки (Post Process Effects) в Unreal Engine позволяет
художникам и дизайнерам изменять общий вид и атмосферу сцены. Примером подобных
эффектов может служить блюм(Эффект свечения), ambient occlusion, и цветокоррекция.
В UE4 существует несколько способов настроить постобработку для вашего проекта.
Настроить можно через камеру (через которую пользователь видит сцену вашего проекта.
Например камера внутри класса персонажа), а так же через специальные зоны постобработки,
именуемыми Post Process Volume. Процесс редактирования настроект ничем не отличается,
однако у Post Process Volum имеется ряд настроект, которые определяют зону смешивания и
активации настроек.
Post Process Volume
Post Process Volume – особый тип объема (Вольюм).
По существу, в Unreal Engine 4 каждый объем постобработки – всего лишь один из типов слоев,
которые могут создаваться с помощью игрового кода (эффект попадания), пользовательского
интерфейса (меню паузы), камеры (виньетка) или матини (matinee; эффект старины). Каждый
отдельный слой имеет свой вес, что позволяет отлично управлять ими, смешивать их.
Смешивание выполняется с использованием линейной интерполяции и только для активных
объемов. К тому же, эффекты в PostProcessVolume проявятся лишь тогда, когда камера окажется в
его пределах (если неактивен параметр «Unbound» (Бесконечный). Подробнее о параметрах
PostProcessVolume можно узнать в следующей таблице:
Значение Описание
Настройки постобработки для объема. Флажки большинства параметров
Settings
определяют, как будут смешиваться одни эффекты с другими.
Определяет порядок, в котором происходит комбинирование нескольких
Priority объемов. Тот, который имеет больший приоритет, превалирует над остальными,
даже если он перекрывают его.
Дистанция в единицах Unreal Engine, начиная с которой будет происходить
Blend
смешивание эффектов пост обработки. Материалы пост обработки будут
Radius
игнорировать этот параметр.
Blend
Влияние волюма. 0 – отсутствие эффектов, 1 – полное влияние.
Weight
Взаимодействует ли волюм с постобработкой или нет. Если да, то его
Enabled
настройки будут использоваться для смешивания.
Определяет область действия волюма. Если у параметра имеется флажок, то
Unbound волюм будет действовать во всем мире, в противном случае, только в своих
пределах.
Настройки постобработки
Anti-Aliasing
Anti-aliasing – Отвечает за сглаживание объектов. Разделяют между собою : FXAA, MSAA,
Temporal AA.
Основной принцип сглаживания — использование возможностей устройства вывода для
показа оттенков цвета, которым нарисована кривая. В этом случае пиксели, соседние с граничным
пикселем изображения, принимают промежуточное значение между цветом изображения и
цветом фона, создавая градиент и размывая границу.
FXAA (Fast approXimate Anti-Aliasing) — метод сглаживания от Nvidia представляющий собой
однопроходный пиксельный шейдер, который обсчитывает результирующий кадр на этапе
постобработки. Является более производительным решением, по сравнению с традиционным
MSAA (Multi-Sampling Anti-Aliasing), что, однако, сказывается на точности работы и качестве
изображения.
139
Temporal AA (Временной АА) пытается уменьшить или устранить последствия
временного алиасинга. Временное сглаживание обусловлено частотой дискретизации (т.е, кол-во
кадров в секунду) сцены, но её скорость очень мала по сравнению со скоростью обработки
объектов внутри сцены. Из-за этого предметы появляются не на своем месте или прыгают вместо
плавного продвижения к движущемуся объекту. Чтобы избежать артефактов, частота FPS должна
быть вдвое выше, чем самый быстрый движущийся объект. Поведение затвора камеры сильно
влияет на сглаживание, т.к общий вид экспозиции через какое-то время ставит определенное
ограничение по времени, что является важным фактором сглаживания. Временной анти-алиасинг
может быть использован для камеры для достижения лучшего ограничения пропускной
способности. Типичный пример - в фильме появляется колесо автомобиля, которое крутится в
обратном направлении. Это так называемый эффект обратного кручения.
Настройки постобработки содержат всевозможные эффекты, которыми можно управлять.
Все параметры объявляются в классе UScene. Волюм постобработки имеет структуру
FPostProcessSettings и содержит в себе все соответствующие параметры.
Bloom
Bloom – это особое явление, наблюдаемое в реальном мире, которое можно использовать
для придания эффекта свечения ярким участкам изображения. Свечения можно заметить, если
смотреть на яркий и светлый объект, расположенный на гораздо более темном фоне. В этом
случае наблюдаются и другие эффекты, такие как блики, но они не входят в понятие обычного
Блума.
Наши дисплеи (ТВ, TFT и другие) обычно не поддерживают HDR (Высокий Динамический
Диапазон, High Dynamic Range), поэтому мы не можем по-настоящему рендерить крайне яркие
объекты. Вместо этого, мы симулируем сопутствующие эффекты, которые воспринимаются
нашими глазами (подповерхностное рассеивание; subsurface scattering). Эффект, вероятно,
физически не особо правильный, но он помогает передать необходимую яркость объекта и
привнести реализма в LDR-изображение (Низкий Динамический Диапазон; Low Dynamic Range).
Эффект Bloom
Свечение можно реализовать с единичным размытием по Гауссу. Но для лучшего качества,
комбинируются несколько подходов с различным радиусом. А для лучшей производительности –
создается большее размытие при меньшем разрешении. В UE3 у нас имелось 3 размытия по
Гауссу в разрешении ¼, 1/8, 1/16. Теперь же – 5 видов. От Blur1 до Blur5, от ½, до 1/32,
соответственно. Более того, если потребуется, можно добавить Blur0 для исходного разрешения.
Варианты размытия комбинируются несколькими подходами, дабы достичь гибкости и
высокого качества: для лучшей производительности, размытия высокого разрешения (низкие
значения свечения) должны использоваться редко и в малом количестве, а при большом
размытии стоит использовать меньшее разрешение (высокие значения).
Свойств
Описание
о
Масштабирование цвета всего bloom-эффекта (линейно). Возможное
использование: продолжительное исчезновение или появление, затемнение.
Intensit
y
140
значение блюма).
141
В данном случае используется функция Код:
Гамма-цвет = ЛинейныйЦвет / (Линейный цвет + 0.187) * 1.035
(GammaColor = LinearColor / (LinearColor + 0.187) * 1.035)
Заметьте, что светлые цвета постепенно становятся светлее, но гораздо медленнее, нежели
темные. Черный остается черным и это наиболее линейная часть кривой, которая несколько
круче, чем должна быть. Это приводит к увеличению контраста, что вполне нормально и
ожидаемо при использовании тональной компрессии. Для получения хорошего результата,
исходное изображения должно иметь больше динамики в яркости (HDR).
Представленная функция уже имеет две константы. Дополнительные переменные могли бы
увеличить гибкость настроек, но выведение хорошей, с точки зрения
качества/гибкости/производительности, функции довольно сложно. По этой причине мы решили
придерживаться простой формулы и изменять уже получившееся LDR-изображение.
Переведя цвета из HDR в ограниченный диапазон, мы получили выразительные темные цвета. Что
касается светлых, то их мы можем изменять по желанию. Этот метод прост для понимания, гибок
в настройке и обладает едва ли не постоянной производительностью.
Свойство Описание
Цвет, являющийся фильтром, применяемым к HDR-сцене.
Scene Color
Tint
Tonemapper
Toe Factor
Коррекция цвета
Коррекция цвета реализована как таблица поиска (lookup tables; LUTs). Причем, вместо
использования трех 1D-таблиц, у нас применяется всего лишь одна, но 3D-таблица, благодаря
этому становятся возможным более сложные и комплексные трансформации цвета (такие как
обесцвечивание).
Следующее изображение показывает, как таблица нейтрального цвета размером 16x16x16
развернута в текстуру размером 256×16 (схоже с браузером текстур):
142
Вы можете использовать изображение RGBTable16x1.png с этой страницы, но для этого
загрузите исходный файл, показанный выше. Для этого нажмите на него ПКМ -> Сохранить как.
Измененная текстура может выглядеть так:
Для того, чтобы использовать таблицу поиска (LUT), вам необходимо применить LUT-текстуру к
волюму постобработки.
Свойство Описание
Color Grading
Свойство, регулирующее силу цветокоррекции.
Intensity
LUT-текстура, используемая как таблица при цветокорреции.
Создание LUT-текстур
Инструкция:
1. Сделайте скриншот сцены, вставьте его в документ Photoshop для дальнейшей
настройки.
2. Загрузите в Photoshop нейтральную LUT-текстуру размером 256×16.
3. Взять её можно с этой страницы. Будьте внимательны: загружайте исходный файл,
а не тот, который представлен на странице.
4. Вставьте LUT-текстуру в документ Photoshop со скриншотом («Выбрать все» в LUT-
документе, «Скопировать», переключиться на документ со скриншотом, «Вставить»)
5. Применить манипуляции с цветом (Color Manipulatuins). Лучше всего сделать это
добавлением отдельного слоя, иначе процесс осложнится)
6. Скопируйте «слияние» (Edit/Copy Merged)
7. Вставьте и сохраните получившуюся текстуру размером 256×16 в каком-нибудь
несжатом формате, принимаемым движком.
8. Выполните импорт текстуры в редактор и назначьте ей группу текстур для таблиц
поиска (ColorLookUpTable Texture Group).
Возможны различные изменения цвета. Вот несколько примеров:
● Яркость
● Насыщенность
● Простой контраст (линейный с ограничениями)
● Высококачественный контраст (кривые с крутой линейной частью посередине)
● Выборочные изменения темных, средних и светлых областей изображения.
● Выборочные изменения определенных цветов (лучше всего подходит то цветовое
пространство, в котором яркость выделена в отдельных канал, к примеру, LAB)
● Корректировки могут быть даже выполнены в различных цветовых пространствах (так, в
LAB яркость и цвет независимы друг от друга, что крайне полезно)
Depth of Field
Глубина резкости (DoF) применяет размытие к сцене, основываясь на расстоянии от фокуса.
Так происходит симуляция камеры из реального мира. Эффект применяет для акцентировании
внимания зрителя на определенном предмете или для достижения большего реализма
изображения.
Типы глубины резкости
В Unreal Engine 4 присутствует три реализации глубины резкости: Боке, по Гауссу и
Радиальная
143
144
● Объекты в переходном регионе смешиваются линейно с неразмытым слоем сцены и
размытым, основываясь на их собственном положении.
Все уровни могут быть визуализированы. Для этого нужно установить флажок у параметра
«Depth of Field Layers show» («Показывать слои глубины резкости»). Ближний регион – зеленый,
дальний – синий, фокусный – черный.
Улучшенная нами версия этой визуализации также включают в себя много интересного:
145
Расстояние (в единицах Unreal Engine) за фокусной дистанцией, где также будет
фокус.
Focal
Region
Near Расстояние в единицах Unreal Engine от фокусного региона ближе к камере, где будет
Transitio переход от фокуса к размытию. При использовании глубины резкости по Гауссу.
n Range
146
Расстояние в единицах Unreal Engine от фокусного региона в сторону от камеры, где
будет переход от фокуса к размытию. При использовании глубины резкости по Гауссу.
Far
Transitio
n Range
147
Максимальный размер (в процентах от ширины изображения) для размытия в
эффекте глубины резкости Боке (заметьте: затраты на просчет масштабируются в
соответствии с формулой: «размер*размер»). Примерный вид функции,
используемой для вычисления размеров Боке на любой дистанции, изображен ниже:
Max
Bokeh
Size
148
Максимальный размер (в процентах от ширины изображения) ближнего размытия для
глубины резкости по Гауссу (заметьте: затраты на просчет растут с размером).
Near Blur
Size
Far Blur Максимальный размер (в процентах от ширины изображения) дальнего размытия для
Size глубины резкости по Гауссу (заметьте: затраты на просчет увеличиваются с размером).
149
Текстура, определяющая форму Боке при выходе объектов из фокуса (не
Shape
смешивается).
Occlusio Контролирует количество «размытой» геометрии, которая выйдет за пределы своего
n обычного силуэта и непрозрачности. Значение 0.18 обеспечивает хороший результат.
Значение 0.4 может потребоваться для решения проблем с «утечкой» или
пропаданием цветов. Крайне малые значения (менее 0.18) сводят на нет эффект
размытия, хотя отлично работают, когда объекты находятся близко к камере.
150
Color Граница, за которой адаптивная глубина резкости переключается на использование
Threshol полного разрешения, основываясь на цвете. Малые значения обеспечивают
d обработку большей части сцены в полном разрешении.
Size Граница, за которой адаптивная глубина резкости переключается на использование
Threshol полного разрешения, основываясь на размере. Большие значения обеспечивают
d обработку большей части сцены в полном разрешении.
Искусственное расстояние, на котором небо находится в фокусе (к примеру, 200000).
Sky
Значения <=0 отключают функцию. Применяется только для глубины резкости по
Distance
Гауссу. Может сильно повлиять на производительность.
151
Адаптивная глубина резкости (Adaptive DoF)
Глубина резкости Боке по умолчанию рендерится в ¼ разрешения (1/2 в каждом
направлении) по причинам производительности. В большинстве случаев, субдискретизация едва
заметна. Однако, она может вызывать артефакты и нежелательные результаты в некоторых
ситуациях.
Вы можете заметить, что размытие у персонажей на заднем фоне имеет дефекты при
использовании одной лишь субдискретизации глубины резкости (downsampled DoF ). Помимо
этого, заметны артефакты вокруг рогов персонажей переднего плана. Устранить эти проблемы
можно с помощью адаптивной глубины резкости, в этом случае персонажи на заднем плане
выглядят лучше.
Адаптивную глубину резкости можно визуализировать, если установить флажок «Adaptive Depth
of Field show» («Отображать адаптивную глубину резкости»). Так можно увидеть, где
использовалась субдискретизация (зеленый цвет), а где – полноэкранный эффект (красный цвет).
Обычный цвет сцены обозначает те области, к которым не применено размытие.
В общем, вы хотите везде использовать зеленый цвет. Ведь, чем больше красного, тем
больше будут затраты на рендеринг.
152
Свойство Описание
Технология адаптации основывается на значении, полученном из гистограммы
яркости цвета сцены. Оно определяет нижний порог, используемый для вычисления
Low среднего значения освещенности. Лучше всего не ограничивать светлые области
Percent изображения, именно для этого приходится игнорировать некоторые темные части.
К примеру, значение 80 ограничит 80% темных участков. Значение параметра
должны находится в промежутке [0; 100], наиболее приемлемый – от 70 до 80.
Технология адаптации глаз основывается на значении, полученном из гистограммы
яркости цвета сцены. Оно определяет высший порог, используемый для вычисления
High среднего значения освещенности. Мы советуем списать несколько процентов,
Percent поскольку вполне нормально иметь несколько ярких пикселей (для солнца, к
примеру). Значение параметра должно находится в промежутке [0; 100], наиболее
приемлемый – от 80 до 98.
Минимальная яркость, к которой приспосабливается глаз. Значение должно быть
Min
больше 0 и <= EyeAdaptationMaxBrightness. Фактические значения основываются на
Brightness
диапазоне, используемым контентом.
153
Максимальная яркость, к которой приспосабливается глаз. Значение должно быть
Max
больше 0 и >= EyeAdaptationMinBrightness. Фактические значения основываются на
Brightness
диапазоне, используемым контентом.
Speed Up Скорость адаптации при переходе от темного окружения к светлому.
Speed
Скорость адаптации при переходе из светлого окружения к темному.
Down
Контролирует смещение экспозиции. Логарифмическое значение:
0 — изменений нет
-1 — половина яркости
Auto
-2 — четверть яркости
Exposure
1 — удвоенная яркость
Bias
2 — учетверенная яркостьДробные значения, к примеру, 1,5, или значения, не
приведенные в примере, также работают отлично. При активной адаптации глаз,
они будут добавлены к автоматической экспозиции.
Адаптация глаз – гистограмма, основывающаяся на следующем принципе:
● Скажем, EyeAdaptationLowPercent равно 80%, а EyeAdaptationHighPercent — 95%.
● Теперь осмотрим гистограмму:
o 80% пикселей дисплея темнее, чем значение яркости A;
o 95% пикселей дисплея темнее, нежели значения яркости B;
o Среднее между A и B и есть данная яркость сцены (C).
● Глаз будет адаптироваться к этому значению. Но так как привыкание к темноте обычно
происходит медленнее, мы можем настроить эти значения по-разному: EyeAdaptionSpeedUp и
EyeAdaptionSpeedDown.
● К тому же, глаза не адаптируются идеально, поэтому мы ограничиваем процесс
следующими параметрами: EyeAdaptationMinBrightness и EyeAdaptationMaxBrightness.
Гистограмма
Свойства гистограммы используется автоматической функцией адаптации глаз: технология
изучает её для имитации процесса.
Введя консольную команду ShowFlag.VisualizeHDR 1, можно увидеть гистограмму.
154
Lens Flare
Lens Flare, или эффект линз — технология, симулирующая рассеивание света и бликов от
ярких объектов вследствие несовершенств линз камеры.
Свойство Описание
Tint Оттенок цвета всего эффекта.
Значение, определяющее минимальную яркость пикселя, вызывающую эффект
линз. Большие значения предотвращают размытие слишком темных объектов,
Threshold
что повышает производительность. Ведь затраты на просчет растут линейно
вместе с количеством пикселей, перешедших порог значения.
Увеличивает радиус формы. Возможное использование: улучшение качества
Bokeh Size
эффекта и производительности (2x радиус -> 4x скорость заполнения).
Bokeh Shape Текстура, используемая для определения формы эффекта.
Lens Flare Tints
1/2/3/4/5/6/7 Оттенок цвета каждого отдельного эффекта
/8
Материалы постобработки
График постобработки (Post Processing Graph)
Движок уже имеет полноценную постобработку, основанную на графе узлов постобработки.
Помимо этого можно, в некоторых особых случаях, использоват, материалы постобработки.
В данный момент граф занимается не только процессом постобработки, но и освещением. Со
временем, мы планируем сделать большее количество вещей, изменяемых через редактор
материалов.
Граф создает временные render targets (без смешивания буферов кадров (framebuffer
blending). Это значит, что, если вам необходимо изменить исходный цвет объекта, то придется
пользоваться шейдером.
Использовать материалы постобработки необходимо в малых количествах и лишь в случае
крайней необходимости. Когда бы то ни было, будь то цветокоррекция, блюм, глубина резкости
или что-то подобное, используйте волюм постобработки, который был специально
оптимизирован для этих целей.
Использование материалов постобработки
Посредством настроек постобработки (обычно определяемых в волюмах постобработки или
параметрах камеры) возможно смешивание, так называемых, «смешиваемых» ассетов
(«blendable assets»). Движок уже имеет несколько материалов постобработки, но эта его
особенность позволяет создавать, рендерить и смешивать пользовательские PostProcessing
Material без помощи программистов.
Достаточно применить один или несколько материалов (в качестве смешиваемых) к эктору
волюма постобработки в секции «Misc» («Разное»). Для этого сначала нажмите +, чтобы добавить
новый слот, затем выберите материал в браузере контента и нажмите стрелочку, дабы применить
его. Стоит знать, что неиспользуемые слоты будут просто проигнорированы движком.
155
Пример материала постобработки
Вы можете посмотреть пример постобработки в этом уроке: «Пример материала
постобработки».
Важные настройки
В первую очередь, для материала постобработки необходимо указать домен материала:
Blenda
Описание
ble Location
PostProcessInput0 обеспечивает доступ к данным о цвете сцены со всем
Before освещением в HDR. Используйте этот параметр для исправления артефактов,
Tonemapping связанных с временным сглаживанием (temporal antialiasing) и lookups G-буфера,
такими как глубина, нормали и подобное.
Предпочтительное расположение прохода для производительности,
After поскольку цвет представлен в LDR и, естественно, требует меньшей точности и
Tonemapping пропускной способности. Применяется после тональной компрессии и
цветокоррекции.
Обычный вход постобработки находится перед проходом. Поэтому при использовании
PostProcessInput0 цвет может быть применен через SceneTexture. Использование SceneColor в
некоторых случаях не даёт правильного результата.
156
Смешивание различных типов материалов
С волюмами постобработки крайне просто настроить плавный переход между различными
материалами постобработки. Так мы используем один волюм, помеченный как непривязанный и
имеющий большой радиус смешивания (около 1000):
Для каждого волюма мы определяем различный тип одного и того же материала. Цвет
указывается как параметр, что и позволяет иметь различные настройки для разных типов
материала.
Основываясь на положении камеры, используются настройки одного волюма:
157
Нода имеет необязательный вход и несколько выходов:
158
Но здесь нам несколько мешает сглаживание, поскольку пиксель/тексель G-буфера больше
не относится как 1:1 с итоговым пикселем (смотрите секцию ниже).
CustomDepth
Эта особенность предоставляет возможность скрывать определенный объект путем его
рендера в буфер глубины, называющийся пользовательским буфером глубины (Custom Depth
Buffer). Этот метод увеличивает количество вызовов отрисовки при том же количестве
материалов. Рендеринг получается крайне дешевым, поскольку на выходе лишь глубина.
Функция активируется для мешей («Static Mesh Properties / Render Custom Depth»; Настройки
статичного меша/Рендер пользовательской глубины):
159
Временное сглаживание или Почему G-буфер «дрожит»
Временное сглаживание – это уникальная особенность UE4, которая отлично влияет на
качество изображения, потребляя при том среднее количество ресурсов.
По умолчанию, материал постобработки вставляется в конец графа (после тоновой компрессии).
Это означает, что вы получаете финальное LDR-изображение после тоновой компрессии,
цветокоррекции и применения временного сглаживания. И это лучший вариант для простых
эффектов постобработки с точки зрения производительности и легкости использования.
Здесь вы можете увидеть, как мы использовали вход пользовательской глубины для визуализации
силуэта определенных объектов:
160
Мы получили стабильное и сглаженное изображение. Правда, как говорилось, в движении
можно наблюдать появление артефактов, связанных с временным сглаживанием. Из-за
использования буфера глубины для перепроецирования старого изображения. В случае
рендеринга краев внутри объекта, все работает хорошо, но как только мы назначаем рендер
краев поверх объекта, появляются артефакты. Для того, чтобы их избежать, требуется настроить
буфер глубины (эта функция пока не реализована полностью и потребляет слишком много
ресурсов).
Заметьте, что TemporalAA (Временное сглаживание) еще в процессе разработки.
Известные проблемы
● Блок материала SceneTexture
o Separate Translucency не работает.
o Отфильтрованные (билинейно) lookups не работают.
o Определенные lookups не работают в некоторых проходах (возможно, не все из них будут
исправлены, ввиду больших затрат ресурсов компьютера).
o MaterialFunction может выдавать ошибку, хотя и продолжать работать с доменом
постобработки.
● Материалы
o UV в PostProcesMaterial не может принимать значения из промежутка от 0 до 1(например,
при уменьшении размеров вьюпорта).
o Миниатюра ассета с материалами постобработки отображается неправильно.
o Альфа-канал в качестве выхода пока не поддерживается (используйте «Opacity»
(Непрозрачность).
o Предпросмотр материала в редакторе материалов отображается неправильно.
o В некоторых случаях изменение материала ни к чему не приводит в постобработке. Для
исправления – перезагрузите редактор.
o Браузер контента должен позволять легко фильтровать материалы постобработки.
o Режим смешивания материалов не работает для материалов постобработки.
● Смешивание
o При смешивании двух волюмов постобработки, возможно проявление неаккуратного
перехода. Это можно избежать, если использовать непривязанный волюм со стандартными
настройками материала.
161
Blendables
Blendables – ассет, имеющий свойства, позволяющие ему аккуратно смешиваться с другими
такими же. Мы в Epic Games чаще всего используем Blendables для PostProcessMaterials, но эта
система подходит для всего, что зависит от вида (т.е. в основном, для связанного с камерой).
Blendable
Ассеты Blendable уже реализованы в движке, хотя и используются только для
PostprocessMaterils / PostprocessMaterialInstances. Тем не менее, по идее, основная задача
Blendable – предоставить возможность смешивать произвольные данные (как наиболее
подходящие примеры: линейные значения, цвета) для выдачи результатов любой из подсистем.
К примеру, в случае со сплит-скрином вы сможете раздельно реализовывать постобработку
для каждого из экранов.
Blendable – это объект, который имеет IBlendableInterface, в данный момент реализованный
следующими типами ассетов:
● PostprocessMaterials
● PostprocessMaterialInstances
● LightPropagationVolumeBlendable
Контейнер Blendable находится в PostProcessSettings, которые имеются у следующих
объектов:
● PostProcessVolume
● PostProcessComponent
● SceneCaptureActor
● CameraComponent
Ассет LightPropagationVolumeBlendable создан как пример создания нового blendable и
замены существующих PostProcessSettings. Эта система работает хорошо с малым количеством
настроек, в других случаях нужна более сложная система.
162
Blendable в контент-браузере имеют собственную категорию – «Blendable». Можно
использовать кнопку «Add New» или отфильтровать ассеты по категориям.
Плюсы новой системы:
● Простота расширения и обновления (нет необходимости менять целую единую структуру,
можно просто создать отдельный модуль)
● Гибкие связи между пакетами позволяют работать с контентом без определенного уровня
доступа (СКВ)
● Они же дают возможность использовать один ассет во многих случаях (уменьшение
избыточности, большая гибкость)
● Возможно создание отдельного UI для каждого blendable (гораздо сложнее делать это с
единой структурой)
● Каждый экземпляр blendable имеет свой «вес», как и ассеты (см.
LightPropagationVolumeBlendable), благодаря чему легко определить «вес» каждому свойству
● Разбиение крупной структуры упрощает работу с блупринтами, делая её эффективнее и
лаконичнее.
Контейнер Blendables
Контейнер реализован как массив «весов» и ссылок на lendableInterface.
Открыв параметры PostProcessVolume и посмотрев на массив blendable, вы увидите массив
«весов» с ссылками на ассет blendable. Значения «веса», как правило, располагаются в
промежутке от 0 до 1. А ссылки указывают на ассеты, расположенные в пакете (созданном в
браузере контента) или в объекте, содержащем массив blendables.
163
перезаписывая прежние данные. Запомните, данные множества волюмов (или других объектов)
комбинируются.
Примечание: Хорошим тоном считается иметь несвязанный «глобальный»
PostProcessVolume с низким приоритетом на уровне. Для получения полного контроля над всем
уровнем вы можете добавить несвязанный волюм с высоким приоритетом. Тогда, для проверки
наличия эффекта у blendable, вам достаточно изменить его вес до 0 и обратно.
Blendable в пакете: как часть объекта (к примеру, волюма)/динамически созданные в
блупринте
Это ваш выбор, но мы советуем метод с пакетом (ссылаться на ассет в пакете), так как это
позволяет минимизировать конфликты в системе контроля версий. Для максимальной гибкость,
конечно, можно создавать blendable прямо в блупринте. Так как блупринты, по сути, форма
программирования, передача параметров в UI равносильна их жесткому определению в коде.
Хотя последний метод считается менее гибким для других разработчиков.
164
Переменная ‘BlendableVar’ типа LightPropagationVolumeBlendable (Object Reference)
используется в качестве ссылки на ассет под названием LightPropagationVolumeBlendable ‘LPV0′.
С блупринт-функцией ConstructObjectFromClass вы можете создавать новый blendable
непосредственно в блупринте. Соединяя вход «Outer» нового объекта с объектом, имеющим
контейнер blendable, вы добьетесь аналогичного поведения, если бы создавали объект в UI.
165
Scene Fringe
Fringe
Intensity
166
Vignette – Виньетирование. Эффект затемнения по краям изображения при использовании
обычных линз. Высококачественные линзы стараются компенсировать его.
Настройки виньетирования можно найти в настройках постобработки под вкладкой Scene
Color.
С
войств Описание
о
Обеспечивает затемнение по краям экрана. Не влияет на блюм (из-за возможных
проблем с производительностью, но при необходимости, можно изменить настройку).
Возможное использование: симуляция несовершенств камеры.
V
ignette
Intensi
ty
0.0 1.0
167
Аудио и звуки
Звуки
168
1. В Content Browser, нажмите кнопку Import (на фото ниже).
Есть несколько различных типов звуковых ассетов, которые могут быть добавлены к вашим
проектам, они описаны ниже.
169
Sound Cue
Реверберация
Эффекты реверберации являются ассетами с несколькими свойствами, которые могут быть
легко отрегулированы и применены к любому звуку, помещенному в ваш уровень. С эффектом
реверберации, вы можете настроить многие параметры (на фото ниже),
что позволит вам контролировать элементы, такие как эхо, общий коэффициент усиления
реверберации, поглощение воздухом, и многое другое.
170
Sound Class
Sound Class представляют собой набор свойств, которые могут быть применены к ряду
звуковых ассетов.
Свойства определенные внутри Sound Class будут осуществляться всеми звуковыми ассетами,
определенным к этому классу.
Иерархии могут быть созданы путем добавления дочерних классов, которые позволят вам
перенести вниз только специфические свойства из родительского класса. Вы можете подключить
класс внутри Sound Class Editor, который имеет подобный Cue Editor Sound интерфейс.
171
Вы можете также добавить звуковое смешивание (смотрите раздел Sound Mix ниже)
к Sound Class, которые будут активироваться автоматически всякий раз, когда звук класса играет
(например музыка может включаться автоматически когда проигрывается звука с классом
диалога).
Sound Mix
Sound Mix позволяют устанавливать настройки эквалайзера и изменения громкости и
высоты тона в свойства Sound Class.
172
Dialogue Wave представляет собой единую линию диалога и основной компонент
настроек Dialogue Voice является разделом Dialogue Contexts.
173
● Идентификация Sound Class, который должен быть использован в Volume Ducking.
● Когда звук из этого Sound Class срабатывает, другие Sound Class начинают уменьшаться в
объеме (Sound Mix: Fade In Time = 0,3 секунды).
● Укажите количество других Sound Class уменьшающихся в объеме (Sound Mix: Volume
Adjuster = 0,4).
● Когда звук из Sound Class останавливается, другие классы увеличиваются в объеме и
возвращаются к нормальной громкости (Sound Mix: Fade Out Time = 0,3 секунды).
● Вы можете также исключить Sound Class в процессе приглушения (например, музыки).
Этот подход будет гарантировать, что акцент делается на важных аспектах вашего аудио и
что он не «утонет» под поверхностными или не-важных звуковыми элементами.
Оптимизация использования памяти
Когда создания контент, то лучше всего использовать самую низкую частоту дискретизации,
которая сохраняет качество звука. Например, диалог в целом по-прежнему звучит хорошо на
22.1kHz,
в то время как обычно эффекты играют с высокими частотами (например, выстрелы), например,
40.0kHz. Аналогичный подход может быть применен к настройке качества.
Аудио файлы
174
4 5 6 7
Форм
. . . .
ат
0 1 1 1
Передний Левый _fl ✓ ✓ ✓ ✓
Передний Правый _fr ✓ ✓ ✓ ✓
Передний
_fc ✓ ✓ ✓
Центральный
Низкочастотный _lf ✓ ✓ ✓
Левый _sl ✓ ✓ ✓ ✓
Правый _sr ✓ ✓ ✓ ✓
Левый Сзади _bl ✓ ✓
Правый Сзади _br ✓
Настройки сжатия настроены для поддержания одинакового качества на всех платформах.
После тестирования множества звуков, наши музыканты определили качество XMA =40
эквивалентно качеству Ogg Vorbis =0,15.
Импорт одного файла
В контент браузере кликните по кнопке Import, затем выберете ваш файл в окне поиска.
175
Экспорт мультканального ассета будет произведён в моно .WAV файл для каждого канала с
соответствующим наименованием.
Редактор звукового сигнала
176
3. Введите имя вашего нового звукового сигнала.
Открытие редактора звукового сигнала
Вы можете открыть редактор звукового сигнала путём правого клика по ассету звукового
сигнала в контент браузере, после чего выбрать Edit из выпавшего контекстного меню, либо же
двойным кликом по ассету звукового сигнала.
Audio Node Graph
Audio Node Graph располагается на панели Viewport .Он показывает путь прохождения
сигнала слева направо, с взаимосвязанными нодами представляющими модули контроля аудио и
аудио файлов. Нода вывода, содержащая изображение динамика, представляет собой конечную
ноду выводящую звук таким каким он будет в игре; располагается всегда в крайнем правом
положении по отношению ко всему остальному пути прохода сигнала.
Вы также можете добавить ноды путём выбора их из выпадающего меню когда кливаете
ПКМ в пустом месте графа.
177
Как и с другими редакторами в Unreal Editor основанных на нодах, вы можете ввести текст в
поле поиска, чтобы динамически фильтровать список нод, который появляется в контекстном
меню.
Если у вас есть нода, то вы можете добавить новую ноду, путём вытягивания соединения и
выбора новой ноды из выпадающего списка.
178
Behavior Tree(Искуственный интелект)
179
выражение вы увидите свойства Behavior Tree в свойствах на панели Details где вы
можете задать Blackboard ассет вашего Behavior Tree
180
Создание Blackboard
Вы можете создать Blackboard ассет используя ContentBrowser.
181
Создание задачи (Blueprint)
182
Или переключением текущего редактора Behavior Tree в Blackboard Edit Mode
Добавление ключей
1. Нажмите на кнопку
2. Выберите тип добавляемого ключа
3. Дайте название ключу
4.
Удаление ключей
1. Выберите ключ
2. Нажмите на Delete
Переименование ключей
1. Выберите ключ, который вы хотите переименовать
2. Нажмите правой кнопкой и выберите Rename(либо нажмите F2)
3. Введите новое имя ключа
Объектые ключи
Ключи объектного типа выделяются тем, что вы можете поменять их вид. Это позволяет вам
хранить ссылку на объект не только Actor, но и ссылку на объект конкретного типа (например
Character), благодаря чему не потребуется преобразование классов через Cast внутри задач.
Так некоторые Декораторы и Сервисы функци требуют ключи объектного типа, это то как вы
меняете Object тип в Actor тип.
1. Выберите Object Key
2. На панели Details разверните свойства Key Type
3. Измените Base Class свойства к желаемому Object Type.
Редактирование Behavior Tree
Вы можете редактировать Behavior Tree через двойной клик в Content Browser чтобы
открыть редактор Behavior Tree
183
Настройка Blackboard ассета для использования
1. Выберите запись Root из Behavior Tree (или уберите выбор выражений)
2. На панели Details задайте желаемый Blackboard ассет
Удаление выражения
1. Выберите выражение левой кнопкой мыши.
2. Нажмите кнопку Delete
Соединение выражений
Соединение выражений в Behavior Tree подобно соединению выводов в Blueprint. Тем не
менее, основным различием является направление соединений: вы можете подключить выход ко
входу.
Чтобы соединить выражения:
1. Нажмите левой кнопкой мыши на выход и зажмите ее
2. Перенесите курсор ко входу
3. Отпустите левую кнопку мыши
184
Отсоединение выражений
1. Нажмите правой кнопкой мыши по соединению для вызова контекстного меню
2. Выберите “Break Link(s)”
1. Кликнете правой кнопкой мыши на Composite или Task node чтобы вызвать
контекстное меню. Лучше нажимать на левые или правые края.
2. Выберите Decorator или Service который вы хотите добавить к выражению
Удаление Decorators и Services из выражений
1. Выберите Decorator или Service на выражении нажав левой кнопкой мыши
(Decorator или Service обведется красным контуром)
185
Редактирование Decorators и Services
1. Выберите Decorator или Service на выражении нажав левой кнопкой мыши
(Decorator или Service обведется красным контуром)
186
Изменение задачи (Blueprint)
Вы можете дважды кликнуть на расположенное выражение в редакторе Behavior Tree чтобы
открыть ее в Blueprint редакторе.
Или вы можете дважды кликнуть на задачу в Content Browser.
Редактирование Service (Blueprint)
Вы можете дважды кликнуть на расположенный Service в редакторе Behavior Tree чтобы
открыть его в редакторе Blueprint.
Или вы можете дважды нажать на Service в Content Browser.
Редактирование Decorator (Blueprint)
Вы можете дважды кликнуть на расположенный Decorater в редакторе Behavior Tree чтобы
открыть его в редакторе Blueprint.
Или вы можете дважды нажать на Decorator в Content Browser.
187
Система частиц в UE 4
Введение
Система частиц в Unreal Engine - это хорошая вещь, чтобы моделировать такие вещи, как:
● Лазеры, молнии;
● Дым, пар, огонь
● И так далее.
В этой статье вы узнаете о принципах работы с системами частиц в UE 4.
Шаг 1. Подготовка
Во-первых, перед началом работы с частицей; является ли это или последствия того, что
оружие (например, лазерные пушки и т.п.) требуется программирования, который выходит за
рамки данного руководства. Теперь мы рассмотрим, как работать с ним эффектов. Что бы
работать с частицами, мы нуждаемся в такой структуре. Как правило, точнее, как правило,
требуется горизонтальная текстуру (например, как на скриншоте). В нашем примере мы создали
простой материал, используя следующую структуру:
●
●
Эти текстуры объединены в следующие 'материала' :
После того как мы добавить этот пункт в новой системе частиц, мы готовы сосредоточиться
на пучок частиц (на наших Пучко-образных частиц). Для начала, нам нужно добавить модуль луч.
188
(Щелкните правой кнопкой мыши в 'эмиттер' и selectTypeData > New-Beam Data . Модуль Beam
TypeData щелкнув правой кнопкой мыши в эмиттере и выбор TypeData> Нью-Beam данных.
Это, чтобы создать наш луч. Для дальнейшей настройки, что бы получить что-то интересное.
Используйте следующую таблицу, чтобы начать с того, что будет более подробное исследование
пучка частиц.
Module Properties
Свойство Значение Описание
Lifetime Module
Lifetime 0.0 Время жизни
Beam Data
Module
Beam Method PEB2M_Distan The beam will be calculated via distance along the emitter's X-
ce Axis, rather than requiring a source and target.
Texture Tile 500 Tiles the texture every 500 Unreal Units. Allows animated
Distance pulses to show more clearly.
Max Beam Count 3 Adds in a few more beams, which will look nice once we have
noise.
Speed 0 Beam will travel instantly to its target.
Interpolation 50 Gives the beam some flexibility for the addition of noise,
Points which we will do later.
Distance 1000 Extends the beam 1000 Unreal Units along the X-Axis, giving
us something to work with.
После настроек луч будет выглядить так:
189
Шаг 2: Добавляем случайности
Ваше луч может быть более интересным, вы можете добавить немного шума - искажение.
Это делается с помощью модуля 'Noise' . Он расположен в подменю Луч > Шум .
190
to taste.
Low Freq Enabled Checked Enables
randomization
of noise
points.
Noise Range Vector Uniform distribution. Min:( 0, -50, -50) Max:( 0, 50, 50) Tells the noise
how far it can
move away
from the
beam.
Noise Tessellation 10 Smoothes out
the noise.
Frequency Distance 100 Rounds out
the shape of
the noise.
Вот пример результат нашей работы.
191
К сожалению, этот способ не всегда хорошо; В некоторых случаях, вам нужно будет указать
начальную и конечную точки, а также контролировать процесс между ними. Это можно сделать с
помощью «захвата цели» (источник и цель).
Для начала, мы добавили двух актеров на сцене, что бы они быть использованы в качестве
начальных и конечных положениях. В этом случае, мы будем использовать Замечание актеров.
Вернуться к Cascade, добавьте Источник модуля iTarget для вашей излучателя. Они оба в
суб-луча.
192
Beam Data
Module
Beam Method PEB2M_Target Extablishes that the beam
will require a source and a
target.
Source Module
Source Method PEB2STM_Actor Tells the beam to start at
the location of an actor.
Source Name BeamSource Tells the beam to start at
the location of an actor.
Source Vector Constant This sets the display source
Distribution. Value:(0, 0, 0) in the Preview window to be
0,0,0.
Target Module
Target Method PEB2STM_Actor Tells the beam to end at the
location of an actor.
Target Name BeamTarget This is just a parameter
name and can be anything
you like.
Target Vector Constant This sets the display target
Distribution. Value:(1000, 0, in the Preview window to be
0) 1000,0,0.
Ваше луч не изменится, но теперь он будет иметь начальную и конечную точки луча -
сегмент.
Настройка исходного и целевого параметра луча
Чтобы луч использовать Note actor, как источник и цель, мы должны установить их в
качестве параметров, например, для эмиттера актера. После того, как вы принесли эмиттер луча
на сцену, выполните следующие действия:
● Настройте 2 параметра экземпляра на эмиттере актора. Назовите BeamSource и
BeamTarget.
● Установка и их Тип в PSPT_Actor.
● Установите один из Note Actor в поле Actor каждого параметра.
Когда закончите, ваша панель должна выглядеть примерно так:
193
Ваш луч в настоящее время движется между двумя Note actor-ами:
194