netlex.studio

netlex.studio

Game Development
Пикабушник
78 рейтинг 8 подписчиков 1 подписка 4 поста 0 в горячем
Награды:
5 лет на Пикабу
7

Unreal Engine 4 Интеграция сторонних библиотек

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


Исходный код Unreal Engine включает в себя несколько сторонних библиотек, которые хранятся в UnrealEngine/Engine/Source/ThirdParty/... При разработке плагинов, использующих сторонние библиотеки, удобнее располагать эти библиотеки в папку с плагином.


Шаблон плагина со сторонней библиотекой


Браузер плагинов в редакторе имеет шаблон для интеграции сторонних библиотек. Чтобы создать новый плагин с помощью этого шаблона, выберите New Plugin в окне браузера плагинов и прокрутите вниз до шаблона Third Party Plugin (для использования данного шаблона вам нужен проект с C++ кодом).


Настройка модуля


Обычные C++ модули Unreal Engine настраиваются с помощью файла .build.cs, сторонние библиотеки ничем не отличаются. Чтобы создать модуль, который не имеет исходного кода и существует для использования другими модулями, создайте файл .build.cs для своего плагина следующим образом:

Файл .build.cs должен находиться в обычной папке с кодом, где механизм ищет модули, например MyProject/Source или MyPlugin/Source.


Параметр ModuleType.External указывает движку не искать (или компилировать) исходный код. Он будет использовать другие параметры, которые вы определили в этом файле, а именно перечисленные пути включения в среду компиляции, макросы и связи с указанными статическими библиотеками.


Динамические библиотеки


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


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


Runtime Dependencies

Чтобы поместить стороннюю DLL-библиотеку рядом с исполняемым файлом при упаковке игры, вы можете объявить ее как runtime dependency в файле build.cs:

Это предполагает, что DLL уже существует в данном каталоге и что плагин будет загружать ее вручную из этого места. Если вы хотите, чтобы DLL копировалась в тот же выходной каталог, что и исполняемый файл во время сборки, вы делаете это с помощью перегрузки метода RuntimeDependencies.Add:

Другие переменные могут быть использованы для выходных путей DLL:

Поле RuntimeDependencies не ограничивается промежуточными DLL; Вы также можете использовать его для добавления дополнительных файлов в процесс подготовки. Эти файлы могут храниться в PAK-файлах Unreal или свободно храниться на диске. DLL загружаются операционной системой, поэтому они обычно не могут быть сохранены в файле PAK.

Возможные значения для StagedFileType:

Windows.h


Стандартный заголовок Windows (Windows.h) не включен по умолчанию в большинство кодов UE. Если вам это нужно для сторонних библиотек, включите его через файл WindowsHWrapper.h из модуля Core.

C ++ Предупреждения и Ошибки


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

Упаковка и выравнивание по умолчанию


По старым причинам Unreal Engine форсирует 4-байтовую упаковку на Win32. Это может привести к трудным для отладки проблемам выравнивания в классах, которые используют 8-байтовые типы, такие как double или long. Чтобы восстановить упаковку по умолчанию вокруг стороннего кода, который определяет 8-байтовые типы в открытых структурах, используйте следующие макросы:

Ошибка сборки RTTI


Связывание вашего двоичного файла из исходных файлов, скомпилированных с различными флагами RTTI (run-time type information), может вызвать ошибки сборки в Windows. Если вы сталкиваетесь с ошибками сборки RTTI, вы можете либо определить вспомогательный макрос для смешивания модулей включения/выключения RTTI, либо, если вы строите из исходного кода, вы можете включить RTTI для всего движка, установив для bForceEnableRTTI значение true в TargetRules.cs.


Ошибки Dynamic Cast


Если вы используете dynamic cast для типа объекта, который не является типом UObject, когда RTTI выключен, вы столкнетесь с ошибкой «can't use dynamic_cast when RTTI is disabled error», потому что в CoreUObject/Public/Templates/Casts.h, #define dynamic_cast перенаправляет модули CUObject. Для типов UObject dynamic cast использует систему Reflection, но для других типов оно использует обычный dynamic_cast.

Показать полностью 9
8

Unreal Engine 4 режим IWYU (для тех кто на C++)

Include-What-You-Use (IWYU), означает, что исходный код движка включает в себя только те зависимости, которые ему необходимы для компиляции. Цель IWYU состоит в том, чтобы избежать включения монолитных заголовочных файлов, таких как Engine.h или UnrealEd.h, тем самым уменьшая лишние зависимости. Следующее справочное руководство расскажет вам, что это значит для IWYU, включая объяснение того, как включить IWYU для вашего проекта. Кроме того, если вы решите использовать режим IWYU для своих игровых проектов, вы узнаете несколько общих советов, которые помогут вам получить максимальную отдачу от работы в режиме IWYU.


Режим IWYU по умолчанию отключен для игр и игровых плагинов; однако режим IWYU по умолчанию включен для модулей Engine и Engine.


В предыдущих версиях Unreal Engine 4 (UE4) большинство функциональных возможностей движка было включено через большие, ориентированные на модули заголовочные файлы, такие как Engine.h и UnrealEd.h и быстрое время компиляции зависело от того, какие файлы быстро компилируются с помощью Precompiled Header (PCH).


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


При написании кода IWYU мы принимаем 4 конкретных соглашения:


1. Все заголовочные файлы содержат свои необходимые зависимости.

2. Файлы .cpp сначала включают соответствующие им файлы * .h.

3. Файлы PCH больше не включены явно.

4. Монолитные заголовочные файлы больше не включены.


Соглашения IWYU


Следующие описания соглашений IWYU должны дать вам хорошее представление о правилах для IWYU.


1. Все заголовочные файлы содержат свои необходимые зависимости.


- Существует заголовочный файл CoreMinimal, содержащий набор вездесущих типов (включая FString, FName, TArray и т.д.) из UE4 Core.


- Заголовочный файл CoreMinimal (расположенный в корневом каталоге UE4 по адресу \Engine\Source\Runtime\Core\Public\CoreMinimal.h) сначала включается в большинство заголовочных файлов движка.

- В модуле Core большинство заголовочных файлов включают в себя заголовочный файл CoreTypes.h. Это включает только определения типов для примитивных типов C++, макросы сборки UE4 и директивы для настройки среды компиляции.


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


2. Файлы .cpp сначала включают соответствующие им файлы * .h.

- Чтобы убедиться, что все ваши исходные файлы включают в себя все необходимые зависимости, скомпилируйте игровой проект в режиме non-unity с отключенными файлами PCH.


3. Файлы PCH больше не включены явно.


- Хотя файлы PCH все еще используются, они принудительно включаются в командную строку компилятора UnrealBuildTool (UBT).


4. Монолитные заголовочные файлы больше не включены.


- Компилятор выдаст предупреждение, если ваш код содержит монолитные заголовочные файлы (такие как Engine.h или UnrealEd.h).


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


Включен ли IWYU


До установления соглашений IWYU с выпуском версии 4.15 код UE4 обычно включал файл PCH вверху каждого файла CPP, что противоречит тому, что разработчик хочет, чтобы код был совместимый с IWYU. Следуя соглашениям IWYU, файлы PCH можно рассматривать как уровни оптимизации во время компиляции, которые применяются отдельно от того, как изначально создавался код. Таким образом, вместо того, чтобы создавать и включать файлы PCH, мы оставляем за UBT решать, какой файл PCH использовать (если он есть).


Если вы хотите убедиться, что IWYU включен, и убедитесь, что модуль соответствует соглашениям IWYU, откройте файл модуля * .build.cs и убедитесь, что для PCHUsage установлено значение PCHUsageMode.UseExplicitOrSharedPCHs.

Установка PCHUsageMode.UseExplicitOrSharedPCHs в PCHUsage создает явный файл PCH для модуля, только если он имеет параметр PrivatePCHHeaderFile в файле * .build.cs модуля. В противном случае модуль использует общий PCH с другим модулем, что избавляет инструмент от создания большего количества файлов PCH, чем необходимо. Также имейте в виду, что при включении режима UseExplicitOrSharedPCHs исходный файл должен включать соответствующий ему заголовочный файл. В качестве альтернативы, если вы хотите, чтобы модуль отказался от соблюдения соглашений IWYU, вы можете установить для PCHUsage значение PCHUsageMode.UseSharedPCHs.

После преобразования кода в модель IWYU мы наблюдали значительные улучшения со временем компиляции UE4.


Работа в режиме IWYU


Если вы запускаете свою игру в режиме IWYU, вам необходимо убедиться, что ваши файлы .cpp включают в себя соответствующие им файлы .h. Это полезная практика, поскольку она позволяет компилятору гарантировать, что файл * .h включает все необходимые ему зависимости (когда файлы PCH и сборки Unity отключены). Unreal Build Tool (UBT) выдаст предупреждение, если вы не включите соответствующий заголовочный файл в начале (для соответствующего CPP-файла).


Если вы хотите отключить компилятор от выдачи предупреждений, вы можете установить для bEnforceIWYU значение false в файле модуля * .build.cs.

Если вы хотите отключить предупреждение для всего таргета, вы можете установить для bEnforceIWYU значение false в файле * .target.cs.


Общие советы


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

1. Включите CoreMinimal.h вверху каждого заголовочного файла.

2. Чтобы убедиться, что все ваши исходные файлы включают в себя все необходимые зависимости, скомпилируйте игровой проект в режиме non-unity с отключенными файлами PCH.

3. Если вам нужен доступ к UEngine или GEngine, подключите заголовочный файл находящийся по этому пути: Runtime\Engine\Classes\Engine\Engine.h (вместо монолитного заголовочного файла, который находится в Runtime\Engine\Public\Engine.h).

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


Чтобы помочь пользователям преобразовать существующие проекты на C++ в стиль IWYU, разработчики выпустили IncludeTool, который вы можете найти в \Engine\Source\Programs\IncludeTool.


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

Показать полностью 5
7

Повышение производительности проекта на Unreal Engine 4

По умолчанию Unreal Engine 4 (UE4) использует Deferred Renderer, поскольку он обеспечивает максимальную гибкость и предоставляет доступ к большему количеству функций рендеринга. Однако при использовании Deferred Renderer есть некоторые компромиссы, которые могут не подходить для всех видов VR. Forward Rendering обеспечивает более быстрый базовый уровень и более быстрые проходы рендеринга, что может привести к повышению производительности на платформах VR. Forward Rendering не только быстрее, но и предоставляет лучшие варианты сглаживания, чем Deferred Renderer, что может привести к улучшению визуализации.

Включение Forward Shading:

1. В меню Edit откройте Project Settings.

2. Выберите вкладку Rendering слева и найдите категорию Forward Shading.

3. Включите Forward Shading.

Вам будет предложено перезапустить редактор, где после перезапуска вы можете начать использовать параметры и функции Forward Renderer.


Производительность и особенности


Переход от Deferred Renderer к Forward Renderer может повысить производительность вашего проекта.


Forward Renderer может быть быстрее, чем Deferred Renderer для некоторого контента. Большая часть улучшения производительности достигается за счет функций, которые можно отключить для каждого материала. По умолчанию только ближайший захват отражения будет применен без коррекции параллакса, если материал не включит High Quality Reflections, высота тумана рассчитывается для каждой вершины, а плоские отражения применяются только к материалам, которые его разрешают.

Используя эти опции в новой VR-игре Robo Recall от Epic Games, Forward Renderer примерно на 22% быстрее, чем Deferred Renderer на NVIDIA 970 GTX.

Обязательно используйте инструменты производительности и профилирования Unreal Engine, чтобы измерить производительность вашей игры при переключении с Deferred Renderer на Forward Renderer. Вы должны уделить особое внимание профилированию графических процессоров, чтобы увидеть, куда идет стоимость графического процессора, а также использовать команды Stat для помощи по профилированию.

Известные проблемы и общие вопросы


Следующие функции не поддерживаются при использовании Forward Renderer:

1. Техника экранного пространства (SSR, SSAO, Contact Shadows)

2. Полупрозрачные динамические тени и теней от стационарного света

3. MSAA на D-Buffer декалей и Motion Blur


Ниже приведены некоторые общие вопросы / проблемы, которые могут возникнуть при использовании Forward Renderer.


Мой материал ломается при переключении на Forward Renderer из-за текстур GBuffer?

- GBuffer недоступен для выборки текстур в Forward Renderer он доступен только для Deferred Renderer.


Forward Renderer ограничивает меньшим кол-ом текстур в материале чем Deferred Render?

- Forward Renderer объединяет все функции в один шейдер, поэтому для вашего материала доступно меньшее кол-во текстур.

- Обычно это можно решить с помощью Shared Samplers.


Почему у меня проблемы с MSAA, при отображении примера Atmospheric Fog?

- Atmospheric Fog еще не обрабатывает MSAA правильно.

- Для Height Fog вы можете обойти с помощью Vertex Fogging (который включен по умолчанию при включении Forward Renderer).

Показать полностью 3

Концепт игры в которой игроки могут зарабатывать

Доброго времени суток друзья!


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


Краткое описание.

Онлайн экшен от 3-го лица с открытым миром на движке Unreal Engine 4, в котором игроки разделившись на команды будут противостоять друг другу в различных режимах игры. Основные режимы игры следующие: "PVP миссии" (даётся ряд задач, команда А пытается выполнить задачи, команда Б пытается помешать другой команде выполнить задачи), "Гонки" (из названия можно догадаться что это гоночный режим где игроки в команде или по одиночке участвуют в заездах на транспортных средствах) и "Командный бой". Стоит уточнить что это далеко не все игровые режимы которые могут быть.

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


Грубо говоря эта игра будет похожа на GTA но более заточена под онлайн PVP с возможностью заработка на ней обычным пользователям и широким инструментарием для кастомизации.


Небольшая предыстория.

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


Заработок на игре.

И так поговорим теперь о том как игроки смогут заработать на ней, как уже установили игрок может создавать уникальные предметы будь то оружие, транспортные средства или какая то одежда для персонажа (разумеется создать это всё можно будет внутри игры). После создания у вас есть возможность выставить предмет на внутриигровой аукцион как за игровою валюту так и за криптовалюту. Другими словами игра даёт возможность зарабатывать криптовалюту после чего конвертировать её в реальные деньги или делать внутриигровые покупки на неё.


Пожалуйста напишите своё мнение о проекте.

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

Если вас заинтересовал проект присоединяйтесь к нашему сообществу вконтакте

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества