Создание сборки своей игры на базе CRYENGINE 5.3. Часть первая. Подготовка к запаковке.
Примечание: Ниже приведённая информация предназначена для людей, имеющих как минимум базовые знания по движку. Особенно хочу отметить, что это те люди, которые НЕ игнорировали официальную документацию и видеоуроки, а осваивали основные аспекты по движку, тщательно изучая материалы от Crytek. Это не стопроцентно детальное руководство, оно не поможет, если не знать основы, без которых представленные материалы вызовут только фрустрацию и ещё ряд неприятных переживаний.
Примечание: Для такого рода материала лучше подошёл бы формат wiki, но пока будет представлен в качестве записи в блоге.
Официальная документация по теме:
http://docs.cryengine.com/display/CEPROG/Guide+to+releasing+CRYENGINE+V+projects
http://docs.cryengine.com/display/CEMANUAL/Rendering+Statistics+-+r_stats
http://docs.cryengine.com/display/CEMANUAL/Finishing+Touches
http://docs.cryengine.com/display/CEPROG/Linux
http://docs.cryengine.com/display/SDKDOC4/Steam
Тема весьма обширна, поэтому для удобства восприятия процесс описан в трёх частях:
Создание сборки — это один из заключительных этапов оптимизации перед предоставлением игры пользователям. Речь пойдёт именно об отдельной от рабочего проекта сборке, которая будет независимым продуктом, подлежащим передаче игрокам и прочим конечным пользователям. Простыми словами, сделаем сборку игры, чтобы друг мог поиграть, ну или мама, а может эта игра даже попадёт в Steam. О компиляции игры на CRYENGINE в .exe тоже будет упомянуто. Финальный результат будет примерно такой:
На CRYENGINE 5 процесс подготовки сборки состоит из нескольких этапов:
-
Export to Engine.
-
Настройка конфигурационных файлов, в том числе для уровней графики. Будет упомянуто о белых списках команд (whitelist), а так же назначим иконку для окна игры в панели задач Windows и курсор тоже поменяем на свой.
-
Запаковка ресурсов в .pak.
-
Сборка библиотек и GameLauncher. Если планируется шифрование .pak, то нужно не забыть интегрировать key.h. По ходу статьи будет предоставлен пример набора библиотек, которые необходимы для работы игры.
-
Шифрование запакованных ресурсов.
-
Проверяем результат формирования сборки.
-
Тестирование сборки на работоспособность и исправление ошибок.
-
Отправляем сборку игрокам.
Примечание: Crytek обещают доделать упрощённое создание сборки для CRYENGINE 5.4, но пока нормально работает только долгая и упорная сборка в ручном режиме.
По итогу операций получим:
-
свои уровни
-
настроенные конфигурационные файлы для оптимизации и прочей красоты
-
свою иконку в панели задач и свой курсор
-
запакованные в .pak ресурсы (модели, текстуры, звук и прочее)
-
скомпилированный и упакованный шейдерный кэш для оптимизации
-
шифрование ресурсов
-
отсутствие в сборке каталогов Code, Editor, logbackups, Tools и user
-
отсутствие всех элементов редактора (Sandbox.exe) в сборке, так как их распространение категорически запрещает лицензионное соглашение: http://docs.cryengine.com/display/CEPROG/Guide+to+releasing+CRYENGINE+V+projects#GuidetoreleasingCRYENGINEVprojects-CollectingFilesintoStaging
Приступим.
Export to Engine.
Официальная документация по теме: http://docs.cryengine.com/display/CEMANUAL/Exporting+our+Level
Когда все работы на уровне завершены, необходимо произвести экспорт, чтобы уровень мог запуститься в GameLauncher.exe. На деле экспорт представляет собой упаковку данных по уровню в filelist.xml и level.pak, именно два этих компонента будут в составе релизной сборки, а остальные файлы по уровню в сборке не нужны, они предназначены для работы с уровнем в редакторе (Sandbox.exe).
Для проведения экспорта уровня необходимо открыть его через редактор (Sandbox.exe) и выбрать File / Export to Engine:
Процесс пройдёт довольно быстро и в консоли должен появиться такой вывод:
По Export to Engine всё.
Настройка конфигурационных файлов.
Конфигурационные файлы это обычные текстовые файлы с расширением .cfg. Создаются и редактируются стандартным блокнотом, Notepad++ и подобными текстовыми редакторами. С настройкой конфигурационных файлов уровней графики в CRYENGINE 5.3 можно ознакомиться здесь, а в этой статье разберёмся с настройкой локальных конфигов.
В CRYENGINE 5 поддерживаются whitelist — белые списки команд и диапазоны допустимых значений, что может существенно ограничить игроков в получении нежелательных возможностей. Официальная документация по теме: http://docs.cryengine.com/display/CEPROG/Guide+to+releasing+CRYENGINE+V+projects#GuidetoreleasingCRYENGINEVprojects-SettingupCVarWhitelist
Белые списки позволяют открыто размещать конфигурационные файлы, но их всё-таки лучше прятать в .pak и шифровать, конечно, если есть большое желание защитить игру.
Настройка system.cfg.
system.cfg — должен находится в корневом каталоге проекта. Если его нет, то создаём вручную, помня, что это обычный текстовый файл с расширением .cfg.
Каждый параметр нужно записывать с новой строки.
Два минуса — означают, что эта строка комментарий и её нужно пропустить при выполнении.
Пример параметров:
--
ключевые параметры
sys_target_platforms=pc
sys_game_folder=Assets
sys_dll_game=CryGameSDK
sys_localization_folder=languages
s_AudioImplName=CryAudioImplWwise
--
второстепенные
sys_game_name="The
Cursed Forest"
r_WindowIconTexture=Assets\Textures\Icon.dds
r_MouseCursorTexture=EngineAssets/Textures/Cursor_Green.dds
sys_no_crash_dialog=1
sys_vr_support=0
log_IncludeTime=1
log_Verbosity=-
1
--
отключение
компиляции
шейдерного кэша
r_shadersAsyncActivation=0
r_ShadersAsyncCompiling=0
r_ShadersAsyncMaxThreads=4
r_ShadersRemoteCompiler=0
r_ShaderCompilerServer=0.0.0.0
r_ShaderCompilerPort=31455
r_ShadersAllowCompilation=0
r_shadersSubmitRequestLine=0
r_ShadersUserFolder=0
r_driver=DX11
r_ShadersDX11=1
Описание. Ключевые параметры.
sys_target_platforms=pc — указываем целевую платформу для проекта. При необходимости платформы перечисляются через запятую без пробелов: sys_target_platforms=pc,linux,durango,orbis. В обычном случае нужно указывать только одну платформу. Сама процедура необходима для активации конфигурационных файлов под указанные платформы.
sys_game_folder=assets — указываем расположение контента игры. По умолчанию это каталог assets, но можно переименовать и указать любое название на латинице, без спецсимволов и пробелов.
sys_dll_game=CryGameSDK — указываем название основной библиотеки. По умолчанию это CryGameSDK.dll, но можно её назвать по своему, следовательно, в этом случае потребуется указать новое имя в поле значения для параметра sys_dll_game.
sys_localization_folder=languages — указываем каталог с файлами локализации.
s_AudioImplName=CryAudioImplWwise — указываем библиотеку звуковой системы. В движке реализовано три варианта: Wwise, FMOD и SDL Mixer. В данном примере используется Wwise.
Описание. Второстепенные параметры.
sys_game_name=»The Cursed Forest» — название приложения (игры), которое будет написано на рамке его окна при запуске в оконном режиме или свёрнутом состоянии.
r_WindowIconTexture=Assets\Textures\Icon.dds — назначение текстуры иконки для окна в панели задач Windows для запущенного приложения (игры).
r_MouseCursorTexture=EngineAssets/Textures/Cursor_Green.dds — назначение текстуры для курсора.
sys_no_crash_dialog=1 — не показывать окно отправки о падении движка. Это функционал для редактора, который позволяет отправить параметры телеметрии в Crytek, чтобы, якобы, помочь им собрать статистику о падениях и исправить проблему. Игрокам такое явно не нужно, поэтому оставляем значение равное 1.
sys_vr_support=0 — если игра не рассчитана для использования VR-шлемов, то ставить значение на 0, чтобы при наличии подключенного шлема он не активировался за зря.
log_IncludeTime=1 — указывать время в логах.
log_Verbosity=-1 — вести максимально короткий лог. Ведение подробных логов отнимает чуть-чуть производительности, поэтому игре лучше без них.
Описание. Отключение генерации шейдерного кэша.
В этом блоке речь пойдёт о параметрах, связанных с компиляцией шейдерного кэша. О нюансах этого процесса можно почитать в этой статье. Здесь лишь отмечу, что это очень важный этап оптимизации сборки игры на CRYENGINE 5, и упомяну пару параметров.
r_driver=DX11 и r_ShadersDX11=1 — эти два параметра указывают, что необходимо использовать заранее скомпилированный шейдерный кэш для DX11. Для CRYENGINE 5.3 и младше есть вариант шейдерного кэша OpenGL (GL4), который предназначен для Linux, и шейдерный кэш для консолей, а для CRYENGINE 5.4 добавился Vulkan (Vk).
Настройка autoexec.cfg.
Строится на том же принципе, что и system.cfg, но размещать его можно в pak-архиве, который в свою очередь можно зашифровать. В autoexec.cfg имеет смысл вносить те параметры, которые любопытным игрокам видеть и менять нежелательно. Сам по себе этот конфигурационный файл не обязателен.
Настройка game.cfg
Этот файл создаётся движком автоматически и вручную его настраивать не нужно. В него прописываются настройки графики, которые выставляются через опции внутри игры (уровень графики, разрешение экрана, гамма и прочее).
entities.xml
В CRYENGINE 5.3 и младше в этом файле прописываются все сущности, которые будут использоваться в игре. Без него игра работать не будет. В GameSDK его можно найти в scripts.pak и использовать для шаблона, чтобы дописать свои сущности.
Пример части содержимого:
defaultProfile.xml
Официальная документация: http://docs.cryengine.com/display/CEPROG/Setting+Up+Controls+and+Action+Maps
defaultProfile.xml — это конфиг клавиш управления. В GameSDK находится в gamedata.pak:
Libs\Config\defaultProfile.xml
Если нужно запретить какое-то действие, к примеру: полёт, рождение (spawn) и подобное или переназначить клавиши для того или иного действия, то необходимо отредактировать этот конфиг.
Пример части содержимого:
Есть ещё различные конфиги, которые можно найти в Libs. С ними предстоит разбираться самостоятельно. Да-да, смотрите каждый файл, читайте комментарии в них, пробуйте найти информацию в официальной документации и на форуме Crytek.
Можно создавать свои особые конфиги в формате .xml с возможностью считывать и записывать значения из них с помощью специальных нодов FG. К примеру, можно реализовать изменение клавиш управления из меню игры, хранение уровня громкости, яркости, гаммы и тому подобного.
Замена текстуры курсора.
Рассмотрим простейшую возможность заменить стандартный курсор на свой. По умолчанию его текстура находится в EngineAssets/Textures/Cursor_Green.dds. Заменяем текстуру на желаемую и дело сделано.
Путь до текстуры можно изменить до желаемого места в директории проекта, прописав параметр r_MouseCursorTexture. Пример:
r_MouseCursorTexture=EngineAssets/Textures/Cursor_Green.dds.
Описанный метод подходит только для статичного курсора, а анимированный придётся делать через Flash (если особо не выдумывать).
Во второй части речь пойдёт о методиках запаковки ресурсов игры в pak-архивы.