Как сделать зеркало в ue4

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Пришло оповещение на телефон, о выходе нового урока. =)
Спасибо большое за подробное объяснение.

В данном случае старенький source будет выглядеть лучше с его RTR отражениями

Сделайте пожалуста видео "как сделать ландшафт как в игре astroneer" очень интересная система изменения ландшафта.

Может быть неактуально (через три года-то), но использование терминов "Raymarching" и "Marching Cubes" в поисковике поможет.

А будет ли одинаково много съедаться ресурсов если вместо открытой местности отражение будет в небольшой комнате?

Ну да, имеется виду область видимости. Там просто вторая камера рендерит с другой стороны. Соответственно если область сложно отрендерить, то да, производительность упадет сильно.

Наверно все зависит не от загруженности сцены, а от загруженности конкретной области, из которой берется информация для отражения. Если зеркало поставить напротив пустой стены, то по идее нагрузка будет минимальной.

Нет. Не одинаково. Затраты зависят от того, насколько уже сложная и нагруженная сцена.

А может быть Вы могли снять видео по "вкусняшкам" от nvidia таких, как flex, hairworks, waveworks, flame works ?
Как их подключить в UE4 ? И общий обзор ?

пока ты рассказывал, движок запускался и запускался)

Можете сделать туториал по тому теме "Как сделать покачивание камеры при беге" от первого лица желательно. Много где искал даже в гугле, но ничего не нашёл.(может плохо искал)

Ставь камеру на сокет головы модели героя- тогда камера будет повторять движения головы. (надеюсь, что анимация при беге у тебя есть)

на сокете ставь

Можешь подсказать сайт, где можно брать музыку для коммерции, что бы все легально было?))

Погугли Creative Commons и найдешь сайты и с музыкой под этой лицензией)

Почему у меня на этапе создания всё норм, а в игре оно работает через жопу? ставлю его на воду, в игре отражений вообще нет, ставлю на зеркало, отражения есть, но почему-то только под определённым углом. В чём дело?

Мда, у меня на i7 10 пок. 20 мин открывался при рестарте)

Ждем по машинам урок .

Звук чуть громче делай,а то оч тихо.

Не работает на версия 4.13 и выше

Как это, всё работает.

дерьмо какое-то на играх с unreal engine 1 были нормальное зеркала отражающие в полном разрешении и не требущие практически никаких дополнительный ресурсов

Ну, спасибо за пояснение

Ресурсы всегда требуются, ибо зеркало должно рендерить с другой стороны сцену. Если в UE1 вы не видели изменений в фпс, это не значит, что они требовательны. Вполне возможно, что у сама игра не была требовательна и ресурсов вполне хватало для зеркал.

Тут тоже самое. Если вы сумеете оптимизировать графику так, что для зеркал останется достаточно ресурсов, игрок не заметит разницу.
В общем-то хорошо запомнить одно правило:
Оптимизация игры и затраты ресурсов зависит не от движка, а от разработчика.


Всем привет! Меня зовут Влад Маркелов, и сегодня я расскажу, как можно бесплатно и быстро создавать огромные игровые уровни и как в реальном времени строить ландшафт по информации из Интернета.

Но прежде, чем перейти к сухим техническим деталям, небольшое лирическое отступление, о чем вообще эта статья и как я до этого докатился.

Немного предыстории


Гораздо позже пришло осознание, что если это и возможно, то в не той детализации. Яркий пример тому — игра Microsoft Flight Simulator. Хоть карта в ней была сделана и не полностью процедурно, детализация при ближайшем рассмотрении оставляет желать лучшего — за исключением городов и особо красивых природных мест, да и те хорошо выглядят только с высоты низкого полета, порядка нескольких сотен метров. Но и эти масштабы работы уже впечатляют.


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

Однако, если мы готовы пожертвовать качеством на некотором масштабе — пусть даже на той же высоте полета, — мы можем воспроизвести любую местность на планете: хоть всю планету целиком, благо данных в Интернете более чем достаточно. Отличным примером может послужить и тот же Microsoft Flight Simulator, либо Google Earth, которая строит 3D-ландшафт из открытых данных. Как правило, они захватываются со спутника и практически не подвергаются ручной обработке. И раз эти данные есть, мы можем их получить и построить свой ландшафт, с блэкджеком и лодами, ограниченный в масштабах лишь мощностью компьютера.

Вводные данные: что будем делать

Несколько лет назад у меня появилась задача для софта, который служит для создания заранее заготовленных программ полета для дрона или для отрисовки уже совершенных полетов преимущественно не в городе. Изначально он тестировался на уровнях, заранее заготовленных левел-артистами, и не подразумевал особого разнообразия. А пользователи — они же такие, вряд ли захотят летать только по паре локаций. Так возникла острая необходимость воспроизвести в игре абсолютно любой ландшафт, до которого в теории может добраться пользователь.

Рисовать все вручную было не вариант. Просить сканировать местность и строить ее с помощью фотограмметрии — тоже. Никто таким замороченным софтом пользоваться не будет.

И тут и возникла идея: почему бы не скачать ландшафт из Интернета?

Однако, к сожалению, готовых мешей взять негде: придется строить самим.

Но! При небольшой доработке этот метод можно использовать не только для загрузки ландшафта в реальном времени, но и для построения обычного ландшафта в редакторе Unreal Engine 4.

Примеры генерации ландшафта через математический шум

Примеры генерации ландшафта через математический шум

Допустим, если в вашей игре есть какая-то реально существующая локация, вместо построения огромного куска территории вручную можно буквально скопировать его с реальных карт. Однако, в этом есть свои нюансы, а чтобы разобраться в них, мы переходим к теории.

Представление данных о планете Земля — как оно бывает

Итак, мы знаем, что все данные о планете хранятся в радиальных координатах. А точнее — в системе мировых геодезических координат WGS 84.


Казалось бы, у нас есть два угла. Мы знаем радиус Земли. И, как в 9-ом классе, умножив синусы углов на радиус, мы получим координату в привычных XYZ-координатах. Но не все так просто:

во-первых, радиус Земли сильно различается в разных точках планеты;

во-вторых, таким образом мы получим поверхность шара.

Игровой мир, в свою очередь, нам представляется скорее как плоскость. Но мы же знаем, что Земля не плоская. И на масштабах всего в несколько километров ее шарообразность уже становится заметной. Если мы хотим как-то экспортировать координаты из игры, ошибки будут еще критичнее. Да и работать с ними, вычислять расстояния и так далее — не особо удобно.

Плоский ландшафт

Плоский ландшафт

Поэтому мы будем использовать другой метод — проекцию Меркатора. Метод довольно старый, был открыт одноименным ученым аж в конце XVI века — ну а сейчас он используется повсеместно.

Пример проекции Меркатора

Пример проекции Меркатора

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

Тут и появляется новая проблема — искривление.

Для наглядности приведу довольно известный пример с расстояниями на Google Maps. На рисунке ниже расстояние, проведенное по кратчайшему пути на 2D-проекции, равно примерно 10 000 км, а вот кратчайшее расстояние, которое Google Maps строит автоматически, составляет уже 9 000 км. То есть, расстояние, проведенное по прямой на глобусе, отличается более чем на 10% от расстояния, проведенного по 2D-карте.


Если бы размер стран на плоской карте совпадал с реальным, Гренландия оказалась бы в три раза больше Австралии, а крошечная Новая Зеландия поравнялась бы с Германией. Ну а размер Антарктиды просто поражает воображение! На ней могла бы уместиться вся остальная суша целиком. А как вам острова Канады в Северном Ледовитом океане? Суммарно они по площади примерно как Колумбия, но на плоской карте готовы потягаться со всей Южной Америкой.


Может показаться, что эти изменения видно только в масштабах целой планеты, но на деле погрешность в десятки сантиметров заметна уже после пары километров — да и погрешность float тоже никуда не исчезает. Думаю, если вы сталкивались с большими игровыми мирами, вам это очень знакомо. В таком случае каждые 2-3 километра передвижения игрока нужно менять опорную точку и, соответственно, центр мира, таким образом повышая точность вокруг текущей игровой зоны, доступной игроку — благо в Unreal Engine 4 это делается парой строчек кода.

Искажение размеров при проекции

Искажение размеров при проекции

Однако, с помощью Меркатора мы можем перевести координаты из WGS84 в XY-координаты вокруг точки опоры и с этим работать дальше.

Загрузка данных о ландшафте в Unreal Engine 4

Итак, пора загружать ландшафт. Грубо его можно разделить на текстуру и карту высот. Для начала разберемся с первым.

В качестве источника текстур я выбрал открытые, быстрые и гибкие Google-карты. Они хранятся в так называемых тайлах в разном масштабе. Вычисление координат тайлов также не является секретом: в Интернете можно найти и документацию, и реализации на разных языках программирования.

Также нам нужно уметь вычислять границы тайла для загрузки высот. В простейшей реализации все это выглядит примерно так:

Но большую часть этого кода в конечном итоге мы использовать не будем — сочтем его просто компьютерной магией. В конце концов, нас интересуют лишь две функции: WGS84Bounds и WGS84ToTile.

Теперь, зная широту и долготу, мы можем вычислить нужный тайл. Далее через API Google Maps мы можем его загрузить:

Также для удобства можно написать наследника этого таска, который будет содержать больше информации о тайле. Однако, для универсальности мы сейчас говорим о базовых возможностях UE4. Движок сразу преобразует загруженный таском тайл в нужный нам texture 2D dynamic — наследника UTexture, который мы можем применить к динамическому материалу. Эту текстуру мы получим из делегата OnSuccess.


Асинхронно загружаем нужный тайл с диска или из интернета, применяем его к динамическому материалу

Кроме того, нередко возникают случаи, когда одна и та же область загружается по многу раз. Допустим, игрок любит летать по одинаковому маршруту. Для таких случаев можно сделать кэширование тайлов локально на диске. Загрузить эти тайлы можно будет также с помощью UAsyncTaskDownloadImage и при нужде проверять, есть ли нужный тайл на диске, и только если его нет — загружать из Интернета.

Думаю, не стоит объяснять, что загрузка с диска происходит в разы быстрее. В случае, если ваше приложение распространяется через какой-то сервис — например, Steam, — можно сохранять все эти тайлы в облаке, перенося данные одного игрока на другие машины. Кроме того, благодаря этому методу мы можем хотя бы частично отвязать приложение от обязательного подключения к Интернету.

Пример кода приведен ниже: как вы видите, пришлось несколько ухищряться через render target, поскольку Unreal Engine 4 не поддерживает прямой экспорт динамической текстуры, в отличие от обычной.

Не будем забывать, что для оптимизации можно загружать тайлы и в высоком разрешении, и в низком, то есть — с большим и маленьким зумом. И позже склеить их в материале в одно целое, включая нужные текстуры в зависимости от дальности камеры.

Предположим, каждый наш физический тайл — то есть, геометрия тайла — соответствует по размеру тайлу с высоким разрешением. Тогда, чтобы применить изображение с низким зумом, придется провести небольшие математические операции. Но зато мы сможем использовать одну и ту же картинку сразу на 4, 16, а то и 64 физических тайлах.

Пример такого материала можно посмотреть ниже. В нем как раз используется один тайл с маленьким зумом на сетку 8×8 из маленьких тайлов — то есть, одна картинка на 64 тайла.


Рисунок ниже показывает смену тайла с разрешением 19 на тайл с разрешением 16 при удалении от объекта:


А вот, кстати, и площадь Европы, загруженная в реальном времени из движка лишь по двум числам:


Но плоскую карту мы можем увидеть и в Google Maps — такое нам не интересно. Поэтому пора загружать карту высот.

Загружаем информацию о высоте

Воспользуемся сервисом Airmap. Это довольно глобальная платформа для получения информации об объектах в воздухе, опасных зонах и многом другом. Но нам интересно именно elevation API, которое и поможет нам получить информацию о высоте любой точки Земли. У Google есть свой аналог, и, возможно, он даже лучше, но он платный. Им я не пользовался, так что ни рекомендовать, ни предостерегать не буду.

У выбранного API довольно скромный набор запросов, но для ваших целей хватает:

Запрос для получения массива высот по массиву координат — в нашем случае с ним придется перебрать все точки на карте, так что он разрастется непомерно, такое нам не подходит;

Запрос высоты по направлению от A до B — чуть лучше, но тоже не то.

Но есть и вариант для нас идеальный: мы можем запросить 2D-массив, покрывающий всю площадь от угла A до угла B. Координаты передаются просто через запятую: самая южная широта, самая западная долгота, самая северная широта и самая восточная долгота.

Тут важно понимать, что у API есть свои ограничения, а именно — максимальное число точек, которое нам могут прислать (10 000). Такое количество приходится на площадь где-то между 15 и 14 зумом тайлов Google Maps. Так что самый большой тайл, высоты которого мы можем загрузить одним запросом, — это тайл с зумом 15 и небольшим запасом с каждой стороны. Поскольку плотность сетки высот никак не связана с Google Maps, а API возвращает высоту по меньшей площади, если на углах нет точного совпадения, стоит запрашивать площадь на 3-5% больше реальной площади тайла, чтобы все его высоты наверняка попали в полученный результат.

Составим такой запрос:

И получим на него примерно такой ответ:

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

Ниже схематично можно увидеть разницу в площадях, а также в плотности полученных высот и реальных вертексов тайла.


Из-за этих различий нам нужно написать алгоритм интерполяции. В самом примитивном варианте нам нужно вычислить координаты каждого вертекса на полученной площади и найти четыре ближайшие точки к его позиции, а после этого вычислить высоту, спроецировав точку на плоскость. Это можно сделать, например, с помощью встроенной в UE4 функции PointPlaneProject.

На графике ниже видно расхождения между реальным ландшафтом (красной линией) и построенным в игре (синей линией). Изображение схематичное, но весьма наглядно отображает проблему.


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

Черной пунктирной линией на графике показана кубическая интерполяция по трем точкам — но это в 2D-плоскости, учитывая высоту и одну из оставшихся координат: либо X, либо Y. В 3D-пространстве картинка будет сложнее — в виде хитрой искривленной поверхности, которая уже ближе подходит к действительности, хоть и не идеально совпадает. Но стоит помнить, что мы ограничены во вводных данных.

Перевести информацию из JSON в понятный движку формат можно с помощью встроенных в Unreal Engine 4 утилит для работы с JSON:

Сначала мы сериализуем полученную строку в FJsonObject с помощью TJsonReader и FJsonSerializer;

Далее идем по древу JSON и получаем из него нужные значения в формате JSON;

После этого переводим их в удобные нам типы данных.

В чем хранить высоты, в целом не столь важно: можно даже в int, тут скорее вопрос удобства. А вот широту и долготу обязательно хранить в double: float катастрофически не хватает точности для описания всей планеты. Также мы могли бы воспользоваться встроенной функцией JsonObjectStringToUStruct, но, к сожалению, UE4 не поддерживает рефлексию для double и для вложенных массивов — а в ответе Airmap мы получили именно такой.

Далее с помощью procedural mesh component создаем сам меш из уже загруженных и посчитанных высот. Этот компонент, по сути, позволяет нам в режиме реального времени задать массив вертексов, треугольников, цветов вертексов, разметку UV-карты для правильного нанесения текстур и из всего этого собрать секцию меша.

Ниже — пример построения плейна 100×100 см из 25 вертексов. Конечно, предварительно надо не забыть обновить высоты вертексов.

С помощью dynamic material instance задаем одну или две текстуры — для большого и маленького зума: количество маленьких тайлов в большом зуме, индексы маленького тайла в большом зуме по X и Y — так для N тайлов. Таким образом, нам нужно получить от игрока всего одно значение широты и долготы. Более того — мы можем встроить в игру поиск координат по названию локации, используя API Google Maps.

Результаты

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

Однако, если не обращать внимание на такие мелкие недочеты, смотрите, что у нас получается. Вот, например, Эверест:



А это — Большой каньон:



Ну вот и все: с этой темой разобрались. В комментариях буду рад ответить на вопросы и вообще подискутировать на тему.

Напоследок оставлю ссылку на свой сайт — на нем можно ознакомиться с другими моими статьями.

Почему Unreal Engine?

Берлинская квартира

Я создавал серию изображений этой квартиры в историческом здании в Берлине начиная с 2013 года с помощью 3ds Max с Corona Renderer. Это гибкий способ обработки цветового отображения, которое действительно помогло раскрыть светлое настроение этой сцены . Также это было причиной выбора для тестирования UE4.Я заметил, что UE4 весьма успешно используется в сценах с мрачным освещением и шумными текстурами. Я подозревал, что это будет не так просто получить точную тень и GI (Global Illumination) в ультра белом интерьере.И, честно говоря: Это непростая задача!

Выше – оригинальный рендер сделанный в 3ds Max и Corona Renderer. Для того, чтобы увидеть остальные изображения, нажмите здесь .

Ниже видео готовой сцены

Начну с начала:

Оригинальная СценаМоделирование было сделано в 3dsmax в спешке. Так что я на самом деле подробно остановлюсь только на тех частях, которые отражены в финальных изображениях. Этот подход, конечно, не возможен в средах реального времени. Для изменения назначения цели при использовании в Unreal Engine мне пришлось немного сократить масштабы, потому что меблировки и детализации всего пространства заняло бы слишком много времени для тестирования.

Я решил экспортировать только две комнаты: их вы видите на нижней части скриншоте выше.

Экспорт геометрии для Unreal Engine-это очень непростая задача, ЕСЛИ у вас несколько идей!Есть смысл разделить эти идеи на части. Потому Lightmass рассчитывается в отдельной карте для каждого объекта, это хорошо, чтобы быть немного осторожным с высокими значениями особенно на больших плоских объектах, таких как стены и потолок. Из-за этого я только экспортировал внутренние поверхности стен, которые мы на самом деле видим.Я также добавил немного к верхней и нижней части стен, чтобы пересечь их позже с потолком. Я думаю, что это хороший способ для предотвращения “световых протечек” – световые артефакты, проявляющиеся когда геометрия не закрыта или не пересекается. Это не проблема, когда это мрачная сцена с задействием большого количества текстур – но, так как мы хотим получить сверх-белое пространство,то важно создать точное GI (глобальное освещени), какое только возможно, особенно в углах.

Вторая важнейшая вещь – создать развертку скоординированную для канала GI, которая будет сохранена для просчета lightmass в UE. В 3ds Max это будет UV-канал 2.Канал 1 предназначен для использования всех других текстур, таких как диффузия, шероховатость, нормалей, и т.д. Unreal Engine рассчитывает каналы, начиная с 0, что может вызвать некоторую путаницу в начале – но как только вы это усвоите, то поймете,что это просто.Примечание: Сделать развертку важно только для канала карты света (light-map)! Для канала текстуры любой вид отображения может работать, например, кубический или цилиндрический. В большинстве случаев операция flatten mapping в 3ds Max модификатора Unwrap (получение развертки где порог, градус разворачивания можно задать) достаточно для получения UV координат.

Если вы хотите получить все объекты в сцене в UE4 как это было в вашей макс-сцене, то необходимо модготвоить модели, чтобы вставлять их на места где они были при экспорте. Для одиночных объектов, таких как стулья, удобно экспортировать в Unreal Engine один раз и копировать уже внутри. Для этого нужно подвинуть объекты ближе к центру в вашей 3ds Max сцене, потому что центр объекта (pivot) в UE будет там же.

52.jpg

62.jpg

Вы видите, я использую высокополигональную геометрию без LOD (уровень детализации) упрощения. Это, конечно, рекомендуется только в небольших сценах, таких как эта, но так как у меня есть опыт сглаживаня геомтерия, и я не хочу чтобы были какие-либо неровные края на моей мебели, то для меня это логично. Хотя я не сомневаюсь,что комната требует оптимизации;).Убедитесь, что ваша геомтрия будут объединены в один объект и элементы имеют различные каждый свой ID материал для обработки различных материалов позднее в UE4!Ну что же,сохраняйте геометрию в разрешении .fbx и переходите в редактор Unreal Engine! Импорт в Unreal Engine 4 Импорт FBX файлы в Unreal Engine 4 работает довольно гладко! Я делал это в несколько этапов.Я подготовил различные файлы, в таком порядке: – Геометрия комнаты в отдельном файле FBX. – Различные файл для моделей, каждый с несколькими объектами в них.Убедитесь, что сняли флажок Combine Meshes (Комбинировать геомтрию) для полученя ваших объектов раздельно и не объединые в один объект!

72.jpg

Материалы

Я весьма прямолинеен и большой поклонник простых установок! Так что пример шейдеров очень прост, состоит из карты диффузности, ненасыщен и смешан с черным цветом. Та же карта корректируется по цвету и инвертируется в канале roughness (шероховатости). Готово.

Normal map была бы здесь излишне, но не ограничивайте себя в исследовании материалов в сцене.

Здесь вы видите деревянный материал, применяемый для кресел и стола – темная древесина с матовым отражением раскрывает структуру и текстуру древесины.На следующем изображении вы видите в два раза больше материалов, которые могут представлять интерес, шторы, подсвеченные солнечным светом – из двустороннего материала.

Вы должны установить Shading Model в “Subsurface” и добавить постоянную ноду со значением меньше, чем 1 и связать с свойством непрозрачности вашего материала, чтобы получить этот эффект.К стакану на переднем плане применен очень простой материал стекла:

Он имеет довольно темный цвет диффузии, нулевой roughness и высокое значение зеркальности. Я также применил Fresnel (эффект френеля-коэффициент преломления) ноду со значением 1,5 для контроля непрозрачности и преломления как в реале. Есть много более сложных способов получения более реалистичного стекла, – но я, честно говоря испытывал некоторые проблемы, чтобы получить контроль над параметрами, так что это простое стекло, кажется, достаточно хорошо получилось.Примечание: я выбрал Two Sided (Двустороний материал) и установил режим полупрозрачности освещениея “TLM Surface” на вкладке Details tab в панели слева.

Материал, который я хочу показать это материал который прменялся к полу, хочу показать потому что это единственный материал, к которому применен normal map

Здесь вы видите материал, с диффузным цветом, шероховатой текстурой и нормальной картой. Цвет светло-серый, со созначением 4Шероховатость выглядит немного сложнее: Слева вы видите ту же карту увеличенную в три раза отличную с TexCoord нодой. Красный канал умножается на другие, а затем подсоединяется как альфа в интерполяции ноды Linear (Lerp), чтобы смешать их значения. 0,3 и 0,2 в этом примере, получаем тонкое шумное отражение на полу досок. Затем дорабатываем с “Power” нодой, чтобы получить нужное количество шероховатости, и этот материал тоже вышел неплохо.Normal опять воздействием TexCoord, а затем развернута через “FlattenNormal” ноду, чтобы получить только тонкий рельеф на материале. Подготовка моделей Перед добавления объектов в вашу сцену, всегда лучше лучше раскидать материалы по геомтерии. Вы должны сделать это только один раз, и сможете применять различные материалы. Это быстрый процесс: Здесь вы видите, как важно применять различные ID материала для ваших объектов, чтобы расположить различные материалы там, где они и должны быть!

Построение сценыЕсли вкратце – импортируйте все вместе. Во-первых, вы должны перетянуть в комнату геометрию. Лучший способ, собрать сцену– перетащить и бросить (drag & drop) в пустую сцену.

Здесь не видино полигоны наружной части стен – как я объяснил выше: они только односторонние для лучшего Lightmass расчета.В таких случаях хорошо бы установить Lightmap (получаемая разверткой) разрешение для ваших больших объектов с высоким значением, для стен, например, я поставил значение 2048.

161.jpg

Освещение и его параметры

Настройки освещения также довольно таки просты: я использовал “метод Koola” – сочетание солнца и пятен света в передней части окна, чтобы имитировать поток света. Это весьма эффективно и просто в управлении! Теперь для расчета глобального освещения важны только несколько настроек

181.jpg

191.jpg

201.jpg

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

221.jpg

При открытии Matinee вы увидите окно с секцией отслеживания и редактор кривых.

Настройка камеры и анимации проста. Движение контролируется ключевых кадрами и кривыми так же, как и в других программах создания анимации. Работа по редактированию ведется только в Matinee editor.

Вы можете видеть траекторию камеры только в редакторе и контролировать редактирование на лету!После того, как примерная анимация сделано в Matinee, я экспортирую анимацию как .AVI и доработавыю её в Premiere и подгоняю под музыку.

Заключение

Alexander Dracott поделился некоторыми своими личными советами и фишками, которые сам довольно часто использует.

Импорт текстур в Unreal 4


Сохранение памяти: текстуры Channel-pack


Одна из особенностей Unreal — это большой объем контроля, который вы получаете, создавая свои собственные материалы. Когда вы создаете несколько черно-белых масок для текстур, таких как roughness или transmission, вы можете сэкономить память, спрятав каждую маску в отдельный канал R,G или B, а затем получив доступ к каждому каналу этой текстуры отдельно.

Физически корректный рендеринг


С появлением новых возможностей рендеринга в движках, таких как Unreal 4, широкую популярность получил физически корректный рендеринг.

Изучение того, как точно должны выглядеть физические свойства материалов с масками roughness и metalness, можно сравнить с тем, как игровые движки работали в прошлом поколении. Эти знания помогают сохранить материалы реалистичными в разных условиях освещения.

Повторное использование текстуры


Еще одним удивительным элементом Unreal 4’s Material Editor является то, что он позволяет повторное использование текстуры. Это поможет вам не только сохранить память, но и сэкономить время. Иногда red channel из rock albedo texture можно использовать как черно белую маску для roughness. Текстуру черепицы из Photoshop можно легко наложить на кирпич, а также смешать с другой текстурой для наложения на другие элементы.

Не накладывайте ненужных текстур


Иногда определенные текстуры не нужны. Для 100% неметаллических материалов, таких как древесина или грязь, текстура металла может быть заменена в Material Editor простой константой с плавающей точкой и значением 0. Этот же принцип можно применить для нескольких версий одного и того же материала. Вам не нужны отдельные normal maps, например, для трех разновидностей кирпича, отличающихся по цвету. Можно использовать одну normal map для всех.

Создание набора основных материалов


Повторное использование материала


Отличной особенностью базового материала является его способность изменения в режиме реального времени. Вы можете использовать эти изменения для быстрого тестирования множества различных значений без перекомпиляции материала. Всякий раз, когда я использую сложный материал, у меня всегда наготове тестовый экземпляр. Мне он необходим для блокировки более реалистичных базовых значений конечного материала.

Комментарии и организация материалов

Для сложных материалов Unreal 4 предлагает очень полезные организационные инструменты. Выбор группы нод и нажатие C помещает эти ноды в комментарий, который затем можно перемещать как группу и кодировку цвета. Комментарии (и отдельные ноды) могут содержать базовые текстовые пояснения.

Функции материалов


Функции материалов можно вызвать несколько раз для выполнения определенного набора инструкций. Они создаются вне материала в Content Browser, но затем могут быть вызваны, чтобы упростить их. Они могут содержать свой собственный inputs и могут стать отличным способом сэкономить время, когда нужно вызвать несколько повторяющихся операций.

Материалы листьев


Листва может быть одной из самых сложных вещей, т.к. совсем не просто обеспечить ее правильное отображение в любом игровом движке. В UE4 версии 4.18 существует Foliage Shading Model, которая упрощает эту задачу. Я настоятельно вам ее рекомендую, поскольку она поддерживает передачу подповерхностного слоя, что в большинстве случаев дает преимущества. Кроме того, советую добавить sky light к вашей сцене, чтобы помочь сбалансировать некоторые более темные области сетки листвы, которые могут быть в тени.

Vertex colour


Доступ к цветам Vertex в материалах — одна из моих любимых функций в Unreal 4. Они могут быть невероятно мощными при творческом подходе. От ambient occlusion до masking out wind и world offset для листвы — их универсальность колоссальна. Они особенно полезны при смешивании текстур. Vertex colors можно импортировать из внешнего программного обеспечения 3D или импортировать и нарисовать в редакторе.

Детализированные diffuse и normal


Так как вы можете настроить параметры текстурирования ультрафиолетового излучения, вы можете увеличить детали материала путем смешивания в дополнительном наборе текстур. Обычно это diffuse или normal maps, которые затем поочередно накладываются поверх базовых. Вы можете использовать любой удобный для вас метод, например, такой как Overlay Blend Function, в то время как подробные normal maps могут быть применены путем добавления красного и зеленого каналов к основанию.

Смешивание текстур в материалах


Хотите объединить текстуры в material editor, но знакомы только с режимами смешивания Photoshop? Epic превзошел все ваши ожидания. Наряду со многими полезными функциями материалов он включает в себя большинство режимов смешивания, с которыми знакомы все пользователи Photoshop. От Overlay до Linear Dodge их можно найти в окне палитры внутри Material Editor. Они могут быть особенно полезными для добавления деталей к вашим материалам.

Знание типов источников освещения


Unreal предлагает четыре различных типа света для использования в окружающей среде: Directional, Point, Spot, и Sky light. Свет Directional отлично подходит для наружных зон или любого необычного источника света. Свет Point является всенаправленным, а Spot похож на него, но имеет ограничения, определенные конусом. Sky light может использоваться для добавления света в окружающую среду, захватывая отдаленные части вашей карты. Поддерживаются также пользовательские Cubemaps.

Добавление тумана к вашей сцене


Существует стандартный способ создания всем нам известного обычного плотного тумана. Unreal 4 же предлагает два других способа добавить туман к вашей сцене. Atmospheric Fog реагирует на направленный угол освещения и интенсивность. Он может создать туман, основанный на реальном рассеянном атмосферном свете. Height Fog дает немного больше контроля цвета и позволяет добавить более простой эффект тумана, который становится менее плотным в верхних частях карты и более плотным в нижних частях.

Создание умных световых валов


Съемки с высоким разрешением


Хотя пользовательские видео разрешения могут быть выведены из Matinee, есть быстрый и простой способ сделать кадры в высоком разрешении прямо из редактора. Нажав на маленькую нисходящую стрелку в левом верхнем углу вашего Viewport, вы можете открыть небольшое раскрывающееся меню. Внизу можно открыть окно High Resolution Screenshot window. Оттуда снимки в высоком разрешении могут быть захвачены и отправлены в папку вашего проекта: project/saved/Screenshots folder.

Корректировка цвета и таблицы поиска

Финальные цвета рендеринга можно настроить на основе художественных предпочтений. Хотя существуют опции для базовых настроек, таких как контраст и оттенок, пользовательская коррекция цвета может быть выполнена с использованием таблиц цветового поиска. Эти таблицы допускают сложное преобразование цвета и могут быть сделаны при помощи базового файла, доступного на сайте Epic Unreal 4 и в Photoshop, или в других программах для настройки изображений.

Редактирование световых переходов и бликов


В играх и 3D стало популярным отображать световые переходы и блики, их можно включить и настроить в UE4, используя специальные зоны постобработки — post-process volumes. Световой поток настраивается практически по всем характеристикам. Размер, цвет, интенсивность и порог можно изменить и даже использовать их для маскировки текстур грязи и имитации грязных линз. Аналогично, вспышки также могут быть включены, а их форма и интенсивность регулируются.

Создание глубины резкости


Unreal 4 поддерживает как резкость по Гауссу, так и настраиваемую. Оба эти параметра существуют в настройках Post Process Volumes. Следует также отметить, что инструменты, которые помогают с размытием тонких объектов перед удаленными, иногда могут создавать проблемы. Нужно проявлять осторожность в применении глубины резкости, например, к листве или другим подобным элементам.

Автоэкспозиция и адаптация глаз


Автоматическое управление экспозицией включено по умолчанию и имитирует настройку глаз на яркие или темные области. Эффект является потрясающим, но может создавать постоянно изменяющиеся визуальные переменные, которые трудно поддерживать внутри. Регулировку диапазона экспозиции можно выполнить в настройках volumes после обработки. Её можно отключить, если установить минимальную яркость, равную максимальной. Смещение экспозиции можно использовать для настройки её базовых параметров.

Световые функции


Одна интересная особенность в Unreal 4 — поддержка материалов с функцией освещения. Эти материалы действуют как маски для света и могут использоваться, чтобы сделать что-либо: от пользовательских цветовых вариаций в свете до облачных теней на земле. Они создаются путем установки функции Material Domain to Light в Material Editor, их можно использовать при spot, point и directional lights.

Сэкономьте время, скопировав и вставив


Еще одна особенность, которую нужно знать об Unreal 4, заключается в том, что любой объект одного уровня может быть скопирован и вставлен непосредственно на другой уровень в рамках одного и того же проекта. Он будет отображаться с теми же свойствами и в том же месте.

А самое крутое — это то, что все, что скопировано из Unreal, можно вставить в текстовый документ. Затем этот текст можно скопировать и повторно вставить на другой уровень Unreal 4.

Режим просмотра и визуализация рендер пасов


Знание того, что составляет ваш образ, является неотъемлемой частью работы в любом 3D-движке и работает в отложенном рендерере, например, UE4 позволяет использовать некоторые полезные режимы просмотра. Нажатие Alt и 1-8 переключается между различными режимами просмотра, такими как Unlit или lighting only, но если вы нажмете кнопку View Mode в окне Viewport, вы можете просмотреть отдельные рендер пасы. Это может быть полезно для просмотра широких диапазонов материалов, таких как roughness.

Рекомендации по производительности


Читайте также: