Обновить

Кубистая планета — делаем шарообразный мир в стиле Minecraft

Время на прочтение18 мин
Охват и читатели19K
Всего голосов 65: ↑63 и ↓2+82
Комментарии28

Комментарии 28

Уровень проделанной работы впечатляет.
Есть вопрос: я правильно понимаю, что поскольку в "мире" существует сетка уровней (по сути вложенные сферы) ровная краша домика невозможна в принципе. Можно ли сделать, чтобы в зависимости от типа блока их топология была бы разная?

не знаю спорно(на любителя) стыкуется идея кубического мира с кривизной в кубах по сфере, не знаю, там же глубже ситуация с обработкой чанков(тут это пирамида которая трансформируется в куб, но не куб но не совсем ровный куб и приводит это к тому что при любом скейле абсолютно ровной поверхности быть не может), воксели поинтереснее в первом своём представлении мира в кубе ) не знаю

тоесть эти данные банально сложнее чем воксель частичка пускай и абсолютно ровный, но зато им можно, и кривую сферу сделать, и напечатать что-нибудь, вон видел и замки там строют

Любопытно было бы посмотреть, но увы - винды нет, в принципе. Собрал бы сам, но нет исходников. Жаль.

Очень классное исследование. А квад сферы это прям хороший компромисс. Я как-то делал подобное на Хабре и сильно плохо получалось, пока в комментариях не подсказали как лучше

Смотрится классно.

Сейчас тоже делаем РПГ на круглой планете, выглядит намного интереснее плоского мира.

Что за игра?

Merc RPG
Визуал - фэнтези стилизация, что-то между WoW и Zelda
Геймплэй - смесь Magicka/Helldivers с Diablo
Ну и много фич типа взаимодействия стихий (вызвал дождь - потушил горящих и т.д.), мультиклассы

Пока еще в разработке, поэтому визуал сырой

А, у тебя на базе роблокса?

Да, из-за этого много сложностей вылезло при разработке.

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

Также любопытный язык - Lua, к которому прикрутили типизацию. Не идеально, но лучше, чем никак.

Думаю сделать обзор по тому, как разрабатывать на этой платформе (компилятор, линтеры, форматеры кода, менеджеры пакетов, менеджеры инструментов, синхронизация с IDE, MCP-сервер для связки с AI, как работать, используя ECS)

Почему бы не взять другой движок? Есть какие то подводные камни или просто так захотелось?

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

мне кажется нужно еще 1 искривление (тоесть там будет хитрая формула приводящая всё в норму(континуум наблюдателя на сфере) (хотя нет я ошибаюсь)

Не проще ли взять икосаэдр (усечённый) и замостить его шестиугольниками? Как, например, в Rim World. Там тоже есть особые точки, но они не так заметны.

Недавно кстати попадалось подобное видео от Incandescent Games на Ютубе. Там буквально подобная же идея, по подобию Майнкрафта сделать шар, а на нём шестиугольные блоки.

В игре Eco делали шарообразный minecraft. Классические чанки, мир склеен слева направо и сверху вниз. Кривизну мира сделали шейдером. Не так красиво, но намного проще.

Если так склеено, то это топологически будет тор.

В 90е был фанатом мультсериала Трансформеры. Вспомнилсась их планета Кибертрон :)

Вашу можно назвать Кубитрон :)

Слишком прекрасно, чтобы стать общедоступным (за деньги, разумеется :) ).

В своё время участвовал в проекте, полигональном, с терраморфингом, "2025". Проект зарубили.

Таких проектов, с терраморфингом, гравитацией и космическим пространством, сильно не хватает.

потомучто просто геотеро скушно и не интересно, плоские миры изучили вдоль и поперёк :)

Ну космос тут вряд ли применим, чанки в космос проецировать это уже наркомания будет, лучше каждой планете свое ограниченное пространство делать

Есть игра ECO там также сделанно.

А вы рассказали как под капотом. На больших радиусах как и в реальном мире искривление не видно.

Кстати в реальном мире когда строят очень большие сооружения то учитывают что земля круглая

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

Я кстати разработчиком был

вспоминается seed of andromeda

Интересно, но что мешает сделать изначальное деление на равное число блоков в слое, а по мере погружения просто уменьшать толщину слоя и самого персонажа под действием давления? Тогда можно даже сделать недостижимый центр планеты в соответствии с парадоксом Зенона.

Такой подход интересен для глобальной геологии в стиле Google Earth.

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

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

Вообще, сферические и другие неплоские игровые миры могут разнообразить геймплей в играх любого жанра, от аркад до RPG.

Если обобщить данную идею, то можно предложить несколько подходов к их конструированию.

1. Игровые миры в евклидовой геометрии (E², E³) - большинство выпускаемых игр.

a. Евклидова плоскость E² - как правило, представляется в виде квадратного (преимущество: более простая адресация) или реже шестиугольного (преимущество: большая изотропность) паркета.

b. Евклидово пространство E³ - как правило, представляется в виде кубических сот. Классические примеры - тот же Minecraft и другие игры с воксельной механикой (Voxelstein 3D, Teardown и др.). Но если нужна большая изотропность, можно рассмотреть альтернативные варианты, например, усечённые октаэдральные соты. К их преимуществам можно также отнести меньшее количество соседей у каждой ячейки (14, против 26 у кубических сот) и отсутствие рёберных и вершинных соседей.

2. Игровые миры в сферической геометрии (S², S³).

a. Сфера S² имеет конечную площадь, и все её однородные разбиения состоят из строго определённого количества сферических многоугольников строго определённого размера.

В связи с малым количеством ячеек сферического паркета, на практике применяется либо их усечение (truncation) - процедура, подобная той, что позволяет получить усечённый икосаэдр из простого; либо дробление (subdivision) на более мелкие ячейки, но уже неоднородной формы (как в статье); либо просто нерегулярные разбиения сферы - вот пример генерации такого разбиения.

Эти три приёма находят применение и в других неевклидовых геометриях.

b. Гиперсфера S³: единственная известная игра, один из уровней которой имеет такую геометрию, - это Hyperbolica. Но она не использует какие-либо разбиения гиперсферы на многогранники.

3. Игровые миры в гиперболической геометрии (H², H³).

a. Плоскость Лобачевского H² - имеет бесконечное число регулярных разбиений с любым числом вершин многоугольника и любым порядком, но для каждого такого разбиения длина стороны многоугольника фиксирована. Вот примеры таких разбиений:

На мозаике из чередующихся семи- и шестиугольников создана отличная игра - HyperRogue, также она поддерживает и другие гиперболические мозаики.

b. Пространство Лобачевского H³ имеет четыре регулярных разбиения на правильные многогранники (2 додекаэдральных, 1 кубическое и 1 икосаэдральное) с фиксированной длиной ребра.

Существуют два независимых прототипа Майнкрафт-подобных игр на основе кубических сот 5 порядка (5 кубов вокруг одного ребра, 20 кубов вокруг одной вершины) с подразделением их на неоднородные кубические ячейки: Hypermine (страница на Github) и Hyperblock (пока не имеет своей веб-страницы).

Также в этом пункте можно упомянуть игру Hyperbolica, действие большинства уровней которой происходит в пространстве H³, хотя её движок использует разбиение плоскости H², а не пространства H³.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации