wa}{else | Godot engine

Эксперименты с кастомной сборкой Годо, умеющей генерировать разрушаемые "воксельные" ландшафты, куда я добавил "паучка".

Тест. На фпс не обращайте внимания, я не могу записать лучше на своей системе, к тому же мой видеодрайвер работает не совсем корректно, например, не отображает gles3 тени.

Так как Godot engine является опенсурсным решением, то существует возможность собирать различные его специфические билды, в которых может добавляться какой-то узконаправленный функционал, всевозможные дополнительные модули, ускорения и оптимизации для различных процессов и так далее.

Одной из таких сборок является Voxel Tools от Marc Zylann , где реализована генерация рандомных "воксельных" ландшафтов с возможностью их точечного изменения на лету. По факту это не воксельная графика, а технология marching cubes, перепаивающая полигональную сетку, но если думать в сторону виртуальных вокселей, когда визуализация рассчитывается от состояния объёмной матрицы, то подход можно считать воксельным.

Тут можно вспомнить другую вещь, которая есть в Godot engine - воксельное освещение. Для которого как раз создаётся объёмная матрица с произвольным количеством строк и столбцов, где размеры ячеек-кубиков выставляют не слишком то маленькими. Эти кубики содержат данные об освещении в этой точке и мы видим не воксельную графику, а применение воксельных принципов для определения уровней освещённости.

Более ранний тест, где у "паучка" нет анимаций движения в боковые стороны и визуализации эффекта "ракетного ранца", а на ландшафт наложены чуть более простые материалы.

Если не особенно разбираться в коде модулей Voxel Tools, то имеется рандомно генерируемый ландшафт, сглаженный (как на моих видео) или кубический (что-то близкое к Minecraft). Для модификации ландшафта предложена стрельба кубиками (или округлыми объёмами, при сглаженной местности), которые добавляются или вычитаются из ландшафта. Из соображений производительности число таких операций ограничено неким количеством, после достижения которого старые изменения будут пропадать.

Понятно, что какой-то продвинутый геймплей на совершенно рандомной генерации местности особо не построишь, но даже не вникая в способы глобального управления ландшафтом, чтобы управлять всем этим более тонко и разнообразно, тут, в целом, есть простор для всякого рода экспериментов и создания чего-то простенького. Я, например, решил погонять по этим ландшафтам ползающего "паучка", одну из недавно сделанных в Blender моделек.

wa}{else | Godot engine

Иерархию отдельных деталей я настроил ещё в 3д пакете, а сами анимации записывал уже в Годо. Если модель состоит из множества деталей, то я обычно переношу её через формат fbx. В движке модель добавляется на сцену и если она статичная, а требуется только добавить ей материалов, то от этой модели можно унаследовать отдельную сцену (условно, префаб, говоря языком Unity), которую потом и добавлять куда нужно. Единственное мне было нужно, чтобы аниматор и детали оказались в основной сцене, где просто чуть удобнее находить к ним путь из главных скриптов, поэтому вместо конвертирования модели в отдельную сцену сделал её локальной, чтобы она встроилась в главную ветку иерархии и всё её отдельные части можно было тут же красить и анимировать.

Ландшафту можно назначить по сути любой материал, но из предложенных внутри Voxel Tools примеров довольно хорошо смотрится шейдер, смешивающий две текстуры. Чтобы сделать материал менее гладким я просто добавил на него вторым проходом карту detail с некоторыми прочими опциями.

Кстати, текущий воксельный билд движка базируется на определённой 3.2.2 версии Godot. Для сборки приложения потребуются её шаблоны сборки. Правда собрать по ним рабочее приложение можно только под Windows и Linux платформы (просто разработчик тестировал лишь основные). Что касается самого билда Godot Voxel Tools, то в отличие от Windows, Линукс-вариант у меня не установился, так как в системе стояли неподходящие версии C++ библиотек. Хотя, в данном случае можно было бы скомпилировать сам билд самостоятельно, под свою систему, из исходников.

Логика в примерах Voxel Tools написана на GDScript, то есть самостоятельно в C++ лезть не нужно. Например, довольно просто можно поменять размер добавляемых или вычитаемых объёмов. Допустим, я сделал альтернативный режим стрельбы, когда размер объёма высчитывается рандомно в определённых границах, чтобы терраформирование выглядело более хаотично - это можно увидеть примерно на второй минуте первого видео, где наращиваемые карнизом меши явно имеют разный размер.

2323
5 комментариев

Почти ничего не понял, но очень интересно

2
Ответить

хотя бы так :)

Ответить

Godot, как по мне - слишком сырой еще и не супер функциональный

Ответить

И никогда не будет.

1
Ответить

Я в пиар-службе Godot engine не работаю, мне не важно кто что про него думает.

Ответить