Создание сборки своей игры на базе CRYENGINE 5.3. Часть первая. Подготовка к запаковке.

06. декабря 2017 CRYENGINE 5 0

Примечание: Ниже приведённая информация предназначена для людей, имеющих как минимум базовые знания по движку. Особенно хочу отметить, что это те люди, которые НЕ игнорировали официальную документацию и видеоуроки, а осваивали основные аспекты по движку, тщательно изучая материалы от 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

Тема весьма обширна, поэтому для удобства восприятия процесс описан в трёх частях:

  1. Подготовка к запаковке.
  2. Запаковка ресурсов.
  3. Чистка и заключительные оптимизации.

Создание сборки это один из заключительных этапов оптимизации перед предоставлением игры пользователям. Речь пойдёт именно об отдельной от рабочего проекта сборке, которая будет независимым продуктом, подлежащим передаче игрокам и прочим конечным пользователям. Простыми словами, сделаем сборку игры, чтобы друг мог поиграть, ну или мама, а может эта игра даже попадёт в 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-архивы.