Вложенные Persist-объекты меняют порядок загрузки сейва
У учебного примера сохранений в документации Godot 4.5 есть важное условие: узел группы
Сам подход простой. Игра собирает узлы
Но для вложенных объектов прежний путь к родителю может стать недействительным. Восстановление нужно разбить на этапы: сначала создать родителей, затем детей. Отдельно понадобится способ связать их, поскольку полагаться на старый
Есть и граница формата: JSON не хранит
У учебного примера сохранений в документации Godot 4.5 есть важное условие: узел группы
Persist не должен быть дочерним для другого сохраняемого узла той же группы.Сам подход простой. Игра собирает узлы
Persist, вызывает их save() и записывает каждый словарь отдельной JSON-строкой в user://savegame.save. При загрузке пример очищает сохраняемые объекты, создаёт экземпляры сцен и возвращает свойства.Но для вложенных объектов прежний путь к родителю может стать недействительным. Восстановление нужно разбить на этапы: сначала создать родителей, затем детей. Отдельно понадобится способ связать их, поскольку полагаться на старый
NodePath уже нельзя.Есть и граница формата: JSON не хранит
Vector2, Vector3 и Color напрямую. Их придётся переводить в поддерживаемые значения и собирать обратно. Этот пример даёт основу сериализации, но не решает миграции сейвов между версиями игры.Размер агента меняет navmesh
Один коридор может быть проходимым для мыши и слишком узким для человека. В Recast навигационная сетка строится под размеры и возможности конкретного агента, а не просто по свободному месту на уровне.
Четыре параметра задают эту разницу:
— радиус отвечает за ширину агента
— высота определяет, под каким потолком он поместится
— максимальный уклон ограничивает крутизну поверхности
— высота шага задаёт препятствия, на которые он способен подняться
Для нескольких типов персонажей в одном окружении могут понадобиться разные сетки. При построении Recast переводит геометрию в воксели, фильтрует их и снова получает полигональную сетку. Размер вокселя позволяет менять точность и время построения.
Введение Recast Navigation отдельно напоминает: navmesh упрощает геометрию для поиска пути. Полученный коридор полигонов уточняется в маршрут через string pulling. Ни сетка, ни этот маршрут не заменяют геометрию коллизий или сплайн анимации.
Один коридор может быть проходимым для мыши и слишком узким для человека. В Recast навигационная сетка строится под размеры и возможности конкретного агента, а не просто по свободному месту на уровне.
Четыре параметра задают эту разницу:
— радиус отвечает за ширину агента
— высота определяет, под каким потолком он поместится
— максимальный уклон ограничивает крутизну поверхности
— высота шага задаёт препятствия, на которые он способен подняться
Для нескольких типов персонажей в одном окружении могут понадобиться разные сетки. При построении Recast переводит геометрию в воксели, фильтрует их и снова получает полигональную сетку. Размер вокселя позволяет менять точность и время построения.
Введение Recast Navigation отдельно напоминает: navmesh упрощает геометрию для поиска пути. Полученный коридор полигонов уточняется в маршрут через string pulling. Ни сетка, ни этот маршрут не заменяют геометрию коллизий или сплайн анимации.
❤2🔥1
Субботний скриншотник! Принесите в комментарии кусочек своей игры: скриншот, гифку, видео, демку или ссылку. Можно показать и свой канал.
Что сдвинулось за неделю: анимация, меню, новая механика? Незаконченный прототип тоже подходит. Добавьте пару слов о том, над чем работаете, и загляните к другим авторам: спросите о решении или поддержите понравившуюся работу.
@make_game
Что сдвинулось за неделю: анимация, меню, новая механика? Незаконченный прототип тоже подходит. Добавьте пару слов о том, над чем работаете, и загляните к другим авторам: спросите о решении или поддержите понравившуюся работу.
@make_game
❤4
Сейв в облаке ещё должен попасть в нужную папку
Для Steam Auto-Cloud важны не только маски файлов, но и соответствие путей между ОС. В актуальной документации Valve у нового Root Path значение
Если сохранения в Windows, macOS и Linux лежат в разных каталогах, настройте
Сами сейвы стоит разделять по пользователям Steam. А настройки графики и другие параметры конкретной машины лучше не синхронизировать вместе с прогрессом.
Auto-Cloud переносит выбранные файлы перед сессией и после неё. Совместимость формата сейва между сборками остаётся задачей игры. Dynamic Cloud Sync, позволяющая получать изменения во время сессии, требует отдельной обработки и не включается в игру одной настройкой путей.
Для Steam Auto-Cloud важны не только маски файлов, но и соответствие путей между ОС. В актуальной документации Valve у нового Root Path значение
OS Restriction по умолчанию — Cross-Platform. Valve советует оставить его даже игре, которая пока выходит на одной платформе. Привязка к отдельной ОС ограничит дальнейшую синхронизацию этих файлов.Если сохранения в Windows, macOS и Linux лежат в разных каталогах, настройте
Root Overrides. Они сопоставляют исходный путь с расположением файлов на другой ОС. У исходного Root для этого должен стоять Cross-Platform.Сами сейвы стоит разделять по пользователям Steam. А настройки графики и другие параметры конкретной машины лучше не синхронизировать вместе с прогрессом.
Auto-Cloud переносит выбранные файлы перед сессией и после неё. Совместимость формата сейва между сборками остаётся задачей игры. Dynamic Cloud Sync, позволяющая получать изменения во время сессии, требует отдельной обработки и не включается в игру одной настройкой путей.
У sensor в Box2D два участника
Для зоны обнаружения без физического толчка в Box2D используется sensor. На одном body можно совместить обычные формы и сенсорные. Но одного
В документации Box2D 3.2.0 флаг
Дальше порядок такой: выполнить
Ещё две детали из официального руководства. Сенсорная форма может вносить вклад в массу, для исключения этого вклада задают нулевую плотность. А при быстром движении и сенсора, и другой формы надёжные события перекрытия не гарантированы. Для такого случая автор рекомендует ray cast или shape cast.
Проверяйте версию своего физического движка: эти флаги и поведение относятся к Box2D 3.2.0, их нельзя автоматически переносить на 2.x или любой встроенный порт.
Для зоны обнаружения без физического толчка в Box2D используется sensor. На одном body можно совместить обычные формы и сенсорные. Но одного
isSensor = true недостаточно, чтобы получать события.В документации Box2D 3.2.0 флаг
enableSensorEvents по умолчанию выключен. Включить его нужно у обеих участвующих форм, включая обычную форму, входящую в сенсор.Дальше порядок такой: выполнить
b2World_Step, получить b2World_GetSensorEvents, обработать массивы begin и end. Событие end может прийти из-за уничтожения формы, поэтому перед обращением к ней проверьте ID через b2Shape_IsValid.Ещё две детали из официального руководства. Сенсорная форма может вносить вклад в массу, для исключения этого вклада задают нулевую плотность. А при быстром движении и сенсора, и другой формы надёжные события перекрытия не гарантированы. Для такого случая автор рекомендует ray cast или shape cast.
Проверяйте версию своего физического движка: эти флаги и поведение относятся к Box2D 3.2.0, их нельзя автоматически переносить на 2.x или любой встроенный порт.
❤1
Музыка продолжает играть, но регулятор её громкости больше не действует? Если перед этим переименовали аудиошину в Godot, проверьте, куда теперь направлен
По описанию Audio buses в документации 4.5, player хранит имя шины. Перестановка шин связь сохраняет, а переименование её теряет. Тогда звук направляется в
Отсутствие эффекта в Web-сборке может иметь другую причину. Режим
Страница помечена
AudioStreamPlayer.По описанию Audio buses в документации 4.5, player хранит имя шины. Перестановка шин связь сохраняет, а переименование её теряет. Тогда звук направляется в
Master. После смены имени нужно заново проверить назначение у проигрывателей.Отсутствие эффекта в Web-сборке может иметь другую причину. Режим
Sample не поддерживает эффекты шин, для них нужен Stream. Если потоки не включены, у этого режима выше задержка. Сами эффекты применяются в порядке их расположения на шине, а молчащие несколько секунд шины и эффекты Godot отключает автоматически.Страница помечена
Work in progress: её ещё не обновили для 4.5, и описание может быть устаревшим. Это ориентир для диагностики, поведение нужно проверить в версии своего проекта.A* можно подсказать, где на карте стены
Эвристика расстояния видит близкую цель, но не знает, что дорога к ней начинается с обхода в другую сторону. В разборе Red Blob Games Амит Патель показывает другой источник оценки: заранее рассчитанные расстояния до ориентиров, или landmarks.
Для каждого ориентира сохраняют стоимость кратчайшего пути от узлов карты. В неориентированном графе разность расстояний от двух узлов до одного ориентира даёт нижнюю оценку пути между ними:
Можно взять максимум по нескольким ориентирам и допустимой исходной эвристике. Сам A* менять не нужно. Расчёт используется повторно в запросах с разными целями, но требует памяти: число ориентиров × число узлов × размер числа. Удачное расположение ориентиров тоже зависит от карты.
Для направленного графа нельзя просто перенести формулу с модулем. А если изменение карты уменьшило стоимость ребра, старая таблица может завысить оценку. До её обновления гарантия кратчайшего пути теряется.
На странице есть интерактивные карты, в том числе лабиринты и уровни Cogmind. Материал датирован июлем 2026 года, и автор прямо отмечает, что ещё не применял метод в реальном проекте. По демо можно изучить поведение эвристики, но производственного замера здесь нет.
Эвристика расстояния видит близкую цель, но не знает, что дорога к ней начинается с обхода в другую сторону. В разборе Red Blob Games Амит Патель показывает другой источник оценки: заранее рассчитанные расстояния до ориентиров, или landmarks.
Для каждого ориентира сохраняют стоимость кратчайшего пути от узлов карты. В неориентированном графе разность расстояний от двух узлов до одного ориентира даёт нижнюю оценку пути между ними:
h(B, X) = |d(B, L) - d(X, L)|Можно взять максимум по нескольким ориентирам и допустимой исходной эвристике. Сам A* менять не нужно. Расчёт используется повторно в запросах с разными целями, но требует памяти: число ориентиров × число узлов × размер числа. Удачное расположение ориентиров тоже зависит от карты.
Для направленного графа нельзя просто перенести формулу с модулем. А если изменение карты уменьшило стоимость ребра, старая таблица может завысить оценку. До её обновления гарантия кратчайшего пути теряется.
На странице есть интерактивные карты, в том числе лабиринты и уровни Cogmind. Материал датирован июлем 2026 года, и автор прямо отмечает, что ещё не применял метод в реальном проекте. По демо можно изучить поведение эвристики, но производственного замера здесь нет.
❤2
Объекты совпали на экране, но столкновения между ними нет
В Defold это возможно, если объекты принадлежат разным мирам, загруженным через collection proxy. У каждого такого мира собственная физика. Коллизии, триггеры и ray casts работают только внутри него, даже при одинаковых координатах объектов из двух миров.
Здесь важна разница двух компонентов:
Миры могут обмениваться сообщениями по полному URL объекта. А напрямую вызвать
Руководство Defold отмечает и расход памяти: новый мир обходится заметно дороже обычного экземпляра иерархии. Для множества однотипных объектов уместнее collection factory, а proxy полезен там, где нужна именно отдельная коллекция со своим миром.
В Defold это возможно, если объекты принадлежат разным мирам, загруженным через collection proxy. У каждого такого мира собственная физика. Коллизии, триггеры и ray casts работают только внутри него, даже при одинаковых координатах объектов из двух миров.
Здесь важна разница двух компонентов:
Collection factory создаёт экземпляры содержимого коллекции в текущем мире.Collection proxy загружает отдельный мир. После load или async_load приходит proxy_loaded, затем можно выполнить init и enable.Миры могут обмениваться сообщениями по полному URL объекта. А напрямую вызвать
go.get_position для объекта из другого мира нельзя. Для передачи ввода в загруженную коллекцию объект с proxy должен приобрести ввод.Руководство Defold отмечает и расход памяти: новый мир обходится заметно дороже обычного экземпляра иерархии. Для множества однотипных объектов уместнее collection factory, а proxy полезен там, где нужна именно отдельная коллекция со своим миром.
This media is not supported in your browser
VIEW IN TELEGRAM
SpringArm3D учитывает ближнюю плоскость камеры
В ролике из документации Godot камера приближается к персонажу у стены. За это отвечает
Для этого важна иерархия узлов. Если
Если камера вложена глубже, а Shape не задан, остаётся луч, который может пропустить препятствие у края кадра. В руководстве Godot 4.5 показаны обе схемы.
В ролике из документации Godot камера приближается к персонажу у стены. За это отвечает
SpringArm3D: на каждом физическом кадре он проверяет путь на заданную длину и сдвигает дочерние узлы к месту столкновения.Для этого важна иерархия узлов. Если
Camera3D — непосредственный ребёнок плеча, а Shape пуст, проверка использует пирамиду ближней плоскости камеры. Так учитывается объём у объектива, а не только линия до него.Если камера вложена глубже, а Shape не задан, остаётся луч, который может пропустить препятствие у края кадра. В руководстве Godot 4.5 показаны обе схемы.
❤3
Media is too big
VIEW IN TELEGRAM
Эти полосы меняют направление вместе с входным полем. Rune Skovbo Johansen показал такой шум в разборе Phacelle Noise: результат — вектор с компонентами косинуса и синуса. Из его фазы можно получить разные профили полос.
У автора два варианта. Simple получает направление одним входным параметром и проходит 4 × 4 ячейки на пиксель. Sampled считывает направление для каждой из этих 16 ячеек.
Разница видна на резких изменениях поля. У Simple там могут появляться разрывы, а Sampled устраняет этот вид разрыва. Sampled требует больше выборок входного поля, но оценить прирост FPS по статье нельзя: подробного GPU-бенчмарка в ней нет.
У автора два варианта. Simple получает направление одним входным параметром и проходит 4 × 4 ячейки на пиксель. Sampled считывает направление для каждой из этих 16 ячеек.
Разница видна на резких изменениях поля. У Simple там могут появляться разрывы, а Sampled устраняет этот вид разрыва. Sampled требует больше выборок входного поля, но оценить прирост FPS по статье нельзя: подробного GPU-бенчмарка в ней нет.
❤1
Для шага нужна площадка сверху
Ступенька достаточно низкая, а персонаж всё равно упирается? Чтобы autostep в Rapier сработал, нужно соблюсти несколько условий:
— высота укладывается в заданный максимум
— сверху хватает горизонтального места, узкий уступ не подойдёт
— персонаж уже касается пола перед препятствием
В руководстве JavaScript 0.21 есть и отдельная настройка: разрешать ли подъём на динамические тела. Прыжок рядом с платформой не должен превращаться в автоматический подъём на неё.
Контроллер вычисляет допустимое перемещение, но применяет его к телу или коллайдеру уже код игры. Он обрабатывает поступательное движение, а не вращение.
Ступенька достаточно низкая, а персонаж всё равно упирается? Чтобы autostep в Rapier сработал, нужно соблюсти несколько условий:
— высота укладывается в заданный максимум
— сверху хватает горизонтального места, узкий уступ не подойдёт
— персонаж уже касается пола перед препятствием
В руководстве JavaScript 0.21 есть и отдельная настройка: разрешать ли подъём на динамические тела. Прыжок рядом с платформой не должен превращаться в автоматический подъём на неё.
Контроллер вычисляет допустимое перемещение, но применяет его к телу или коллайдеру уже код игры. Он обрабатывает поступательное движение, а не вращение.
❤2
Для этого рельефа Rune Skovbo Johansen взял функцию высоты и её градиент, затем добавил несколько октав направленных борозд. Течение воды по всей карте фильтр не моделирует. Каждая точка вычисляется независимо, что удобно для GPU и генерации чанков.
Горные гребни получаются ветвящимися и чёткими, но физически связной речной сети здесь нет. Автор замечает, что линии стока иногда обрываются посреди склона. Фильтр воспроизводит внешний вид эрозии.
В разборе разработки можно проследить, что дали затухание слоёв и частичная нормализация. Код опубликован под MPL 2.0, в статье есть ссылки на реализации и Shadertoy.
Горные гребни получаются ветвящимися и чёткими, но физически связной речной сети здесь нет. Автор замечает, что линии стока иногда обрываются посреди склона. Фильтр воспроизводит внешний вид эрозии.
В разборе разработки можно проследить, что дали затухание слоёв и частичная нормализация. Код опубликован под MPL 2.0, в статье есть ссылки на реализации и Shadertoy.
🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Один меш, разные фазы движения рыб
В этом демо одна рыба. Посмотрите на голову: маска ограничивает волну и скручивание задней частью тела, чтобы модель не изгибалась целиком.
В разборе Godot для экземпляров MultiMesh показан приём:
При повороте с маской результат нужно смешивать через
Страница ветки 4.5 помечена Work in progress и содержит старые поля API. Её стоит читать как объяснение анимации, а не готовый код для текущей версии. Движение стаи и её AI в этот этап не входят.
В этом демо одна рыба. Посмотрите на голову: маска ограничивает волну и скручивание задней частью тела, чтобы модель не изгибалась целиком.
В разборе Godot для экземпляров MultiMesh показан приём:
INSTANCE_CUSTOM.x сдвигает фазу времени, а .y позволяет менять скорость. Общий меш и шейдер не заставляют всех рыб двигаться синхронно.При повороте с маской результат нужно смешивать через
mix. Простое умножение на маску сожмёт модель.Страница ветки 4.5 помечена Work in progress и содержит старые поля API. Её стоит читать как объяснение анимации, а не готовый код для текущей версии. Движение стаи и её AI в этот этап не входят.
❤1
Маленький PNG может занимать много памяти
Уменьшить размер игры для скачивания и расход памяти текстур — две разные задачи. После декодирования небольшой файл может занять гораздо больше места. Для GPU нужны свои форматы сжатия, а результат с потерями придётся проверить глазами.
В Defold настройка устроена так:
Правила путей назначают профили ресурсам. Специфические glob-правила ставят раньше общих.
BasisU хранит промежуточное представление, которое транскодируется в подходящий формат GPU.
В руководстве по профилям описаны и ограничения: несколько форматов могут увеличить bundle, а сжатие — время сборки. Поддержку формата нужно сверять с целевыми устройствами.
Уменьшить размер игры для скачивания и расход памяти текстур — две разные задачи. После декодирования небольшой файл может занять гораздо больше места. Для GPU нужны свои форматы сжатия, а результат с потерями придётся проверить глазами.
В Defold настройка устроена так:
.texture_profiles задаёт форматы для платформ.Правила путей назначают профили ресурсам. Специфические glob-правила ставят раньше общих.
BasisU хранит промежуточное представление, которое транскодируется в подходящий формат GPU.
В руководстве по профилям описаны и ограничения: несколько форматов могут увеличить bundle, а сжатие — время сборки. Поддержку формата нужно сверять с целевыми устройствами.
This media is not supported in your browser
VIEW IN TELEGRAM
Волна стала пилой
Это пример из Unity 2017.4.4f1, Surface Shader для Built-in. Вершины сетки стоят с шагом 1, а длина волны равна 2. Точек слишком мало, чтобы передать изгиб, и поверхность превращается в стоящую пилу. Дело здесь не в сломанных нормалях.
Автор разбора Waves советует выбирать длину волны больше удвоенной длины ребра сетки и оставлять запас по плотности. Анимация текстуры эту проблему не решит: геометрию двигает vertex displacement. Связь длины волны с сеткой пригодится и сейчас, хотя код для современного URP или HDRP придётся адаптировать.
Это пример из Unity 2017.4.4f1, Surface Shader для Built-in. Вершины сетки стоят с шагом 1, а длина волны равна 2. Точек слишком мало, чтобы передать изгиб, и поверхность превращается в стоящую пилу. Дело здесь не в сломанных нормалях.
Автор разбора Waves советует выбирать длину волны больше удвоенной длины ребра сетки и оставлять запас по плотности. Анимация текстуры эту проблему не решит: геометрию двигает vertex displacement. Связь длины волны с сеткой пригодится и сейчас, хотя код для современного URP или HDRP придётся адаптировать.
😴2❤1
У реки не одна ближайшая точка
На схеме слушатель стоит между двумя изгибами реки. Если всегда переносить источник звука в ближайшую точку берега, при движении эта точка может резко перескочить на другую сторону.
Rune Skovbo Johansen описал Point Cloud Sound: по точкам вдоль реки рассчитываются суммарная громкость, взвешенное направление и spread. Для каждого звукового компонента используется один источник. Чем короче средний вектор направлений, тем шире spread. Так звук может окружать слушателя, а не прыгать между берегами.
У итогового источника нужно отключить встроенное затухание по расстоянию, иначе оно учтётся дважды. Метод рассчитан на общий фон вроде воды и листвы. Объединять в нём независимые шаги или реплики отдельных персонажей не стоит. В статье — фрагменты алгоритма, не готовая библиотека.
На схеме слушатель стоит между двумя изгибами реки. Если всегда переносить источник звука в ближайшую точку берега, при движении эта точка может резко перескочить на другую сторону.
Rune Skovbo Johansen описал Point Cloud Sound: по точкам вдоль реки рассчитываются суммарная громкость, взвешенное направление и spread. Для каждого звукового компонента используется один источник. Чем короче средний вектор направлений, тем шире spread. Так звук может окружать слушателя, а не прыгать между берегами.
У итогового источника нужно отключить встроенное затухание по расстоянию, иначе оно учтётся дважды. Метод рассчитан на общий фон вроде воды и листвы. Объединять в нём независимые шаги или реплики отдельных персонажей не стоит. В статье — фрагменты алгоритма, не готовая библиотека.
Субботний скриншотник! Что вы успели добавить в свою игру за неделю? Приносите в комментарии скриншоты, гифки, видео, демки и ссылки на свои игры или каналы.
Показывайте и небольшой прогресс: новую анимацию, кусочек уровня или незаконченный прототип. Загляните к другим участникам, спросите про интересную деталь и поддержите их работу.
@make_game
Показывайте и небольшой прогресс: новую анимацию, кусочек уровня или незаконченный прототип. Загляните к другим участникам, спросите про интересную деталь и поддержите их работу.
@make_game
This media is not supported in your browser
VIEW IN TELEGRAM
У VesperaFX можно взять только палитру, дизеринг и пикселизацию, не подключая остальные постэффекты. В репозитории компактная основа лежит в
При RGB matching шейдер перебирает цвета на каждом пикселе. Автор советует заранее рассчитанную LUT, если это становится дорого. Полный
В README указана Godot 4.4.1 и лицензия MPL 2.0. Приложенный ролик показывает сцену из старой версии шейдера, без интерфейса редактора. Это демонстрация визуального эффекта, а не проверка всех возможностей текущего набора.
main.gdshader, а отдельные сочетания — в папке examples.При RGB matching шейдер перебирает цвета на каждом пикселе. Автор советует заранее рассчитанную LUT, если это становится дорого. Полный
all_effects_demo оставлен как справочный пример и стресс-тест, а не вариант по умолчанию для игры.В README указана Godot 4.4.1 и лицензия MPL 2.0. Приложенный ролик показывает сцену из старой версии шейдера, без интерфейса редактора. Это демонстрация визуального эффекта, а не проверка всех возможностей текущего набора.
Слева чайник будто висит, справа под ним есть мягкое пятно. Это blob shadow: простая проекция помогает понять, где объект находится относительно поверхности, когда полностью запечённое освещение не даёт подвижному предмету динамическую тень. В Godot 4.5 такую приближённую тень можно сделать декалью в Forward+ или Mobile. В Compatibility декали не работают.
Декаль меняет свойства уже существующей поверхности, не добавляя геометрию. Затраты на её отрисовку зависят от площади покрытия экрана и числа узлов. В документации показано это сравнение и описан Distance Fade, которым можно убирать дальние декали.
Декаль меняет свойства уже существующей поверхности, не добавляя геометрию. Затраты на её отрисовку зависят от площади покрытия экрана и числа узлов. В документации показано это сравнение и описан Distance Fade, которым можно убирать дальние декали.
❤1
Рельеф с тоннелями и навесами
На исходном скриншоте Voxel Tools виден нависающий пласт породы. Объёмное представление позволяет делать такие формы, а также тоннели и разрушаемый рельеф: воксели превращаются в меши отдельных чанков.
Voxel Tools for Godot предлагает блочный и гладкий terrain, загрузку чанков по мере надобности и собственные генераторы. Для гладкого рельефа есть LOD на основе Transvoxel. Проект опубликован под MIT.
Это C++-модуль для Godot 4 со своей инструкцией установки. Текущий README не обещает совместимости с любым стандартным редактором, а пункты roadmap ещё не означают готовые функции. Скриншот показывает гладкий рельеф, не процесс редактирования во время игры.
На исходном скриншоте Voxel Tools виден нависающий пласт породы. Объёмное представление позволяет делать такие формы, а также тоннели и разрушаемый рельеф: воксели превращаются в меши отдельных чанков.
Voxel Tools for Godot предлагает блочный и гладкий terrain, загрузку чанков по мере надобности и собственные генераторы. Для гладкого рельефа есть LOD на основе Transvoxel. Проект опубликован под MIT.
Это C++-модуль для Godot 4 со своей инструкцией установки. Текущий README не обещает совместимости с любым стандартным редактором, а пункты roadmap ещё не означают готовые функции. Скриншот показывает гладкий рельеф, не процесс редактирования во время игры.
❤1