Как стать автором
Обновить

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

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

А водная эрозия рельефа заложена в самом методе генерации.
Там, вроде бы, две зоны конвекции литосферы — та куда погружаются плиты, и та откуда они всплывают.
Да можно и без зон, если нужно только, чтобы было наблюдаемое движение материков.
Нужно чтобы генерировались длинные горные хребты = место столкновения материковых плит (и опционально «Марианские впадины» = там где океанические плиты расходятся). То есть то чего в данном алгоритме, как я понял, не хватает для большей реалистичности.
Иными словами, не хватает не столько самого движения материков в динамике, а сколько явно видимых результатов этого движения — в виде горных хребтов: как молодых и острых, так и старых и полуразрушенных.

"Марианские впадины" — это зоны субдукции, а где плиты расходятся — это рифты.

В алгоритме действительно этого не предусмотрено. Но горные хребты могут быть реализованы без реализации дрейфа континентальных плит. Смотрите, например, программу Mojoworld (http://mojoworld.info/). Там есть реализация хребтов построенных с использованием теории турбулентности. Я сам еще не разбирался с этим, но обещаю, что когда разберусь, то сделаю хребты на картах.
Совсем необязательно привлекать сложную физическую теорию явления, если визуальный результат будет тем же самым, применяя простую модель. Так же, например, чтобы построить рельеф не требуется привлекать теорию процессов горообразования и выветривания. Ведь и фракталы дают хорошее изображение рельефа: есть много примеров горных долин, построенных с помощью фракталов, которые практически неотличимы от реальных.
Мне показалось, что автор вопроса про дрейф имел в виду особенности рельефа, вызванные дрейфом и наползанием литосферных плит. Это должно порождать характерные островные гряды, корные цепи, протяженные скалистые стены, вулканы…
Думаю тут пришлось бы городить куда более сложную геологическую модель. Например можно добавить нулевым этапом формирование литосферных плит и их небольшое сдвигание, чтобы сформировать базу, на которую будет напыляться уже основной рельеф.
Интересно было бы подумать о применении для этого нейронной сети. Уж очень здорово они такого рода задачки с изображениями сейчас проделывают.

Я думаю, что сдвигать их не нужно. Достаточно обозначить направление их движения. А ещё нанести на карту рифты. Тогда по границам плит с учётом их относительного движения и характера (материковая/океаническая) можно заложить на первичной сетке высот характерные формы рельефа. Большего, мне кажется, не потребуется.

заложить на первичной сетке высот характерные формы рельефа
и является тут самым сложным. Можно было бы применить композицию шумовой функции которая делает хребты и функции с большей частотой (и меньшей амплитудой). Трудность в подборе первой; мне сейчас неизвестен ее вид. Про это можете здесь почитать Texturing and Modeling. Procedural Approach.
и является тут самым сложным.

А как вообще делаются горы?
Расположение хребтов и общее их направление я бы просто задал вдоль стыка плит и сообразно характеру их столкновения (там немного вариантов).

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

Примерно вот так:
шаг 0 — генерим случайный лунный ландшафт
шаг 0.5 — метеоритная бомбардировка с целью получить метеоритные кратеры
шаг 1 — разбиваем на плиты
шаг 2 — сдвигаем => появятся горные хребты, рифты и субдукции
шаг 3 — заполняем водой
шаг 4 — производим эрозию с целью разрушения горных хребтов => получаем старые горы
шаг 5 — снова двигаем => получаем молодые горы
Все это хорошо, но Вы постоянно пропускаете шаг где требуется формировать рельеф гор.
Почему пропустил?
шаг 2 — сдвигаем => появятся горные хребты, рифты и субдукции

шаг 4 — производим эрозию с целью разрушения горных хребтов => получаем старые горы
шаг 5 — снова двигаем => получаем молодые горы

А ещё на шаге 0.5 можно ударить каким-нибудь супер-метеоритом.

PS субдукции — это в том числе и вулканы.
Вот не хватает «Profit!!!» в конце.
Я сперва вообще подумал, что это сарказм такой тонкий, мол, нужно всего лишь взорвать пару сверхновых, наделать кремния, кислорода, железа, углерода, потом за счет гравитации свалять из этого шарики, выбрать подходящий… Нужно где-то остановиться, у нас нет аких мощностей.
Хорошая идея уже звучала. Планету разбиваем на плиты, плитам даем импульс и вычисляем напряжения на узлах стыков. Получим ломанные линии с векторами напряжений в вершинах. Вот эти данные должны как-то влиять на превалирующую компоненту фрактальной функции. Хз как.
Попробую в выходные написать. Начну с лунного ландшафта, с шага 0.
(то есть континенты попробую создать на следующей неделе)
В прошлый выходной я оказался занят. Так что в эти выходные всё же попробую поднять мой старый проект 2005 года (попробовал запустить — падает, перекомпилил — все равно падает, буду разбираться).
О, статья как раз в точку для меня: потихоньку делаю игру с генерацией карты на всей планете. Спасибо!

Когда вижу алгоритмы процедурной генерации — всегда возникает мысль обучить нейронную сетку на реальных данных, а затем загнать в неё входные данные процедурной генерации, чтобы выбрать набор параметров, лучше соответствующих данным. Применяя такие сетки к генерации планетарных карт, можно, как минимум, получить более естественно выглядящие карты, а как максимум — узнать какие-нибудь доселе неизвестные географические или геологические закономерности Земли. В этом направлении совсем не копал, это просто мои размышления. Уверен, что много где так и делается.
Этот проект у меня возник как раз при попытке сделать карту для стратегической игры. Было желание, чтобы карта планеты была сферической. Но это все оказалось совсем непросто и вылилось в отдельный проект. Сама же игра так и осталась нереализованной.
Немного не в тему но нет ли софта или базы алгоритмов для генерации звездных систем? Что-бы наглядно — выбрали размер звезды, потыкали химический состав, получили развертку с зоной обитаемости, светимостью и т.д., накидали орбиты с планетами и их подкорректировало под физически реальные что-бы вся система не развалилась, и все в таком роде.

Star Citizen сегодня — это наверное самые продвинутые ребята, которые продвинулись дальше всех в этой теме. Они там много всего рассказывают и показывают в своих видео.


Сейчас ещё совершенно случайно увидел на ютубе видеоролик о неком проекте Outerra. С их сайта даже технодемку скачать можно. Но тут, как я понял — больше не процедурная генерация планет, а процедурная генерация разного контента на поверхности планет, типа деревьев, травы, и так далее. Сама планета в демке — это наша Земля.

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

Гипсометрическая карта — тоже карта.

> Реальную карту полномаштабной планеты можно найти только на моем сайте
Dwarf Fortress — тоже умеет создание карты планеты, только в более «классическом» исполнении в виде квадрата, в остальном — высоты, температура, осадки, биомы, легкий налет тектоники, и если не ошибусь даже эрозия. Проблема в том что автор пишет игру весьма эзотерически и понять-вытащить алгоритмы проблематично.
Start Citizen? А Space Engine http://spaceengine.org/ не смотрели в плане именно процедурной генерации? Не только планет.
Я не знал о них вплоть до последнего времени, но знал о Mojoworld. В этих проектах все вертится вокруг текстур и способов их наблюдения. У меня с самого начала была другая цель — карта, которая охватывает полную большую планету и возможность манипулирования ею. Кстати, ландшафты можно генерировать и дать возможность наблюдать и в способе который используется мною для карт. Вот только пока что я не прилагал больших усилий в этом направлении, тем более текущее разрешение планет не может дать красивых картинок сравнимых с Mojoworld.

В качестве источника идей и способов я полагался на математическую литературу по фракталам.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории