Промпт на старт игрушки
Тут некоторые спрашивают, как я начинаю проекты. Да вот так. Мне не жалко, сейчас покажу. Два файлика, которые я создаю отдельно в перплексити + aistudio idea.md
Хочу сделать движок игры
1) полностью разрушаемый шарообразный мир в котором можно копать. Воксельная механика, вопрос формы вокселей (либо вообще воксели как точки). Мир круглый, краевые артефакты не приемлемы
2) Строительство из кубов и/или выровненным по кубам моделям как в майнкрафте
3) обычные полигональные модели предметов, монстров и деревьев
4) реалистичная физика воды и газов
Пожалуй локальная привязка к гриду для строительства более менее адекватно звучит если выбирать компромиссы. Вопрос стыковки разных механизмов может решаться полигональным роутингом (аля satisfactory)
=====
Да, компромисс “локальная привязка к гриду для строительства + сферический/изотропный базовый мир” звучит наиболее реализуемо, если вы одновременно хотите копание, кубическое строительство, обычные модели и ещё и воду/газы. Главная мысль: не пытаться одной дискретизацией закрыть все 4 пункта, а разнести их на 2–3 взаимосвязанных представления мира.
1) Геометрия планеты: поле плотности + изосёрфейс
Для «толстого шара, всё разрушаемо» лучше мыслить не “воксель-кирпичами особой формы”, а скалярным полем плотности/материала (узлы решётки) и извлечением поверхности (DC/MC). Dual Contouring хорошо подходит для динамических изменений и позволяет делать более резкие формы, чем marching cubes, а Manifold Dual Contouring помогает удерживать манихолдность при адаптивности/LOD.
Практический вывод: оставляйте сферу как “объём данных”, а визуальную поверхность — как производную (меш), который вы перестраиваете по чанкам при копании.
Хранилище: чанки фиксированного размера 32x32x32по миру (для стриминга/мультиплеера/диска), но внутри каждого чанка — адаптивное представление (octree или хотя бы sparse) чтобы сжимать пустоты/монолит. Это даёт управляемость и экономию памяти.
Мешинг: Dual Contouring / Manifold DC для качества, sharp features и нормальной адаптивности; плюс seam-генерация на границах чанков, чтобы исключить трещины.
2) Кубическое строительство: отдельный локальный grid-слой
Кубы “как в Minecraft” глобально на сфере без искажений невозможны (это по сути проблема наложения квадратной сетки на сферу), поэтому делать это локально — правильная цена. Идея: при размещении постройки создаёте локальную ортонормальную систему (касательная плоскость + up по гравитации к центру), и в ней живёт строительный grid (кубы, выровненные модели). Это похоже на “полигональный роутинг” из Satisfactory: базовый мир — органический/воксельный, а конструкции — отдельная “инженерная” подсистема со своими правилами стыковки.
Как стыковать с террейном: булевы операции “строительство как solid” модифицируют поле плотности (вырез/заливка), либо идут как отдельные коллайдеры/рендер-геометрия и только локально “подрезают” террейн.
3) LOD/чанки без краевых артефактов
“Краевые артефакты не приемлемы” = вам нужен протокол стыковки мешей между чанками и (если будет LOD) между уровнями. Для voxel terrain это классическая проблема cracks; один путь — Transvoxel (табличные переходные полигоны), другой — seam/stitch подходы вокруг dual contouring. Transvoxel прямо описывает проблему трещин при разных разрешениях и даёт стандартное решение для изосёрфейсов.
Если вы идёте в dual contouring, полезна практика seam mesh/overlap-chunks для скрытия/устранения трещин в стыках.
4) Вода и газы: решётка симуляции ≠ решётка террейна
“Реалистичная физика воды и газов” на огромной разрушаемой планете в реальном времени — отдельный бюджет. В реальном времени часто используют grid-based подходы (скоростное поле на 3D сетке), и базовая отправная точка в литературе/практике — Stable Fluids Стэма (unconditionally stable, большие шаги по времени, сравнительно простая реализация).
Практически это значит:
Газ/дым: stable fluids или их GPU-варианты на относительно грубой/адаптивной решётке, привязанной к активной зоне вокруг игрока.
Вода: либо похожая решётка + free-surface приближения, либо гибрид (локальные “ячейки-резервуары”/pipe network) — но не пытаться “честный CFD” на всей планете.
Рекомендуемая архитектура (с минимальным риском)
Террейн: скалярное поле (материал/плотность) + Dual Contouring/Manifold DC для меша.
Строительство: локальные строительные гриды, привязанные к касательной плоскости и направлению гравитации; геометрия конструкций либо отдельная, либо модифицирует поле плотности булевыми “врезками”.
LOD: либо Transvoxel для MC-подобной схемы, либо seam/stitch в духе dual contouring, чтобы не было трещин.
Флюиды: отдельная симуляционная решётка, локальная/адаптивная; Stable Fluids как базовый кирпич.
====
техника rust + wgpuphase1.md
Сгенерируй планету диаметром 1 км.
Планета воксельная, сетка с разрешением в 1 метр.
Гравитация направлена к центру планеты.
Воксели земли - трава, под травой - земля, под землей - камень.
Меш планеты генерируется с помощью Dual Contouring (см @idea.md).
Помести игрока в стартовую точку. Игрок коллайдится с мешем.
Дай игроку вид из глаз, возможность двигаться wasd, поворачивать камеру мышкой, прыгать и копать ЛКМ.
Место где он копает - пересечение луча взгляда с ближайшим мешем. Отмечено голубой сферой
Один цикл копки убирает один воксель (понижает его непрозрачность до 0)
стейт
====
храним стейт изменения вокселей, загружаем из файла, сохраняем в файл
====
Запуск
make dev - загрузка мира с диска (если есть)
make dev new - генерация нового мираНачальный промпт:
согласно idea.md реализуй phase1.md задавай вопросы если нужно
А дальше просто дорисовываем эту дурацкую сову 😁
Комментарии (3)
А дальше?
Дальше рисуем сову!
Хе хе, а дальше дикое задротство на самом деле, само оно движок лепит с огромным количеством ошибок, нужно обвешиваться логами и поправлять на каждой стадии
Войдите, чтобы комментировать