Невангеры и Godot
Когда узнал, что опенсурсный игровой движок Godot умеет в полноценное 3d, то решил познакомиться с его возможностями при случае и попробовать на практике. Вот что из этого получилось.
На деле оказалось, что Godot отличный мультиплатформенный развивающийся игровой движок, уже плотно освоивший 2д и всерьёз нацелившийся на 3д графику. Отдельные плюсы - это его малый вес (около 70 Мб, не требующие установки), ну и, собственно опенсурсная сущность. В целом, по ощущениям, это как Blender от мира игровых движков.
Простая физическая модель машинки в этом движке идёт практически "из коробки", чем я и воспользовался, перенеся сюда невангерские модельки. Правда мой ноутбук не слишком хорошо тянет запись видео вместе с продвинутым режимом графики Godot'а, к тому же я не могу обновить видеодрайвер без сноса системы, поэтому проекционные тени на этом рендере не отображаются и я их выключил.
В плане кода движок позволяет писать и на низком уровне, и на скриптовых языках. Несмотря на то, что мне привычнее поддерживаемый здесь C#, я всё-таки решил осваивать внутренний питонообразный GDScript, у которого лучше совместимость и производительность, да и примеров его использования больше в силу исторических причин. Ну и, в любом случае, тот же C# на Unity, или C# на Unigine отличаются от C# на Godot, уже хотя бы тем, что используются разные наименования функций, имён и так далее. Так что всё-равно приходится привыкать и стараться не запутаться в "одинаковых" языках.
Визуальный нодовый "язык", кстати, тоже есть, но мне такое не интересно, поэтому не смотрел. С другой стороны, формировать какие-нибудь шейдеры мне привычнее как раз в нодовом редакторе, как в том же Blender. Ну так они обычно и не слишком сложные, плюс я не пробовал просто писать их, возможно, это даже удобнее. Как бы то ни было, Godot позволяет кастомные шейдеры писать или собирать визуально, как больше нравится.
На данный момент в движке два режима графики - более простой gles2, для не особо мощных систем (типа моей), вроде мобильных устройств, вёба и так далее, и более технологичный gles3 для систем помощнее. Не за горами появление поддержки vulkan. Правда, даже когда Годо придёт с вулканом, некоторые люди продолжат нахождение в режиме ожидания :)
Из особенностей движка можно отметить подход "всё есть сцена" и явную древовидную структуру. То есть довольно понятно какие сущности из чего наследуются, а каждая сцена - это сразу некая ветка, префаб, которую можно прикрепить внутрь другой сцены. Например, есть сам уровень-сцена, на нём есть дом-сцена, который можно открыть отдельно от уровня и расставить там какие-нибудь стулья-сцены, которые потом можно разбросать и на самом уровне, отдельно. В целом это всё означает, что здесь довольно удобно редактировать и пересобирать префабы.
Также присутствуют какие-то свои ограничения, вроде того, что на один объект можно вешать только один скрипт (что обходится через манипуляции с иерархией), и какие-то свои фишки, например, специальный подкласс объектов поддерживающих булевы операции внутри иерархии или конструктор мини-уровней. Что-то изначально в движке отсутствует, вроде того же редактора террейнов, с другой стороны для подобного есть написанные сообществом плагины, либо можно обратиться к специализированным программам, которые обычно делают это всё лучше, чем внутридвижковые инструменты.
На текущий момент я немного доработал прототип, добавив анимацию некоторым объектам, пару типов местности, наброски собирания "грибов" и выстрелов. И снял новый ролик. Первая часть видео записана с режима gles3, а вторая с менее качественного gles2 (зато в нём у меня всё в порядке с тенями). Кстати, один из важных моментов при конвертировании проекта из gles3 в gles2 - частицы будут просчитываться на процессоре, вместо видеокарты, поэтому движок просит перенастроить эмиттеры частиц и поменять им тип.
Кстати, что касается прототипа Невангеров на Unigine - знакомый выложил исходник на GitLab
и снял несколько видео на своей системе, настраивая физику
Напоследок, несколько моментов из Godot прототипа:
На этом пока всё.