Для ЛЛ: многабукв, но можно пролистать в конец поста – там есть список преимуществ и недостатков движка. Godot классный! Попробуйте Godot!
Кому может быть полезен этот пост
Этот материал актуален для молодых игроделов –кто делает первые шаги в индустрии и мучительно выбирает движок. А также для тех разработчиков, кто устал вносить денежки владельцам проприетарного ПО и хотел бы пересесть на что-то подешевле.
Статья написана с целью познакомить сообщество с игровым движком Godot, а не сравнить его возможности с конкурентами, поэтому попрошу воздержаться от холивара на тему «чьи поезда поездатее».
Мною было приложено много усилий, чтобы обзор получился ёмким и более-менее объективным. Это не копипаста чьей-то более ранней статьи, обзор основан на личном опыте использования движка.
Официальный сайт Godot Engine
Немного истории
Разработкой движка Godot (читается «годо») с 2007 года занимались Хуан Линетски и Ариель Манзур. Стоит отметить, что в те бородатые времена движок был проприетарным, закрытым и создавался для нужд частных заказчиков.
В 2014 году авторы выпустили обновлённую версию движка под лицензий MIT и выложили исходники на GitHub, разработка перешла сообществу Godot Engine Community, и продолжается до сих пор.
Репозиторий Godot Engine Community на GitHub
Обзор
Godot Engine – очень компактный (~74MB), быстрый и оптимизированный движок, позволяющий создавать с нуля любую игру любого жанра. Он кроссплатформенный, мультифункциональный, бесплатный, опенсорсный.
Кстати «с нуля» здесь ключевое. В базовой сборке Godot не имеет шаблонов для игровых процессов, однако есть огромное количество плагинов, аддонов и внешних библиотек, которые могут помочь со стартом. Доступ к репозиторию осуществляется прямо из окна запуска движка. Просто переходим на нужную вкладку и листаем ;)
Он достаточно дружелюбен к новичкам. Элементы документации продублированы в трёх местах, что обеспечивает быстрый доступ к справке «без отрыва от производства». Так же в движок зашиты ссылки на он-лайн ресурсы, которые помогут вам в решении большинства проблем.
Несмотря на свою легковесность, Godot обладает необходимым и достаточным функционалом разработки (об этом ниже), а так же берёт на себя базовые оптимизационные задачи, такие как: управление памятью и ресурсами компьютера, интеграция устройств ввода, сборка и оптимизация продукта под различные платформы – от мобильных, до консолей.
При этом базовая сборка не тащит за собой «ваще все библиотеки, которые только есть в природе» – вплоть до того, что в ней отсутствуют инструменты для билда. Godot – это конструктор. Он не знает, чем вы будете заниматься, поэтому предоставляет функционал разработки… и… всё! Остальное вы докачиваете сами по мере необходимости.
Периодически в этих ваших интернетах на форумах и у обзорщиков проскальзывает снисходительная ремарка «Godot – движок для первой игры, и всё». Это не так. Godot – высокоуровненвый профессиональный инструмент, достаточно дружелюбный, но своеборазный и сложный в освоении, если вы хотите нарисовать что-то сложнее пиу-пиу платформера.
Среда разработки
Godot «из коробки» обладает всеми необходимыми компонентами для разработки, отладки, тестирования и конструирования игры, не требует использования дополнительного ПО для создания программной и архитектурной составляющих (разумеется, вам в любом случае потребуются программы для создания визуального контента, звуковых ассетов, etc.).
Однако, если по какой-то причине, встроенные инструменты вас не устраивают, вы легко можете воспользоваться привычным. Godot умеет дружить со множеством внешних редакторов и IDE.
Для воплощения ваших самых смелых идей он имеет 2D и 3D пространство со стандартным набором классов и объектов, а так же редактор скриптов и два редактора шейдеров — для прямого программирования и визуальной настройки. Поведение любого класса вы можете расширять и/или изменять по мере надобности.
Об особенностях рендера и визуальной среды ниже.
Редактор скриптов обладает возможностями дополнения кода, авто-отступами, подсветкой синтаксиса, быстрым доступом к API движка и докам.
Интерфейс приятный, лакончиный и довольно интуитивный:
Внутренние ресурсы проекта
Основным объектом для программных манипуляций является дерево «сцен» и «узлов». Узлом может являться как самостоятельный объект, так и группа объектов. Прелесть заключается в том, что любой из узлов в любой момент времени можно изолировать в самостоятельный компонент («сцену»). Поэтому при разработке можно быстро и безболезненно редактировать, масштабировать или полностью менять структуру проекта и/или его отдельных модулей.
Все игровые ресурсы (графические и звуковые ассеты, скрипты, конфиги, шейдеры, etc.) хранятся в файловой системе как набор файлов, не являясь частью БД или иерархических компонентов структуры самого движка. К файловой системе можно обращаться как непосредственно средствами вашей ОС, так и из редактора проекта.
Возможно, вам трудно осознать преимущества этого подхода, поэтому отмечу, что упрощённая система хранения данных обеспечивает лёгкий доступ всех членов команды разработчиков ко всем ассетам (мы не зависим от версии БД, текущей версии продукта и даже версии самого движка!), а так же сильно облегчается контроль версий — особенно если применяете внешние системы управления.
Скрипты
Godot исользует собственный высокоуровневый динамически типизированный скриптовый язык программирования — GDScript, который является плодом порочной связи гибридом Python и Lua.
Язык специализировался и оптимизировался под ранее упомянутую архитектуру систем сцен и узлов, однако если по какой-то причине вам хочется писать на другом языке (допустим, не хватает каких-либо инструментов, или вы просто не хотите осваивать новый синтаксис), Godot умеет интегрировать другие языки программирования, в частности C#, C++, Rust.
Помимо этого (начиная с версии 3.0) присутствует компонент для визуального программирования — Visual Scripting. Про него не могу ничего сказать, не приходилось пользоваться, но, думаю, это легко нагуглить.
Идеология движка имеет строгое ограничение: один узел — один скрипт. Однако, если вам необходимо менять поведение и/или состояние объекта в зависимости от игрвого состояния, Godot любезно предоставляет возможность заменять один скрипт на другой «на лету» или пользоваться внешними скриптами, которые вообще не привязаны ни к одному узлу — например, это могут быть списки оружия, брони и соответствующее им поведение, которое подхватывается из мирно дремлющего скрипта активным и применяется.
Визуализация
Графическая система — OpenGL ES. Для рендеринга 3D-сцен применяются технологии order-independent transparency, normal mapping, specularity, полноэкранные постэффекты типа FXAA, bloom, DOF, HDR, гамма-коррекции, distance fog, динамические тени на основе shadow maps и другие.
Отдельно стоит отметить превосходную симуляцию освещения и постобработки. В возможностях манипуляций со светильниками Godot не уступает движкам, специализирующимся на кинематографических эффектах для игр.
В отличие от многих других движков, которые имитируют 2D-среду на 3D пространцстве, 2D компонент Godot полностью изолирован, оптимизирован и имеет свой собственный набор классов и объектов. Следствием этого является компактность и быстродействие готового игрового продукта (мы не тащим с собой тяжёлые 3D-объекты и обвязку к ним там, где это не требуется), а так же удивительная лёгкость манипуляций с 2D компонентами в процессе разработки.
Помните, выше упоминалось, что Godot поддержит вас в любых самых сумасшедших начинаниях? ;) Стартуя работу с 2D сценой, вы легко можете добавить в неё 3D объекты или целые блоки, воспользовавшись многоуровневой системой вьюпортов. Благодаря изоляции 2D и 3D пространства (и, разумеется, многопоточности) компоненты не мешают друг другу и не тормозят работу продукта. В обратную сторону это тоже работает ;)
Игровая физика
Физический движок для 2D и 3D тоже уникальный и разработан с нуля, что позволило добиться требуемого уровня оптимизации физической подсистемы. Реализованы возможности рейкастинга, обнаружение столкновений, динамики твёрдых тел и соединений между ними. Так же имеется обширный арсенал инструментов, осуществляющих кинематику.
Кстати, объекты предназначенные для распознавания физических взаимодействий, полностью изолированы от визуализационных, что облегчает манипуляции с теми и другими и гарантирует, что вы не поломаете визуал своего сложного десептикона столкновением с автоботом.
К сожалению, в версиях движка 3.0 — 3.5 (к настоящему моменту самая свежая из стабильных) на 2D пространстве отсутствует физика частиц — поведение имитируется, оставаясь не более, чем визуальным эффектом. Честной физики мы тут не увидим. В Godot 4.0 этот компонент улучшен, но это всё ещё альфа — имейте это в виду, если захотите поиграть с физикой частиц в новой версии движка. Для 3D всё в порядке.
Платформы
Напоминаю, для того, чтобы сбилдить проект вам сперва нужно скачать и настроить соответствующий компонент. Выбор при этом у вас впечатляющий. Godot поддерживает Windows (и UWP OS), MacOS, X11 (Linux, BSD), Android OS, iOS, HTML5. Также можно производить экспорт на другие платформы вручную через компилирование движка для SDK целевой платформы.
Система ввода поддерживает клавиатуру, мышку, геймпад и сенсорный экран (разные устройства могут быть назначены на абстрактное действие, и оно будет рассматриваться независимо от использованного метода ввода).
Подведём итоги
Здесь перечислены плюсы и минусы движка в голом виде — без дополнительных библиотек и плагинов, как будто вы его только что скачали.
Плюсы:
- компактность;
- MIT лицензия;
- открытый код;
- не трубет установки;
- кроссплатформенность;
- гибкость;
- универсальность;
- быстродействие;
- многопоточность;
- высокая оптимизация;
- эффективное управление ресурсами компьютера;
- удобство для использования;
- быстрый доступ к справке и внешним библиотекам;
- возможность взаимодействия с компонентами управления из вашего скрипта (например, можно статистику смотреть не на выделенной панели, а вывести прямо во вьюпорт игры).
Минусы:
- скундый набор инструментов визуальной разработки;
- отсутсвие предустановленных тимплейтов;
- отсутствие встроенных инструментов для билда;
- неудобные инструменты вёрстки диалоговых окон;
- слабые AR/VR компоненты;
- осутствие физики для 2D частиц;
- отсутствие возможности редактирования мешей и уровней сглаживания;
- низкая популярность в России (очень мало материалов на русском языке).
Благодарю за внимание! Надеюсь, вам было интересно в общих чертах познакомиться с Godot. Если у вас остались вопрсы, можете задать их в комментах, постараюсь ответить на все :)
Всем хорошего дня, вдохновения и успехов в освоении Godot!
P.S.: Следующим постом выложу полезные материалы для новичков с кратким описанием полезности.
P.P.S.: К сожалению, невозможно запихать в один обзор всю полезную и интересную информацию, поэтому в перспективе планирую сделать подробное описание каждого блока с разбором функциональных компонентов. Пожалуйста, посигнальте в комментах, если эта информация вам интересна.