После реализации созвездий я продолжил работу над движком и над Overview. Большая часть работы чисто техническая: завершение реализации предыдущих подсистем, оптимизация, исправления. Но некоторые результаты могут рассматриваться как нововведения:

  • Добавлены дополнительные проверки ошибок при загрузке каталогов
  • Скрипт-команда для переключения устройства вывода звука (для перенаправления звука в Rift Audio), аудио библиотека OpenAL обновлена ​​до версии 1.1
  • Аргумент командной строки для запуска SE в заданном 3D/VR режиме (параметры запуска Steam VR)
  • Добавлена возможность использования суперсэмплинга в VR (VRRenderScaleMax конфиге)
  • Возможность изменения положения меток вблизи объектов планетной системы и глубокого космоса (звёзд, галактик): слева, справа, сверху, снизу
  • В меню настроек графики добавлена опции выбора разрешения текстур варпа и отражений, разрешения рендер-буферов в проекциях рыбий глаз и 360°.
  • Отображение различных небесных координатных сеток: экваториальной, эклиптической, галактической; чекбоксы в меню настроек
  • В режиме HDR поверхность звезды автоматически становится темнее при приближении, чтобы сделать видимыми детали
  • Исправлены координаты и/или имена звёзд в 21 звёздной системе из каталога двойных звёзд
  • Новые текстуры Юпитера и Плутона
  • Текстура облаков на мининептунах, похожая на облака Венеры
  • Более реалистичная генерация систем спутников газовых гигантов: похожие на Юпитер, похожие на Сатурн, и возмущённые системы
  • Аналитическая модель орбит троянских спутников Сатурна: Елены (троянец Дионы), Каллипсо и Телесто (троянцы Тефии)
  • Аналитическая модель орбит коорбитальных спутников Сатурна Януса и Эпиметея, меняющихся орбитами каждые 4 года
  • Пункт в контекстном меню (меню правой кнопки мыши): «Скрыть/показать объект»
  • Скрипт-команда для загрузки пользовательского изображения и наложения его поверх экрана
  • Параметры для рандомизации формы новых туманностей
  • Новые текстуры Юпитера

    Это 14k текстура Юпитера за авторством Björn Jónsson. Он объединил новые изображения полюсов Юпитера, сделанных космическим аппаратом Юнона, со старой картой от КА Кассини.

    Новые текстуры Плутона

    Это 24k DEM (цифровая модель рельефа) и 24k глобальная ч/б мозаика, окрашенная 6k цветной RGB картой, взятые с сайта USGS. 24k означает разрешение исходной карты 24000×12000, что соответствует 300 метрам на пиксель на поверхности Плутона. Конечно, такой уровень детализации достигнут только в некоторых местах, остальное размыто или даже залито однородным цветом (там, где вообще нет данных). Возможно, позже кто-нибудь сделает «художественные» карты Плутона, заполнив неисследованные части чем-то «нарисованным». Как карта Тритона в SE.

    Сравнение со знаменитым изображением «Pluto crescent» от New Horizons:

    Original Image Original
    Modified Image Modified

    А это реальное место на Плутоне, недалеко от края полушария, заснятого New Horizons. Конечно, модель рельефа не очень точная, потому что New Horizons не имел на борту лазерного альтиметра, а карта высот была получена стереограмметрией.

    Скрипта-команда для загрузки пользовательского изображения и наложения его поверх экрана

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

    GotoLocation
    {

    Ver 990
    Body “Pluto”
    Parent “Pluto-Charon”
    Date “2015.07.15 13:55:49.09”
    Pos (-9702347472877 -3B64EAD92E3C0 +28BC7A6ECFB8C)
    Rot (0.6974516591107608 0.4510863003488191 -0.1111446217103753 -0.5456456779872078)
    Vel 4.8658663e-013
    Stereobase 1
    BindMode 2
    PhotoMode 0
    Exposure 0

    }

    FOV 1.2483833

    // This command loads image
    Watermark
    {

    Path “D:\Pictures\Space\Planets\9-Pluto\Pluto_Crescent_Color_1920x1080.jpg”
    Opacity 0.5
    Visible true

    }

    // Infinite loop
    Loop

    Interpolate WatermaskOpacity { To 1.0 Time 0.1 }
    Wait 0.25
    Interpolate WatermaskOpacity { To 0.0 Time 0.1 }
    Wait 0.25

    EndLoop

    Кстати, я не смог полностью совместить детали поверхности на Плутоне с фотографией. Вероятно, карта высот и текстура не совсем точно собраны. Я также не смог совместить линию горизонта: если она совпадает с фотографией, детали поверхности сдвигаются. Может быть, это значит, что у Плутона заметное сжатие? Возможно, более точное совмещение может быть достигнуто путём совмещения звёзд – некоторые звёзды видны на фотографиях New Horizons.

    Более реалистичная генерация систем спутников газовых гигантов

    Я пересмотрел код, который генерирует системы спутников газовых гигантов. У нас есть только 4 газовых гиганта для построения теории, но даже с такой небольшой выборкой можно сделать некоторые предположения (подкреплённые моделированием). Один из сценариев – быстрая миграция эмбрионов лун в протоспутниковом диске вокруг планеты, которая производит несколько поколений крупных лун. Луны образуются главным образом в средней, самой плотной части диска. Сразу же они начинают мигрировать внутрь и падают на планету через несколько миллионов лет. Но вместо них образуются новые луны, поскольку диск подпитывается веществом, текущим к планете из протопланетного диска звезды. Когда вещество в диске иссякает, последние выжившие луны образуют резонансную цепочку; при этом они относительно крупные и имеют сопоставимые размеры. Реальными примерами являются системы Юпитера и Урана. Другим сценарием является медленная миграция: в этом случае в самой плотной части диска образуются 1-2 очень большие луны и несколько меньших лун в других частях диска. Реальный пример – система Сатурна.

    В реальности возможны и промежуточные сценарии. Поэтому я реализовал функцию, которая модулирует массу лун в зависимости от их расстояния от планеты. Управляющий параметр, генерируемый процедурно для каждой системы, находится в диапазоне от 0 до 1. при значении 0 получается система, подобная системе Сатурна, при значении 1 – подобная системе Юпитера.

    А система Нептуна – аномальная, нарушенная захватом Тритона. Такие системы SE тоже генерирует.

    Аналитическая модель орбит троянских и коорбитальных спутников Сатурна

    В системе спутников Сатурна есть шесть малых лун, которые делят орбиту друг с другом или с другими лунами:

    Телесто и Калипсо – троянские луны Тефии;
    Елена и Полидевк – троянские луны Дионы;
    Янус и Эпиметей – коорбитальные луны, меняющиеся орбитами каждые 4 года.

    После реализации аналитических орбит (эфемерид) планет и спутников Солнечной системы, троянские луны больше не находятся к лагранжевых точках их лун-хозяев, потому что орбиты последних уже не просто кеплеровы эллипсы. К счастью, существует аналитическая теория движения Елены, Телесто и Калипсо – HTC 2.0 (P. Oberti, A. Vienne). Но она, к сожалению, не включает Полидевк, потому что эта маленькая луна была обнаружена в 2004 году, а теория была разработана в 2002. На видео ниже показано движение Тефии и её компаньонов-троянцев во вращающейся системе отсчёта.

    Янус и Эпиметей – уникальная пара лун, находящихся на почти одной и той же орбите. Они взаимодействуют необычным образом, меняясь орбитами каждые 4 года, что превосходно описано в этой статье. Такое поведение не может быть представлено простыми кеплеровыми орбитами, но существуют аналитические теории. Я реализовал одну из них, разработанную Benoit Noyelles. Ниже показан орбитальный танец этих лун в виде таймлапса, ускоренного в 18003373.0883543885 раз.

    Почему именно столько – 18003373.0883543885? Я хотел использовать ускорение времени примерно 2×107 раз – на этой скорости хорошо наблюдать за эволюцией орбит. Но при такой скорости Янус и Эпиметей успевают совершить около 5.55 оборота вокруг Сатурна за каждый кадр (при частоте 60 кадров в секунду). Поэтому в каждом следующем кадре они оказываются в разных точках своих орбит (это выглядит как случайные прыжки). Поэтому я рассчитал такое значение ускорения времени, чтобы луны совершали ровно 5 оборотов за кадр. В этом случае в каждом следующем кадре они оказываются почти в одном том же положении относительно Сатурна. Медленное смещение их положений объясняется небольшим отличием орбитальных периодов от того фиксированного значения, которое использовалось в анимации (5 оборотов за кадр). Сначала Эпиметей движется против часовой стрелки: это значит, что он успевает совершить чуть больше 5 оборотов за кадр, а Янус, движущийся в обратном направлении, совершает чуть меньше 5 оборотов. Т.е. Эпиметей находится на орбите, которая чуть ближе к Сатурну, чем Янус. Но когда две луны сближаются, Эпиметей ускоряется гравитацией Януса, переходя на более высокую (и медленную) орбиту, а Янус тормозится, переходя на более низкую (и быструю) орбиту. Они начинают удаляться друг от друга, и меняют направление смещения на анимации.

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

    Опция скрытия и отображения объекта в контекстном меню

    Она может использоваться в заскриптованных презентациях, для планетариев, и широко используется в Overview в виде скрип-команды. Например, вы можете захотеть скрыть Землю, чтобы наблюдать части неба, которые в настоящее время ниже горизонта (в планетариях есть такая опция). В Overview это используется, например, в главе «Planets»: глава реализована с помощью фейковой солнечной системы с фиксированным положением Марса, Земли и Юпитера. Команда вызывается в определённые моменты, чтобы показать Землю и Юпитер. В видео с лунами Сатурна был использован новый пункт контекстного меню для сокрытия других малых лун, чтобы они не загромождали картинку.

    Параметры рандомизации формы новых туманностей

    Я начал работу над процедурными ray-marched туманностями. Первое, что было необходимо для этого – «безопасный» способ изменения параметров, которые задают цвет, форму и другие свойства туманности. Этих параметров – десятки, некоторые из них зависят друг от друга, некоторые допускают изменения только в очень узком диапазоне (иначе лезут артефакты). Самый простой безопасный способ изменить форму туманности – это просто добавить смещение к шумовым функциям, используемым в модели. Краткое видео ниже показывает это в действии: трёхмерный вектор Randomize прибавляется ко входным координатам функций шума, что приводит к эффекту «прокрутки», который изменяет туманность без появления каких-либо артефактов. Аналогичный подход используется в процедурном генераторе рельефа (у процедурных планет тоже есть параметр Randomize).

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

    Обсудить этот пост на форуме.