Алгоритмы MineCraft-like игр
Warning! Алгоритмическая база топикстартера очень маленькая, так что просьба приводить ссылки на описание предлагаемых/обсуждаемых алгоритмов. Да, я до сих пор не выучил Octree. Заранее спасибо.
Знаю, в эту ветку форума мало кто заглядывает, но тем не менее. Заинтересовала меня алгоритмическая подоплека майнкрафта и возможные альтернативы. Самый любопытный вопрос - хаки для уменьшения размера карты, хранимой на диске. Насколько я понял, майнкрафт бьет пространство на кранчи 16х16х128, которые пишет в папки, названия которых - координаты кранча. Мне это кажется удобным с точки зрения генерируемого мира, но неудобным с точки зрения мира художественного (если я хочу сохранить на карте тут каньон, там - речку, а там гору с пляжем у подножья - нужно перебирать ключи генератора пока не выпадет что-то похожее на то, чего мне хочется, или копать вручную) Какая идея пришла в голову мне во время бесед с Данилом и PAX'ом: во-первых, хранить не байт информации для одного кубика, а бит. Просто флаг существования в данной точке пространства материи. во-вторых, модифицировать формат кранча. не просто развернутый в последовательность бит массив, а развернутый по-плоскостно (т.е. вертикальная координата меняется после того, как записали все клетки в этой горизонтальной плоскости) массив, содержащий запись вида: 12 9 4 где 12 - число следующих за предыдущей отметкой других знаков. Началом всегда считается 0, т.е. запись выше равна: 000000000000 111111111 0000 (но в файле использовать 15-ричную систему, 16-й символ (код "1111") - конец числа, указывающего длинну последовательности) Почему я предлагаю такой формат записи: очень маловероятно, что игрок захочет сделать "решето" (а если прикрутить потом физику обвалов - у него это и вовсе не получится), поэтому внутренний механизм сжатия, основанный на гипотезе больших монотонных пространств (заполненных/пустых) предположительно даст больше выигрыша, чем какой-нибудь алгоритм со словарем... Идем дальше. А как узнать, какого типа этот конкретный кубик? Тут я предлагаю использовать хитрую штуку по имени "геологические карты": текстуры 1024х1024. В R-канале - толщина слоя от конца предыдущего слоя до начала следующего (или от дна мира, если предыдущего слоя нет; или до поверхности, если следующего слоя нет), в G-канале - по 4 бита на тип породы и тип примеси, в B- и A-каналы можно засунуть дополнительную информацию. Почему именно текстуры? Просто проще редактировать. На 1 тексель приходится площадь либо 1 (0.5?) кранча, либо 10х10 кубиков - тут надо посмотреть, как удобнее будет. Детализировать (определять, какой конкретно кубик какого конкретно материала) предлагаю процедурными алгоритмами (каким-нибудь 100%-повторяемым нойзом) В итоге 10-20 текстурами мы опишем ландшафт 10х10 километров, созданный дизайнером а не машиной. Лирическое отступление: если задуматься, то такой подход наиболее реалистичен, что ли. Вы задаете форму мира и примерно намечаете его содержание - а машина перемешивает различные породы, давая игроку ощущения одновременно и машинного многообразия, и ручной работы. Спавнеры и прочие особенности я думаю имеет смысл записывать в форме отдельного блока данных с указанием координат и типа элемента. Ну и наконец, куда записывать произведения игрока: Тут можно писать кранчи "в лоб" как это сделано в майнкрафте - байтовые массивы. Возможно - кубические кранчи (не знаю, насколько абсурдна эта фраза, не знаю точного определения слова "кранч") произвольного размера в произвольных координатах - с целью уменьшения опять же занимаемого на диске места... Но скорее всего игра с произвольной разбивкой не стоит свеч, и "в лоб" решить задачу будет проще. Последнее. Как это всё собрать в единую картинку мира: (геологические данные + интерполяция нойзом) * битовую запись существования материи + запись уникальных объектов (спавнеров) + запись скрафченного игроком. Разумеется, всё это - в рамках зоны видимости. Ну а теперь мне интересно, что вы думаете об алгоритмах майнкрафта (не только записи карты мира) ? |
Ответ: Алгоритмы MineCraft-like игр
Цитата:
я бы хранил карту чанками на диске, и одним массивом в памяти. разные файлы могут быть удобны чтобы скидывать изменения мира на диск - не переписывать один огромный файл, а перезаписывать только изменившиеся маленькие. что гораздо более интересно - это "механика" жидкостей и падающие породы. всегда удивлялся висящим в воздухе срубленым деревьям в майнкрафте. |
Ответ: Алгоритмы MineCraft-like игр
Цитата:
А падающие породы это вполне реализуемо. Нужно определить коэффициент "рыхлости" породы, и если он не превышен какой-либо загогулиной - ронять кусок породы, висящий в воздухе, до контакта с поверхностью. А если он упал на какой-нибудь шпиль - тут начнутся проверки на "рыхлость" породы |
Ответ: Алгоритмы MineCraft-like игр
Ну вот песок, например, падает же
|
Ответ: Алгоритмы MineCraft-like игр
У каждого грунта 2 основных параметра это: угол внутреннего трения и коэффициент сцепления, "рыхлость" - это пористость грунта. У песка сцепление равно нулю, а угол =27-35 град. Грубо говоря это угол у основания призмы( кучи песка ), при большем угле происходит обрушение. Есть много разным способов расчета обрушения откоса. Сам думал на эту тему, но если не придумать упрощения, то много считать придется.
|
Ответ: Алгоритмы MineCraft-like игр
Собственно h1dd3n присылал ссылку на клон майнкрафта на Unity на форум и еще он мне давал почитать статью о его реализации:
http://www.m2h.nl/files/UserCustomiz...tualWorlds.pdf |
Ответ: Алгоритмы MineCraft-like игр
Зарегался только что бы сказать большое спасибо автору) Идеи очень классные, мы думали о чём то похожем и скорее всего сделаем что-то подобное скоро))
|
Ответ: Алгоритмы MineCraft-like игр
Если я не ошибаюсь, в майне песок (и гравий, и наковальня) во время падения превращаются из блока в предмет.
|
Часовой пояс GMT +4, время: 16:28. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot