Space Engine: виртуальная вселенная

Согласно Библии, у Яхве на сотворение вселенной ушло шесть дней, мы, люди, конечно, послабее будем, поэтому автор Space Engine (кстати, россиянин — Владимир Романюк) занимается творением вселенной уже одиннадцатый год.

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

Хотя Space Engine условно называется «игрой», по сути, игровой частью там можно счесть разве что пилотирование космических кораблей. Судя по отзывам в интернете, оно имеет своих поклонников, но я пока что его ни разу не попробовал — ведь есть Elite: Dangerous, где у означенного пилотирования, хотя и несколько меньше реалистичности, гораздо больше игрового смысла.

В данном же проекте меня привлекает основная часть: то самое, чем данная программа в основном и является — виртуальный планетарий.

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

Как интерактивное приложение к справочнику оно было весьма полезно, но всё-таки в 2019-м уже самое время совмещать информативность с красотой. Тем более что сам объект, которому посвящён справочник, — вселенная — содержит огромное количество красоты.

И в Space Engine такое наконец-то воплощено. Научные данные здесь тесно переплетены с красотой отображения. Причём эта красота не фэнтезийная, а весьма приближённая к реальности: иной скриншот из этой «игры» можно запросто перепутать с очередной фотографией с Хаббла, а не только с результатом игры воображения художника, специализирующегося на космосе.


 

Но давайте чуть-чуть подробнее о том, что именно представляет собой данный проект, и как именно он сделан.

Что в нём можно посмотреть?

Внезапно — вселенную.

Нет, не отдельные её места, не статичную карту звёздного неба, не какую-то фотографию фрагмента лунной поверхности — всю вселенную.

Тут есть, конечно, нюансы, но о них чуть позже, сначала же о том, как такое вообще возможно.

Не уверен, что все в курсе, однако наша галактика «Млечный Путь» по оценкам имеет от двухсот до четырёхсот миллиардов звёзд, от трети до двух третей которых имеют планетные системы.

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

Иными словами, общее количество звёзд в видимой вселенной должно быть порядка

300 ⋅ 109 × 2 ⋅ 1012 = 6 ⋅ 1023
 

600 000 000 000 000 000 000 000 звёзд и, как минимум, в пять раз больше планет. И ещё в десять раз больше — их спутников. И ещё наверно в сотню раз больше относительно крупных астероидов.

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

Каким образом тогда показать всё это и не схематично, а чуть ли не до каждого камешка на поверхности? Каким образом это всё уместить в памяти компьютера? Как такую программу вообще запустить у себя дома?

Естественно, при таком раскладе единственный выход — условно случайная генерация всего этого. Именно что «условно», поскольку реалистичное отображение явно должно отличаться от абсолютно случайного шума из разноцветных точек.

К счастью, ряд закономерностей человечеству уже известен и под них мы можем подобрать наборы так называемых «фрактальных» функций.

Само понятие «фрактал» — это тема для отдельной статьи, здесь же — для понимания сути — я ограничусь лишь коротким разъяснением.

«Фрактальная» функция — это такая функция, график которой не теряет детализации, когда мы к нему приближаемся.

Более привычные отучившемуся в школе функции — например, синус — имеют много деталей (например, волн — в случае с синусом), когда мы смотрим на них «издалека», однако если мы начнём разглядывать график вблизи, то мы заметим, что на более узком фрагменте волн уже меньше. Приблизившись ещё сильнее, мы дойдём до одной «волны» в кадре. Потом будет часть волны — плавная кривая без перегибов. А в какой-то момент всё это станет практически неотличимо от прямой (искривление всё ещё есть, но глазом его уже не различить).

У фрактальной же функции, какой бы мелкий фрагмент мы не взяли, мы будем наблюдать заметно отличающуюся от прямой структуру. Грубо говоря, «фрактальный синус» показывал бы нам на графике много волн, какой бы узкий его фрагмент мы бы ни рассматривали.

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


 

Благодаря этому у нас и появляется возможность изобразить вселенную с процедурно сгенерированными, но реалистично выглядящими деталями.

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

Далее термином «функция» будет условно называться некий комплект: набор более простых функций и правил, параметры статистического распределения и стартовая точка генератора псевдослучайных чисел, которая нужна для того, чтобы каждый раз генерировалась одна и та же структура, а не каждый раз разная.

Итак, некоторой «функцией» мы генерируем расположение галактик во вселенной — близкое по структуре к наблюдаемому. Другой функцией генерируем форму (как бы «фотографию») каждой галактики.


 

Внутри этой «фотографии» ещё одной функцией генерируем расположение звёзд.

Ещё одной функцией генерируем типы звёзд — в том числе, звёздные скопления и системы из нескольких звёзд, учитывая то, насколько вероятно появление звёзд того или иного типа в этой части данной галактики.

В каждой звёздной системе ещё одной функцией генерируем орбиты планет. Ещё одной — типы планет. Опять же, с учётом того, какие тут звёзды, и насколько далеко от них данная планета.

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


 

С учётом всего этого ещё одним набором функций мы генерируем для каждой планеты карту высот и цвет поверхности в каждой точке.


 

К карте высот мы отдельно можем добавить — тоже при помощи функций — дополнительные модификаторы: реки (если таковые подразумеваются параметрами планеты), вулканы, трещины и кратеры от гипотетических столкновений с другими объектами, горные цепи от «движения тектонических плит» и, возможно, ещё что-то.


 

Над поверхностью мы генерируем несколько слоёв облаков — с учётом плотности и состава атмосферы, температуры и карты ветров.


 

Всё это генерируется фрактальными функциями, поэтому при приближении оно не должно «расплываться», подобно увеличиваемой сверх своего разрешения фотографии, а, напротив, показывать нам всё новые и новые детали.

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


 

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

Но зато, в дополнение ко всему перечисленному, здесь уже моделируется ряд физических процессов: короны у звёзд…

…джеты, гравитационное линзирование и аккреционные диски чёрных дыр и нейтронных звёзд…


 

 

…испарения с объектов, проходящих вблизи звезды (в частности, хвосты комет) …


 

…полярные сияния на планетах, имеющих электромагнитное поле, и эффекты атмосферы…


 

…и, наконец, то, что, наряду с мелкими деталями — песком и камешками, — появилось в последней на данной момент версии программы: трёхмерные туманности.


 

 

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

Эта задача решается при помощи совмещения генерируемого с реальным. Так, например, если в каталоги вписаны некие галактики, звёздные скопления, звёзды и планеты с их параметрами, то оное можно взять из каталогов. Если поверхности планет уже сфотографированы, и построены карты высот, то можно не генерировать эти планеты, а взять фотографии их поверхностей и построить их ландшафты по картам высот. Если есть фотографии галактик и туманностей, то вид и структуры этих галактик можно восстановить по фотографиям.

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

Действительно, очень многие объекты солнечной системы уже были сфотографированы — в том числе, вблизи. Параметры многих звёзд уже хорошо известны. Открыт целый ряд экзопланет — планет, вне солнечной системы (правда, сфотографировать их на данный момент невозможно — только узнать, что они там есть, и оценить некоторые из их параметров). Именно вот это и показывается в Space Engine.


 

Поскольку же всё это не просто прибито гвоздями к небосводу, но моделируется в движении, можно ещё и посмотреть на довольно правдоподобные прогнозы того, что куда улетит через какое-то время (правда, тут надо отдавать себе отчёт, что все наши научные модели космоса — приблизительные, поскольку всех параметров каждого объекта мы не знаем, а потому, чем на более длинный срок делается прогноз, тем более он приблизителен).

Ну или же просто посмотреть, где в данный момент времени находится каждый объект и посмотреть на это в виртуальный телескоп.


 

 

Правда, увы, относительное движение звёзд пока не реализовано, поэтому на то, как за тысячелетие меняется расположение звёзд на небе, посмотреть пока нельзя.

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

Можно посмотреть на довольно хорошие модели различных объектов космоса.

Или же, как привычные для нас созвездия выглядят из другой звёздной системы.

Или, наконец, просто на красивые и одновременно с тем правдоподобные картинки космоса — в том числе, с поверхности других планет.

Программа последней версии, кстати, доступна в Steam, а предпоследнюю версию можно бесплатно скачать с сайта разработчика.


 

 

 

 

 

 

 

 

 
Лекс Кравецкий :