Скрипты и реймарчинговые туманности

Новости о моей недавней работе. В прошлом месяце я в основном работал над обновлением руководств по моддингу, и работа ещё не закончена. Написать десяток инструкций, да ещё на двух языках - вот месяц и пролетел! HarbingerDawn и DoctorOfSpace делают вычитку и исправление ошибок. Это важная работа, потому что я хочу добавить эти руководства на новый сайт SE (этот), который будет запущен в ближайшее время.
Работа над VR продолжается, многое еще нужно сделать. 3D-интерфейс для Vive-контроллеров - самая сложная вещь.
Также я работаю над усовершенствованной системой скриптов, которая будет использоваться для создания обучающих туториалов в самой игре. Это важно для релиза на Steam, потому что управление в SE довольно сложно для новичков, и, конечно же, никто не читает инструкцию (поэтому я не собираюсь её обновлять). Так что туториалы в игре очень важны. Новые скрипты также позволят сделать туры как в Селестии - например, тур по Солнечной системе.
Я решил дать расширение «.se» для SE-скриптов. Например, файл учебного скрипта имеет имя "tutorial.se". Мне также нужен способ ускорить разработку скриптов, поэтому я решил добавить парсер параметров командной строки в SE. Пока у него есть только два параметра: -planetarium заставляет SE сразу после запуска сразу войти в планетарий, не отображая главное меню. Другим параметром является путь к файлу скрипта, который SE должен запустить при загрузке. Таким образом, это дает следующие возможности:
1) Если ассоциировать файлы .se со SpaceEngine, то двойной клик по такому файлу запустит SE и заставит его выполнить этот скрипт (SE автоматически переходит в режим планетария, если имя файла скрипта передается в командной строке).
2) Если экземпляр SE уже запущен, именно он выполнит скрипт, новый экземпляр SE не будет запущен. При этом, если окно SE было минимизировано, оно разворачивается.
3) Используя это, можно сделать интересную вещь. Если вы используете какой-либо продвинутый текстовый редактор для редактирования SE-скриптов (например, Notepad++), вы можете назначить SpaceEngine.exe в качестве "компилятора", т.е. для запуска файлов .se. Тогда нажатие горячей клавиши в редакторе запустит или развернёт SE и передаст ему скрипт, который вы редактируете. (Кстати, я настроил подсветку синтаксиса для Notepad++, для файлов .se, .sc, .sss и .cfg - более 1000 ключевых слов!).
4) Можно сделать bat-файл (или просто отредактировать свойства ярлыка на рабочем столе) и использовать его для запуска SE с определённым скриптом.
Еще одна вещь, над которой я работаю вместе с Duke, это рендеринга объемных объектов в SE с помощью реймарчинга. Duke сделал много удивительных шейдеров на shadertoy.com, и мы собираемся портировать их в SE. Фактически, почти каждый объект в космосе является объемным и полупрозрачным, поэтому за этим способом рендеринга будущее. Только подумайте: галактики, туманности, звезды, аккреционные диски и джеты, хвосты комет, атмосфера, облака и целые газовые гиганты и звёзды - все они должны быть представлены как объёмы. Даже некоторые эффекты корабля, такие как искривление пространства и выхлоп двигателя (что уже сделано в SE). Непрозрачные объёмы в SE - это только лишь корабли, твёрдая поверхность планеты, и поверхность воды (из-за будущего способа рендеринга). Вот несколько первых результатов:
Интересно то, что они сделаны как моды, которые модифицируют некоторые существующие объекты в SE. Я реализую новую систему, которая позволяет заменить рендеринг любого объекта пользовательской моделью со своими текстурами и шейдером. Пока это работает только для туманностей и галактик, но я планирую расширить это на звёзды и планеты. А также сделать возможным замену любого типа объекта, например, всех спиральных галактик. Если я продолжу разрабатывать эту систему, любой тип объекта в SE (даже стандартный) можно будет описать скриптом. Это очень напоминает функциональность, которую дают другие игровые движки! Пример скрипта для пользовательской модели туманности (да, остатки сверхновой анимированы, хотя параметры взрыва по логике должны быть перенесены в скрипт каталога туманностей):
{
UseForObject "Crab Nebula"
EnableImpostors true
EnableDepthTest false
EnableDepthWrite false
EnableBlend true
Shader "nebula_emission_supernova_2.glsl"
Texture0 "tex10.png"
Bright 2.0
Scale 6.0
ExpansionBegin 2457670 // 08.10.2016
ExpansionDuration 365.25
Color0 ( 1.00 0.96 0.92 1.00 )
//Data0 ( 2.0 1.15 0.28 6.7 )
}