В этой статье покажу, как я настраивал основные моменты в проекте, а также расскажу о некоторых особенностях тех или иных настроек.
Внимание: если вы сами разрабатываете на игровом движке Godot ваши проекты, я не призываю делать так же, как и не агитирую. Все настройки — чисто мой личный опыт, исследование, а также некоторые рекомендации самих разработчиков Godot.
Шаблоны импорта
Начал я с этого, так как на момент написания статьи я уже работал с ресурсами и посчитал, что их нужно сразу адаптировать, чтобы уйти от подводных камней.
Почему я не буду использовать форматы .fbx и .blender? Разработчики сами рекомендуют формат .glTF 2.0.
glTF 2.0 (рекомендуется). Godot поддерживает как текстовый (.gltf), так и двоичный (.glb) форматы.
.blend (Blender). Это работает путём вызова Blender для прозрачного экспорта в glTF (требуется установленный Blender).
DAE (COLLADA) — старый поддерживаемый формат.
Формат OBJ (Wavefront) + файлы материалов MTL. Он также поддерживается, но довольно ограниченно, учитывая ограничения формата (нет поддержки опорных точек, скелетов, анимации, материалов UV2, PBR и т. д.).
FBX, поддерживается через библиотеку ufbx. Предыдущий рабочий процесс импорта использовал интеграцию FBX2glTF. Для этого требуется установка внешней программы, которая подключается к фирменному FBX SDK, поэтому мы рекомендуем использовать метод ufbx по умолчанию или другие форматы, перечисленные выше (если они подходят для вашего рабочего процесса).
Для себя я понял:
- Формат glTF — отличный вариант. Я ни разу не видел, чтобы он что-то ломал при экспорте, а я импортирую напрямую из игрового формата. Также я использую двоичный формат со сжатием, без текстур и материалов; ниже я расскажу об этом.
- Формат OBJ / DAE — мне буквально не подходит. Судя по их описанию, это устаревшие форматы, но в некоторые проекты они подойдут из-за своей простоты.
- Формат FBX — все через костыльные методы, да и Blender, через который я в основном работаю, не особо дружит с FBX, что при импорте, что при экспорте.
- Формат Blender — хоть и имеет чуть ли не самую дружественную связку Godot + Blender, сами файлы не обходятся нормальным сжатием (тем более без потерь). Внутренняя загрузка занимает много времени даже для 16-поточного процессора, а сами файлы могут весить слишком много. У меня при экспорте анимации из Stalker — stalker_animation.omf (9 МБ) — на деле выходило 100 МБ, тогда как в том же glTF собиралось всё до 40 МБ без сжатия.
В Godot есть ещё свой внутренний формат ресурсов (.res) — он хранить может почти всё, что угодно, в себе. В данном случае я буду хранить там модели вместо формата glTF.
Самое главное, так как я работаю с glTF (параллельно с FBX я сделаю идентично), я отключаю доступ работать с текстурами — "Discard All Textures". Текстуры я собираюсь всё равно хранить отдельно, иначе Godot при каждом импорте будет стараться их прочитать. Действия отключения я делаю как для Scene, так и для Animation Library.
Scene (Сцена)
Опция "Принудительно отключить сжатие" у меня включена. Эта опция очень щепетильная: если её не включить, особенно если вы работаете с детализированными или крупными объектами, крупные полигоны будут сжиматься, что может сломать вашу модельку. Эту опцию можно отключать (по факту, она стандартно отключена), если у вас Low-Poly геометрия или если дистанция камеры относительно велика от геометрии (пример стратегии или игры от третьего лица).
Банальный пример:
Animation Library (Библиотека анимации)
Первое считается оптимизацией анимации, но эта оптимизация плохо сказывается на анимации, которую вы загружаете "как есть". У вас будут аналогичные проблемы с артефактами в уже существующих кадрах, а не в геометрии, как выше.
Второе будет в дальнейшем помогать для работы с анимацией и костями, но это уже отдельная тема.
Основное
C# .NET
А вот тут самое геморройное оказалось для меня. Хочу лишь предупредить, что данная штука для уже C#; это имя используется в качестве имени файлов .csproj и .sln для сборки .NET.
Имя очень чувствительное, не как оказалось, к регистру букв или там цифр, а как к расширению файлов, а именно к точке ".". При попытке создать такой файл у вас может либо всё пройти нормально, либо нет.
Пример: Изначально я дал проекту название "S.T.A.L.K.E.R.". Всё было ничего, но Godot решил выдать это же название в имя сборки для C#. После компиляции создался не просто файл S.T.A.L.K.E.R..sln и S.T.A.L.K.E.R..csproj, как предполагалось, а один файл S.T.A.L.K.E.R. (получается, файл S с расширениями T, A, L, K, E, R). Причем файл получается, нельзя не просто удалить, но и работать с ним. Он есть в системе, но его как бы и нет: система его не может определить. Стандартными средствами его тоже не снести, пришлось писать собственный батник, чтобы файл автоматически слетел с системы. Так что тут надо быть внимательным.
Желательно название давать краткое и по рекомендации платформы .NET.
DirectX 12 vs Vulkan
Разработчики прямо говорят, что начиная с версии 4.6, "Godot по умолчанию включает DirectX 12". Не знаю, как у других, но у меня на трёх компьютерах (GPU — RX 580, RTX 3060 и 4070) при включении данного API проекты работают нестабильно: либо просадка производительности GPU и FPS — даже в пустом проекте, либо артефакты и вылеты от моделек. Считаю, что он всё же сыроват. Как я ещё заметил, поведение DirectX 12 во многих движках или играх ведёт себя нестабильно. Благо есть возможность выключать или переключать API как в редакторе, так и в самой игре.
Заключение
На этом, пожалуй, думаю, я всё. Я зацепил только важные моменты; все остальные либо подстроить под проект, либо нужно разбирать более подробно уже в отдельных темах. Увидимся в следующей статье.