Galaxy Constructor

Демо в браузере (десктопный браузер с WebGPU)

Галактики в реальном времени, построенные с опорой на настоящую астрономию. Galaxy Constructor генерирует миллион звёзд и больше через compute-шейдеры и рисует их за один draw call. Подходит для космических игр, симуляций и роликов. С третьей версии к любой звезде можно перелететь.

- Данные с телескопов: Берётся снимок Hubble, Spitzer или WISE, из него делаются карта плотности и карта цвета, они и задают форму и цвета галактики. Можно нарисовать свои карты и палитры и сделать вымышленную галактику.

Galaxy Constructor

- Настройка на лету: Плотность, яркость и масштаб звёзд меняются в инспекторе прямо во время игры, галактика сразу пересобирается. В редакторе вне Play Mode превью работает так же. Для базовой работы не нужно писать код и настраивать шейдеры.

- Любая форма: Спираль, неправильная галактика или пара сталкивающихся — любая картинка превращается в галактику. Другой сид даёт новый вариант, с фиксированным сидом карта не меняется.

- К каждой звезде можно слетать: По клику звезда получает спектральный класс, физические параметры, имя и планетную систему с лунами, поясами астероидов и кометами. Запись сохраняется в CSV-базу и показывается на инфокарточке. Кнопка Jump переносит камеру к звезде и открывает её систему.

Что нового в версии 2.0

  • Выбор звезды кликом мыши или тапом
  • Процедурные данные звезды: спектральный класс и класс светимости, температура, светимость, радиус, масса, возраст, металличность
  • Старое и молодое звёздное население распределено по положению: в балдже и гало больше старых звёзд, в диске больше молодых
  • Каталожные имена по секторам галактики и собственные имена для ярких гигантов
  • Планетные системы собираются из своих ассетов Body Type и префабов
  • CSV-база посещённых звёзд
  • Инфокарточка на UI Toolkit, перелёт камеры и демо-вид звёздной системы
  • Ассет Galaxy Settings: одна галактика в одном файле, меняется из инспектора или скриптом
  • Near Rays: дифракционные лучи, как от объектива, на ярких звёздах рядом с камерой

Galaxy Constructor

Данные совпадают с картинкой

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

Galaxy Constructor

Детерминированность

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

Производительность

Звёзды — это квады, повёрнутые к камере, они читаются прямо из GPU-буфера: без GameObject'ов, без геометрического шейдера, один draw call на всю галактику. Данные звезды считаются только по клику, выбор среди 300 000 звёзд занимает 1–2 мс в билде. Поддерживаются Metal, Vulkan, мобильные устройства, консоли и VR.

Galaxy Constructor

В комплекте полные исходники C# и HLSL, демо-сцена и подробная документация.

Шейдеры планет есть в отдельном ассете Digital Planets

Возможности

  • Генерация
  • Генерация на GPU через compute: миллион звёзд и больше на десктопе, всё за один draw call
  • Форма галактики задаётся двумя картами плотности (вид сверху и сбоку) и картой цвета
  • Работает с реальными астрономическими снимками (Hubble, Spitzer, WISE) или с нарисованными вручную картами
  • Фиксированный Galaxy Seed: одни и те же настройки дают одну и ту же галактику при каждом запуске
  • Galaxy Settings как ScriptableObject: можно подготовить несколько галактик и переключать их в инспекторе или из кода
  • Превью в редакторе и автоматическая перегенерация в Play Mode, пока двигаются слайдеры
  • Джиттер против бандинга и хаотическое смещение убирают сетку от текселей

Galaxy Constructor

Рендеринг

  • Звёзды — квады, повёрнутые к камере, из GPU-буфера, без GameObject'ов и геометрического шейдера
  • Четыре формы звезды в зависимости от яркости: от голого ядра до ядра с ореолом и дифракционными лучами
  • Один атлас звёзд 2x2 в оттенках серого, легко заменить на свой
  • Детерминированный разброс размера и поворота для каждой звезды
  • Минимальный размер звезды в пикселях на экране: дальние звёзды не мерцают на субпикселях
  • Near Rays: лучи от объектива в экранном пространстве проявляются, когда камера подлетает к яркой звезде
  • Режимы смешивания Additive (HDR + Bloom) и premultiplied Alpha
  • Рисуется во всех камерах Game, Scene и VR, несколько генераторов могут использовать один материал

Взаимодействие и данные звёзд

  • Выбор звезды кликом или тапом, клики по UI не проходят насквозь, перетаскивание не считается кликом
  • Спектральный класс и класс светимости, температура, светимость, радиус, масса, возраст, металличность
  • Молодое и старое звёздное население в зависимости от положения в галактике
  • Коричневые и белые карлики, нейтронные звёзды и чёрные дыры вместе с обычными звёздами
  • Каталожные имена по секторам галактики (например, «Kelsaemkrox RC V d14») и собственные имена для ярких гигантов
  • Планеты, луны, пояса астероидов и кометы из ассетов Body Type: вероятность, предпочтительная орбита, диапазон размеров и префаб
  • Орбиты масштабируются по светимости звезды: одни и те же правила работают и для красных карликов, и для сверхгигантов
  • Сид на каждую систему и каждое тело для своего процедурного контента
  • CSV-база: звёзды и тела записываются при первом посещении, потом читаются оттуда
  • Инфокарточка на UI Toolkit, перелёт камеры к звезде и демо-вид звёздной системы с орбитами по Кеплеру

Galaxy Constructor

Galaxy Constructor

Инструменты и API

  • Позиции и цвета звёзд доступны в C# как NativeArray для своей игровой логики
  • Простой API: сменить настройки, перегенерировать, получить выбранную звезду, подписаться на SelectionChanged
  • Свободная камера с управлением мышью, клавиатурой и тачем
  • Незаполненные ссылки выводятся как ошибки, клик по ошибке выделяет нужный GameObject
  • Полные исходники C# и HLSL
  • Демо-сцена, текстуры галактик, атлас звёзд и скайбокс
  • Документация: настройка, справка по скриптам, гайд по производительности с количеством звёзд для разных платформ, решение проблем

Требования

  • Unity 6000.3 (Unity 6.3) или новее
  • Universal Render Pipeline
  • Пакет Input System
  • Поддержка compute-шейдеров, Shader Model 4.5 или выше
  • Для режима Additive нужна HDR-камера с Bloom

Galaxy Constructor

Платформы

Windows (DX11, DX12, Vulkan), macOS и iOS (Metal), Linux (Vulkan), Android (Vulkan, OpenGL ES 3.1+), PlayStation, Xbox.

WebGPU работает, в Unity 6 он пока экспериментальный. WebGL 2.0 не поддерживается, там нет compute-шейдеров.

Видео

Galaxy Constructor

https://www.youtube.com/watch?v=HXqexLq14pI

Galaxy Constructor

https://www.youtube.com/watch?v=3vPjIECUtys

Страница в Asset Store: Galaxy Constructor