Что такое space engine
Иногда возникает желание улететь. Оторваться от мирских забот и бороздить просторы далёкого и бескрайнего космоса. Исследовать, наблюдать, созерцать, общим словом, релаксировать.
Я лично таких игр знаю не особо много. Конечно, можно отметить No man sky, но, «гриндительство» не играет на руку, да и копаться во внутренностях игры с помощью модов и прочей ерунды далеко не каждому будет приятно.
Несколько дней к ряду я искал то, не знаю что. И, всё-таки наткнулся) Это был Space Engine.
Генерация) Как не удивительно. Планетарий генерирует восхитительные пейзажи и планеты. Их даже можно редактировать (правда я с этим не баловался ещё).
Я пожалуй просто прикреплю парочку своих собственных скриншотов)
Солнечная система покрыта текстурами с космических снимков, поэтому особого интереса не представляет (хотя есть, хех, DLC на 10 гигов с хорошими снимками 🙂 ). А вот вне нашей системы начинается веселье.
В группе есть очень большое количество скриншотов, которые хоть с лёту ставь на рабочий стол.
Мне проект очень пришёлся по душе. Возможно, он понравится и вам)
Разработчик с Санкт-Петербурга, Владимир Романюк. Работает вместе иностранными друзьями)
Проект в открытом доступе на оф. сайте. Также планируется релиз в Steam. Текущая версия 0.9.8.0.
Исследовать, наблюдать, созерцать
Я правильно понял, что программа создаёт космические объекты, но делать в ней ничего нельзя?
Просто в статье несколько раз упоминалось слово «игра», но из описания я не понял как в неё играть. Или там всё же есть какой-то конструктор или какой-то тип взаимодействия?
Комментарий удален по просьбе пользователя
Это планетарий, скорее.
Но там есть космические корабли, которыми можно управлять.
Можно летать на шаттлах, но я с ними не разбирался. Помимо них и редактора взаимодействия нет. Особо не «поиграешь»)
Space Engine прикольная вещь, 2 года назад просидел в нем несколько часов пока делал скриншоты.
Доплеровское смещение забыл.
Ну ты себе представляешь этот объект вообще? Линзированный свет, огибающий такое массивное тело, на таком масштабе, будет ускоряться при приближении к нам и замедляться при удалении. С заметным изменением в спектре. Поэтому эта картинка должна быть двуцветная, сине-красная, как полицейский проблесковый маячок, с лёгким соединяющим это градиентом посредине.
Комментарий удален по просьбе пользователя
Всё же стоило хоть чуть-чуть самому поиграться в редактором или накидать скринов из реддита, а то больше похоже на «есть вот такая песочница, я её запускал и вот пара скринов» :/
Так же не лишним было бы упомянуть о долгостройном апдейте 0990, в котором добавят объёмные туманности https://youtu.be/Q8V1hZ6Q_X8?t=1227 и что Владимир недавно наконец-то отписался о текущей работе http://spaceengine.org/blog190217/
Только я лично не знаю как всё же относиться к этому проекту. Сроки/планы многократно срывались и отодвигались. Что само по себе нормально и происходит со всеми, но пару-тройку лет назад на сайте SE был объявлен сбор средств на развитие проекта и что-то там удалось набрать, но в итоге свадьба да и потом Владимир начал разработку коммерческого планетария для какой-то студии и за это время не сильно вникал в SE. Теперь, вот-вот мы должны увидеть SE на Стиме, но когда именно и в какую стоимость? Плюс, в последнем апдейте упоминается коммерческая лицензия (для использования в своих проектах экспортированных из SE карт планет/туманностей/космоса), но как-то я не смог въехать будет ли всё же платной «базовая» версия или опять же платить за всё подряд.
А так планетарий классный, надо только набраться терпения.
Что такое space engine
pak-файлы
Pak-файлы – это zip-архивы, использующиеся для лучшей организации и распространения игрового контента. Например, большой аддон с тысячами файлов может быть заархивирован в один pak-файл и распространяться в таком виде – это удобно для пользователя. Также, при создании pak-файла может использоваться сжатие, что полезно для экономии дискового пространства и трафика.
Pak-файлы включают в себя файлы и папки с той же структурой, как на диске, начиная с корневого уровня data и addons (или addons/YourCustomFolder/ ). Это значит, что самая верхняя папка, которая может быть заархивирована в pak-файл – это одна из стандартных папок: catalogs, models, textures и т.д. SpaceEngine считывает содержимое всех pak-файлов при запуске и использует их для организации виртуальной файловой системы с приоритетом даты модификации.
1) Формат pak-файла
2) Виртуальный путь
Можно представлять pak-файл как контейнер для файлов/папок. Внутренняя структура папок внутри pak-файла является продолжением структуры папок SE, они “прозрачны” для SE. Это значит, что pak-файл выглядят для SE так, как если бы всё его содержимое было извлечено на диск в том месте, где этот pak-файл находится. Мы будем называть это виртуальный путь. Далее в этой статье будет применяться следующая цветовая маркировка: пути к файлам и папкам на диске (не запакованным) окрашены в зелёный цвет, а пути внутри pak-файла – в оранжевый цвет. Например, эти три виртуальные пути равнозначны (помните, что папка StarWars необязательна):
addons/StarWars/ StarWarsPlanets.pak/catalogs/planets/Coruscant.sc (упакованный в pak-файл)
addons/StarWars/catalogs/planets/Coruscant.sc (распакованный на диск)
addons/catalogs/planets/Coruscant.sc (распакованный на диск, без опциональной папки StarWars )
3) Приоритет по дате изменения
4) Извлечение файлов
5) Создание pak-файлов
6) Ограничения
7) Степень сжатия
8) Никогда не изменяйте стандартные pak-файлы
Так же, как и во всех других играх, изменение стандартных ресурсов игры – плохая идея. В будущем, клиент игры будет проверять свои стандартные файлы на предмет изменения, и выгонять вас с сервера, если таковое будет обнаружено. Так что запомните простые правила:
1) Если вы хотите что-то добавить, создайте свой собственный pak-файл (или просто храните файлы в папках, не упаковывая их).
2) Если вы хотите изменить что-то, извлеките файл из стандартного pak-файла, и изменяйте извлечённый файл.
Скрипты SpaceEngine
Composition // values in percent
<
Греческие буквы в имени объекта вводятся в виде аббревиатур: ALF, BET и т.д. Полный список аббревиатур:
ALF | α | (aльфа) |
BET | β | (бета) |
GAM | γ | (гамма) |
DEL | δ | (дельта) |
EPS | ε | (эпсилон) |
ZET | ζ | (дзета) |
ETA | η | (эта) |
TET | θ | (тета) |
IOT | ι | (йота) |
KAP | κ | (каппа) |
LAM | λ | (лямбда) |
MU | μ | (мю) |
NU | ν | (ню) |
KSI | ξ | (кси) |
OMI | ο | (омикрон) |
PI | π | (пи) |
RHO | ρ | (ро) |
SIG | σ | (сигма) |
TAU | τ | (тау) |
UPS | υ | (ипсилон) |
PHI | φ | (фи) |
CHI | χ | (хи) |
PSI | ψ | (пси) |
OME | ω | (омега) |
Параметр – это строка с именем параметра (ключевое слово) слева и значением параметра справа. Имя и значение должны быть разделены пробелами или через табуляциями. Допускается только один параметр в каждой строке скрипта. Параметры могут быть следующих типов:
текстовая строка: Class “GasGiant”
число: Mass 95.162
вектор: Color ( 1.000 1.000 0.850 ) или Color ( 1.000, 1.000, 0.850 )
число в формате ‘град мин сек’ или ‘час мин сек’: Dec 18 32 16.23
логический тип: NoClouds true или NoClouds 1
Поддерживаются комментарии в формате языка C/C++:
// однострочный комментарий
/* инлайн-комментарий */
Первый – это однострочный комментарий. Весь текст после символов // до конца строки считается комментарием и игнорируется. Второй – это инлайн или многострочный комментарий. Весь текст между символами /* и */ считается комментарием и игнорируется. Переводы строки также допускаются в этом типе комментария:
/* это пример
многострочного
комментария */
Каталоги астрономических объектов
Формат csv для каталогов предназначен для создания больших каталогов с однообразными данными. Он более компактный и загружается быстрее, чем sc, но допускает ограниченное количество типов данных, которые могут быть указаны в нем. Это просто таблица со значениями, разделёнными запятыми. Формат sc предназначен для описания объектов с любыми возможными типами данных, которые только могут быть использованы в SpaceEngine. Это текстовый скрипт, использующий “теги” для описания объекта (галактики, звезды, планеты и т.д.) и различных его параметров.
Добавление, обновление и удаление объектов
Если вы опишете какой-то новый объект, используя sc-файл SpaceEngine, он будет добавлен в игру. Под “новым объектом” подразумевается объект, который не существовал ранее в SE (не был описан ни в одном из каталогов). Точнее, объект того же типа (например, звезда) и с тем же именем не существовал ранее в SE. Если объект того же типа и с таким же именем уже существует в SE, произойдёт его обновление или объединение с данными, которые вы предоставили в вашем новом скрипте. Порядок обновления (какие именно данные имеют приоритет) определяется датой изменения sc-файла или pak-файл, в который этот sc-файл запакован. Более новый файл имеет больший приоритет, поэтому некоторые данные из скрипта объекта в предыдущем файле будут заменены новыми данным. Если какие-то данные отсутствуют в предыдущем скрипте (например, масса планеты), но есть в новом, будут использоваться данные из нового скрипта.
Планетарные объекты (планеты, луны, астероиды, кометы и звёзды в кратных звёздных системах) идентифицируются немного сложнее. SpaceEngine позволяет задавать множество планетарных объектов с одним и тем же именем, но с различающимся родительским объектом (указанным в параметре ParentBody ). Например, Солнечная система имеет два объекта с именем “Pandora”: спутник Сатурна и астероид. Они имеют разные родительские объекты – соответственно Сатурн и Солнце, так что это – разные объекты в SE.
Можно отменить некоторые данные из предыдущего скрипта. Например, параметр NoClouds true отменяет теги Clouds < >в старых скриптах. Наоборот, теги Clouds < >в новом скрипте отменяет NoClouds true в старом.
Каталог планет */catalogs/planets/*.sc : Star, Planet, Moon, DwarfPlanet, DwarfMoon, Asteroid, Comet, Barycenter
Каталог звёзд */catalogs/stars/*.sc : Star, StarBarycenter
Каталог галактик */catalogs/galaxies/*.sc : Galaxy, Quasar
Каталог звёздных скоплений */catalogs/clusters/*.sc : Cluster
Каталог туманностей */catalogs/nebuale/*.sc : Nebula
Удаление старых объектов может быть использовано для обновления стандартных каталогов SE. Например, звёздные каталоги всё ещё содержат много двойных звёзд, описанных как две одиночные звезды. Можно использовать параметр Remove в каталоге звёзд, чтобы удалить их, и в нём же описать барицентр системы. Затем в каталоге планет описать две звезды-компонента двойной, с соответствующими орбитами, и тем барицентром в качестве родителя. Подробнее см. Создание звёзд.
Примечание: параметр Remove действует на все файлы каталогов, независимо от их даты модификации. Так что применив его один раз, вы не сможете более создать объект того же типа с тем же именем. Это баг в текущей версии (0.9.8.0).
Проверка каталогов на ошибки
0 – ничего не писать в лог
1 – писать ошибки и предупреждения, используя меньший из уровней в main-user.cfg и в sc-файле, если он определён там
2 – писать всё, используя меньший из уровней в main-user.cfg и в sc-файле, если он определён там
3 – писать ошибки и предупреждения, игнорируя уровень в sc-файле
4 – писать всё, игнорируя уровень в sc-файле
Последние два используются, чтобы переопределить настройки уровня протоколирования во всех sc-файлах (так что они не могут быть использованы в параметре CsvLogLevel ). Они предназначены для глобального поиска ошибок во всех каталогах.
0 – ничего не писать в лог
1 – писать ошибки и предупреждения
2 – писать всё
Мини-обзор Space Engine — Космическое путешествие.
Большинство привыкло считать Ведьмака или Horizon: Zero Dawn красивыми играми, кто-то опровергнет это показав им Forza Horizon 4 или Skyrim с сотней модов, но геймплей названных проектов не предусматривает то, что игрок будет часами рассматривать пейзаж, вид на который открывается с вершины горы, или невероятно долго выискивать ракурс для идеального скриншота, а, может, будет их делать тысячами. Не отрицаю, что в том же Ведьмаке даже на стартовой локации мне удалось сделать под сотню скриншотов, ну или достаточно вспомнить RDR 2…
Правда, мало, кто задумывается, что изначально окружающий мир в этих играх не только приземлен, хоть и фантастически красив, но и является лишь оберткой для игрового процесса…
Доброго времени суток, всем, кто случайно наткнулся на эту статью, и сегодня я представляю вам обзор проекта Space Engine, который изменит все ваше представление о красоте окружающего мира в играх.
Начать хотелось бы с упоминания того, что об этом проекте я узнал совершенно случайно и буквально пару дней назад, причем сразу же купил, что является нонсенсом, а запустив, понял, что обязан сделать обзор.
Что же такое Space Engine? Если верить описанию в Steam, это научно достоверный и фотореалистичный трехмерный космический симулятор, моделирующий всю Вселенную. Моделирование происходит лишь на основе данных, полученных человечеством за столь краткий период изучения космоса. Несомненно, в реальности большинство объектов, представленных в Space Engine, отличается от компьютерного макета, правда, если уж задумываться над этим, наши знания и так невероятно ничтожны, а данный проект, возможно, их хоть как-то расширяет.
Но в чем же суть игрового процесса в подобной…игре, спросите вы. В путешествиях, отвечу я.
Вы будете путешествовать по вселенной, путешествовать по далеким галактиками и туманностям, путешествовать по поверхности сгенерированных и настоящих планетоидов, вы даже сможете посетить запечатленную лишь недавно черную дыру.
Опять же, если верить Steam и официальному сайту разработчиков, в Space Engine можно создавать самолеты и космические корабли для путешествий, но, к сожалению, пока я лишь освоил режим свободной камеры. Серьезно, игра настолько технологически наворочена, что для изучения всех возможностей потребуется не один десяток часов. Вы только посмотрите на информационный интерфейс при все том же режиме свободной камеры, а потом взгляните на настройки управления. Лично я, лишь интуитивно, спустя час понял, как отключить информационный блок.
Замечу, что вот такой высокий порог вхождения в 100% случаев губительно воздействует на восприятие потребителем проекта любого уровня. И Space Engine является настоящим исключением из этого правила. Ведь именно этот громоздкий, первоначально непонятный, интерфейс, позволяет пользователю, изучая его, осознать, что ему нужно от проекта.
Space Engine можно использовать для изучения астрономии, потому что при подлете к любому объекту вам показывается его масса, скорость, удаленность от ближайшей звезды, наличие и процентное содержание кислорода в атмосфере, если такая есть и еще множество других параметров, встроенный Wiki-помощник дает возможность просто узнать что-то новое о звезде или планете, потому что в пару кликов у тебя выводятся известные факты об объекте, вы можете изучать созвездия, включив функцию их дорисовки.
В конце концов, можно просто наслаждаться путешествием по космосу, делая шикарные снимки или перескакивая на другой конец галактики, сменив скорость полета колесиком мыши.
И вот так плавно я дошел до главной особенности Space Engine – космоса. Как же фантастически он выполнен! Учитывайте сразу, что разработкой занималась отечественная команда всего из нескольких человек, а до раннего доступа она шла целых девять лет. Несмотря на это, даже сейчас все в проекте выглядит невероятно красочно. Многие, случайно встречаемые вами, планетоиды имеют высокую детализацию, между прочим, вы можете приземлиться на них и пройтись.
Окружающий вас космос сам по себе выглядит фантастически, а какое количество прекрасных объектов тут можно увидеть… Кроме того, пользователи могут делиться координатами найденных мест, и поверьте на слово, те места, если их можно так назвать, просто невозможно описать словами. Самое интересно, что вся эта красота спокойно отрисовывается на относительно среднем железе.
А еще здесь необыкновенный космический саундтрек, который ты сам включаешь в специальном музыкальном плеере. Да и в пару кликов можно добавить свои композиции, вот так и получилось, что почти полчаса я летал под заглавную тему «Интерстеллара» от Ханца Циммера, и, опять же, это невозможно передать словами…
60 лет назад люди наблюдали на своих черно-белых экранах высадку человека на Луну, тогда все мечтали, глядя на небо, о том, чтобы хоть когда-нибудь посмотреть на Луну вблизи, и 60 лет спустя у меня на жестком диске установлена игра, хотя, это даже сложно назвать игрой, которая позволяет ступить, хоть и на виртуальную, но на поверхность, практически, любой планеты, пролететь сотни галактик на скорости в 326 миллионов км/с или размеренно облететь скопление звезд или же нашу родную Землю.
Я прекрасно понимаю, что этот обзор выглядит, как скомканное субъективное мнение, да и надо выставить какую-то оценку. И получается так, что если я поставлю оценку ниже максимальной («Изумительно»), то обману сам себя, с другой стороны, любители динамического экшена могут вдруг заявить, что Space Engine – это очередной No Man’s Sky, кстати, возможно именно такой должна была быть игра, но что-то пошло не так.
Эх, в любом случае, мне придется сделать какой-то выбор…
Не зря я указал на то, что Space Engine – это проект, который сложно назвать «игрой», но именно такой проект, можно назвать «произведением искусства».
А, как мы знаем, произведения искусства не обязаны нравится всем, но от этого они не перестают быть шедеврами.
P.S. Извините, что не скрыл кадры, но они, правда, невероятны, и я хотел показать их всем.
Игра в раннем доступе
Приобретите игру и начните играть — примите участие в ее развитии
Примечание: Данная игра в раннем доступе находится на стадии разработки. Она может измениться в будущем, а может остаться в текущем состоянии, так что, если вам не по вкусу то, что игра может предложить сейчас, рекомендуем дождаться её дальнейшего развития. Узнать больше
Почему ранний доступ?
Отзывы, полученные от игроков, помогут нам искать ошибки и проблемы, а также продолжать улучшать производительность и расширять возможности. Широкий спектр аппаратных конфигураций, которые имеют игроки, поможет убедиться, что движок работает правильно у всех. Отзывы также будут чрезвычайно полезны для разработки будущих игровых функций и улучшения общего пользовательского опыта.”
Сколько примерно эта игра будет в раннем доступе?
Чем планируемая полная версия будет отличаться от версии в раннем доступе?
Каково текущее состояние версии в раннем доступе?
“SpaceEngine состоит из двух частей: Планетарий и Симулятор космического полета. Планетарий уже полностью функционален и описан в разделе «Об этой игре».
Симулятор полёта находится в разработке. В настоящее время он позволяет летать на космических кораблях с ньютоновской физикой, включая базовую аэродинамическую модель для полета в атмосфере. У некоторых кораблей есть варп-двигатели для перемещения быстрее света. Пользователи могут импортировать свои модели кораблей (хорошо для создания модов). Симулятор будет доработан с целью создать полную и реалистичную механику полёта, все необходимые функции автопилота, и игровой процесс.”
Изменится ли цена игры после выхода из раннего доступа?
Как вы планируете вовлекать сообщество в разработку игры?
“Отзывы, полученные от игроков, помогут нам искать ошибки и проблемы, а также продолжать улучшать производительность и расширять возможности. Ваши отзывы также будут чрезвычайно полезны для разработки будущих игровых функций и улучшения общего пользовательского опыта.
Кроме того, SpaceEngine имеет широкий спектр возможностей для создания модов. Вы можете найти и установить моды в Мастерской, а также предложить свои собственные идеи модов на форуме. Хорошие моды могут быть встроены в игру, а их авторы вознаграждены.
Отзывы сообщества полезны для направления процесса разработки. Присоединяйтесь к сообществу SpaceEngine на официальном форуме, в группе Steam, или на нашем Discord сервере.”
Купить SpaceEngine
СПЕЦИАЛЬНОЕ ПРЕДЛОЖЕНИЕ! Заканчивается 5 января
Контент для этой игры Просмотреть все (12)
Сообщайте об ошибках и оставляйте отзывы в обсуждениях этой игры
Об этой игре
Возможности планетария SpaceEngine:
Space Engine — Вселенная на ладони
My God, it’s full of stars!
Кто из нас в детстве не мечтал «бороздить просторы вселенной», как капитан Пикард, прогуливаться по неизведанным планетам далёких миров, встречать рассветы двойных или тройных звёзд, погружаться в атмосферы газовых гигантов, ронять корабли в чёрные дыры? И я тоже не исключение. Конечно, частично эту мечту воплощали книги, фильмы и «Элит»-ные игры. Но вся романтика в них разрушалась банальными купи-продай и «пиу-пиу» в «жидком» космосе на скоростях самолётов времён первой мировой войны. Да и тем немногим виртуальным миркам не хватало свободы, детальности и масштабов реальной вселенной.
В начале тысячелетия я познакомился с MojoWorld и был шокирован его возможностями. Наконец-то, можно было бродить по другим планетам и фотографировать местные достопримечательности. Он стал первой ласточкой, дававшей надежду на то, что полномасштабные космические миры технически возможны. Но, к сожалению, производительности железа десятилетней давности было не достаточно для передачи всех красот в реальном времени. Да и планеты оставались всего лишь мёртвыми пейзажами.
Но вот, чуть больше года назад, я совершенно случайно наткнулся на вселенную Space Engine, и она просто взорвала мне мозг и размазала его по полу своим масштабом и невероятной детализацией.
Как всё это выглядит?
Первое, что бросается в глаза – это реальные размеры нашей вселенной. Что такое сотни миллиардов галактик и сотни миллиардов звёзд в каждой из них? – всего лишь сухие цифры в учебнике астрономии. Но здесь, всё это ощущается на собственной шкуре. И начинаешь понимать, насколько же наше человечество со всеми своими мелочными проблемами и мышиными войнами ничтожно по сравнению с величаем и непостижимостью Вселенной. Нет, мы не песчинки, и даже не пылинки, мы вообще ничто. И никто даже не заметит, если наше солнце вдруг завтра погаснет и очередная цивилизация канет в лету, так и не оставив после себя никакого наследия.
Кроме этого удивляет абсолютная свобода перемещения. Можно лететь куда угодно с бесшовными переходами между поверхностью планет, орбитой, звёздами и галактиками.
Да, это не скринсейвер «сквозь вселенную», тут каждую пролетающую звезду можно посетить, побродить по её планетам, их спутникам и астероидам.
Конечно, в Space Engine, как и в любом другом уважающем себя планетарии (например, недавно упомянутой Celestia), есть и отображение орбит космических тел и подробной информации по ним, и управление временем, и различные затмения (в том числе от планетарных колец), и возможность рендерить в проекции «рыбий глаз» для проекторов планетария. Но, самое главное то, что он не ограничен каталогами звёзд HIPPARCOS и галактик NGC/IC (которые тоже есть), а генерирует вообще всю обозримую вселенную со всеми типами объектов, что в ней можно встретить. Но при этом основывается исключительно на научных данных и актуальных теориях и моделях, что позволяет использовать Space Engine как полноценное (и безумно красивое) пособие по астрономии.
Тут можно своими глазами увидеть космического pac-man-а. Хотя на самом деле, это чёрная дыра с гравитационной линзой на фоне голубого сверхгиганта:
Встретить восход двойной звезды (встречаются даже восьмикратные звёзды):
Посетить соседние и не очень галактики, туманности, звёздные скопления. Узнать, как выглядят красные гиганты, нейтронные звёзды, и многое другое. Не буду сильно спойлерить, просто оставлю несколько картинок.
Кстати, как вы думаете, как будет выглядеть планета, которая всегда обращена одной из своих сторон к звезде? Знакомьтесь, приливно-синхронизированная (оказывается это так называется) пустыня. С одной стороны ночь и вечная мерзлота, с другой – выжженная звездой поверхность и огромный супер-циклон, который никогда не останавливается.
Так же как и в Celestia, к Space Engine можно скачать официальные дополнения с текстурами планет солнечной системы и некоторых их спутников в высоком разрешении. Так, например, базовая комплектация «весит» 500 МБ, а полный размер всех дополнений примерно 10 ГБ.
Чего еще не хватает?
К сожалению, еще много чего. Космос куда более разнообразен и удивителен, чем всё, что уже реализовано в Space Engine, но с каждой версией автор со всей тщательностью переносит в свою вселенную частичку настоящей. Например, на картинке с чёрной дырой и голубым гигантом для полного счастья не хватает аккреационного диска и джетов, которые пока в планах. Также пока в планах хвосты комет, квазары, отдельные камни в планетарных кольцах и десятки других деталей, которые сделают вселенную еще более полной, точной и красивой. Так что работы еще очень много.
Что ещё можно будет делать?
На данный момент программа представляет собой бесплатный интерактивный планетарий с зачатками космического симулятора (то есть летать на шаттле над поверхностями планет и ронять корабли в чёрные дыры можно уже сейчас).
В дальнейшем на основе этого же движка планируется разработка MMO игры с упором на исследование космоса, поиски артефактов, строительством и развитием колоний и баз на планетах, астероидах или орбитах газовых гигантов. Никаких телепортаций, «жидкого» космоса и голливудских «пиу-пиу». Да и что делить в такой огромной вселенной?
Для того чтобы летать между планетами и звёздами, придётся вспомнить хотя бы основы астрономии, траектории небесных тел, что такое первая, вторая, третья космические скорости, характеристическая скорость, удельный импульс и прочие атрибуты реальных космических путешествий. Также придётся следить за расходом топлива и реактивной массы (да это потенциально разные вещи), чтобы не остаться «внезапно» в открытом космосе без возможности вернуться в обитаемые системы. Планируется и конструктор кораблей, как в Kerbal Space Program, с расчётами основных динамических характеристик, а также прочности и устойчивости конструкции. Единственное «фантастическое» допущение – гипер-привод, обеспечивающий сверхсветовые перелёты. Без него ММО будет невозможно.
Как всё это возможно?
Вселенная Space Engine создаётся практически одним человеком, нашим соотечественником из Питера, Владимиром Романюком (SpaceEngineer). Он по образованию и профессии – астроном, так что в научной достоверности всех моделируемых объектов и процессов можно быть уверенным. Сообщество, сложившееся вокруг его программы, помогает поддерживать каталоги галактик, звёзд и экзопланет в актуальном состоянии, так как их открывают чуть ли ни каждый день. Также поклонники создают модели кораблей, шаттлов и прочие мелочи для наполнения вселенной.
Создатель не делает секретов из технической составляющей своего мира и делится своими находками с форумчанами. Перечислю некоторые основные моменты и проблемы, которые необходимо было решить для реализации движка.
Координаты
Одной из проблем было представление координат объектов в пределах вселенной. Кто плотно работал с числами с плавающей запятой, знает, как быстро они теряют точность с расстоянием от нуля. А точность в несколько килопарсек на краю вселенной – совсем не дело. Поэтому, для хранения координат используются 64-битные числа с фиксированной запятой, и иерархическое представление объектов. То есть координаты галактик описываются абсолютно, звёзд – относительно центра галактики, а планеты — относительно звезды. Конечно, при рендеринге приходится всё переводить в числа с плавающей запятой, но преобразование в координаты относительно камеры рассчитывается в целых числах. Да и сам рендеринг происходит слоями, так как никакой точности z-буфера не хватит для учёта размеров вселенной.
Звёзды и галактики
Вторая проблема – генерация звёзд и галактик. Звёзд в галактике сотни миллиардов, а значит для того чтобы их все отобразить, потребуется сгенерировать и отрендерить терабайты данных. Конечно, для реального времени это не подходит. Казалось бы, ну ладно, ограничим расстоянием до камеры и будем генерировать и рендерить звёзды только в небольшом объёме. Но тут возникает еще две проблемы. Во-первых, алгоритм должен быть детерминированным, то есть, несмотря на то, что звёзды создаются случайно, они должны появляться всегда на одном и том же месте. Иначе будет странно, если мы улетим от звезды, а потом на её месте будет пустота. Во-вторых, звёзды имеют разную яркость и видны на разных расстояниях. Тусклые коричневые карлики быстро пропадают из виду, а яркие голубые гиганты видны почти через всю галактику. Для решения обеих проблем используется октодерево (octree), узлы которого хранят сид для генерации нижележащих уровней, а так же предельную яркость звёзд в данной ячейке. При этом более яркие звёзды генерируются на более высоких уровнях иерархии, так как их значительно меньше, чем менее ярких. Таким образом, генерация звёзд становится абсолютно детерминированной и зависит лишь от сида корня дерева и текстуры распределения звёзд в галактике. А так же позволяет достаточно быстро генерировать звёзды с указанной предельной видимой яркостью (которая зависит от расстояния и абсолютной яркости) на любом расстоянии от камеры.
Технология рендеринга галактик и туманностей аналогична рендерингу объёмных облаков. То есть это набор спрайтов, которые для ускорения пререндерятся в импостеры или sky box, в зависимости от того, где мы находимся: внутри или снаружи.
Планеты
Принцип моделирования похож на MojoWorld. Его идеи подхватили многие проекты с процедурными планетами, например Outerra и Infinity. Как это работает? Берём обычный кубик, разбиваем каждую его грань на несколько сегментов, а затем сферизуем, то есть, как бы надуваем изнутри. Получается шар с топологией куба. Это позволяет использовать квадратные текстуры с максимальной эффективностью и минимальными искажениями.
Но равномерно разбить кубик на сегменты не достаточно. Так как планета большая и сгенерировать её с максимальной детализацией для полётов над поверхностью будет не возможно (потребуются опять же терабайты данных). На помощь приходят ЛОДы. Реализованы они следующим образом. Каждая грань куба — корень квадродерева (quad tree). Каждый узел дерева — квадрат с фиксированным разрешением сетки и текстуры. При необходимости (при приближении камеры), узел делится на четыре, тем самым увеличивая детализацию в два раза. И так до тех пор, пока в данной точке не будет достигнута требуемая детализация.
Карта высот и текстура для каждого узла дерева создаются полностью на GPU с использованием пиксельных шейдеров 3-й версии (поэтому запустить SE на видеокартах, которые их не поддерживают, не получится). Алгоритмы генерации замечательно описаны в книге от создателей MojoWorld — «Texturing and Modeling: A Procedural Approach». То есть это знакомые большинству шумы Перлина и Ворлея, а так же их вариации и различные способы фрактализации. Отдельным алгоритмом создаются крупные циклоны для приливно-синхронизованных планет.
Но, чисто процедурные ландшафты обычно выглядят слишком искусственно. Дело в том, что на планетах с атмосферой они подвергаются значительной эрозии, которая существенно меняет очертания гор и долин. К сожалению, классические итеративные алгоритмы эрозии довольно сложно масштабируются между ЛОДами, и на данный момент еще не реализованы. Но есть более простой (позиционный) способ имитации этого явления. Это особые виды шума, подробно описанные в статье. Если кратко, то для генерации ландшафта используется не только шум Перлина, но и его производная, которая позволяет построить градиент в каждой точке ландшафта и имитировать вымывание или, наоборот, наплывы грунта сдвигом координат базового шума по этому градиенту. Такой подход уже позволяет создавать довольно симпатичные планеты.
Для моделирования атмосферы используется метод Eric Bruneton-а, который был адаптирован для других планет с разным давлением и составом.
Вместо заключения
Уже сейчас Space Engine утыкает за пояс большинство планетариев и реалистичных космических симуляторов (Celestia, Stellarium, Orbiter) по богатству и красоте космоса. И это только начало пути. Если хотя бы половина из того, что планируется, будет реализовано, Space Engine станет самой полной моделью нашей вселенной, агрегирующей все современные знания человечества из области астрономии. И, не смотря на то, что код автор планирует оставить закрытым, каждый может внести свой посильный вклад в создание самого большого виртуального мира из ныне существующих.
PS: все благодарности автору программы SpaceEngineer. Думаю, он сможет ответить на некоторые вопросы по движку, если такие возникнут.