Как правильно сделать разрушаемый мир(на подобии minecraft)?
Собираюсь написать игру, в основе которой лежит изменяемый мир, как в minecraft, только не кубический, а более реалистичный. Использовать карту высот не вариант, так как должна быть реализована возможность копать туннели. Первое, что приходит на ум, - поделить мир на блоки и уже в блоках на точки, скажем через каждые пол метра, если точки "материальны"(земля, камень и т.д.), то рассчитываем каким-либо образом поверхность, визуализируем её и отдаём клиент. Но если немного посчитать, то это будет занимать очень много места. Допустим, под один блок отводится 1 байт, тогда 1000м*1000м*1000м*2б=2000000000б~2Гб, а уж если карта будет 30х30км... Где-то читал, что в minecraft всё делается именно так, но хранится в сжатом виде, хотя может я ошибаюсь.
Собственно вопрос: как сделать основу грамотно, чтоб мир был расширяемый и не занимал терабайты памяти? Также интересует, насколько хорошо это можно реализовать в Unreal Engine, сам двиг пока не изучал, но склоняюсь больше к нему (С++ меня не пугает) и насколько вообще Unreal подходит для такого проекта? Интересует именно производительность конечного продукта, а не удобство разработки.
Не знал об этом, спасибо. Почитал на вики, интересная идея. Но всё же не совсем понятно, хватит ли памяти, если игроки будут очень активно копать и сделают сложную систему тоннелей и насыпей, в этом случае воксели будут разбиваться на более меньшие по размеру, а их количество - расти.
Написано
Saboteur
@saboteur_kiev Куратор тега Разработка игр
devalone: Так и происходит не хватает памяти. Иначе почему не в каждой игре сделан разрушаемый мир?
Можно переразбивать поверхность. Т.е. когда копаете ямку, нужно вырезать треугольники из существующей грани и добавить новые грани, образующие тоннель. Это сложно, но довольно эффективно - перерасхода памяти не будет.
Тоже думал менять геометрию поверхности, но это слишком сложно и не очень подходит в рамках моей идеи. У меня в игре будет несколько слоёв: камень, глина, земля и т.д.
devalone: В принципе, разные материалы не проблема. Если разбивать поверхность не на треугольники, а на тетраэдры, то можно даже вокруг разбрасывать реальные куски земли. Типа как в Red Faction. Т.е. "копаемые" материалы будут как бы твёрдотельными моделями.
maaGames: тогда это уже практически воксели, что предлагали выше и мы по сути будет хранить эти тетраэдры. Как вариант хранить их только на сервере, но он тоже не бесконечен по памяти.
А в Unreal можно загружать карту из вне? Допустим сервер будет её генерировать и менять, когда получает сообщения от клиентов, а Unreal'у предоставлять не набор вокселей, а привычный набор вершин с текстурами. Просто не хотелось бы терять те возможности, которые предоставляет unreal из коробки (графика, физика и другие плюшки). Есть ли смысл писать свой движок? P.S. Первое время в команде будет 2-3 человека.
devalone: или вам надо будет научить понимать анриал воксели, или сразу работать с вершинами, конвертирование на лету из вокселей в вершины и скармливание их движку очевидно сильно нагрузит и ЦП и ОЗУ.
Как то думал то над такой идей, не знаю поймёте ли) В 2.5D изометрии используют обман зрения когда заменяем например вскопанный сектор кубика на несколько вокруг него либо наоборот, если добавляем кубик то запрещаем проходить там где как бы сектор выше