Asteroids Belt Pro

Из одного меша сферы получаются десятки тысяч разных астероидов, и все они рисуются за 1–2 draw call'а. Asteroids Belt Pro убирает узкое место обычного рендера астероидов: физика, трансформации и процедурная генерация целиком считаются на видеокарте в compute-шейдерах.

В космических играх часто нужен пояс астероидов. Но у обычных подходов есть недостатки:

- Расставлять сотни астероидов вручную — недели монотонной работы

- Создавать тысячи GameObject'ов — FPS проседает

- Использовать системы частиц — нет настоящей физики и столкновений, выглядит ненатурально

- Купить готовый пак астероидов — количество ограничено, проблемы с производительностью остаются

Asteroids Belt Pro

Нужна система, которая рисует 5 000–10 000 астероидов при 100 FPS и не перегружает видеокарту. Каждый астероид должен выглядеть по-своему без ручной расстановки, а движение по орбитам — подчиняться законам Кеплера, и при этом compute-шейдеры не приходится писать самому.

Asteroids Belt Pro рисует большие поля астероидов через DrawMeshInstancedIndirect и compute-шейдеры, по 1–2 draw call'а на вариант материала. Из одного меша сферы в 100 треугольников получается 10 000 разных астероидов. Вот как это устроено:

Архитектура на GPU:

- Орбитальная физика целиком на GPU (движение по Кеплеру с эксцентриситетом и наклоном орбиты)

- Матрицы строятся на GPU (прямые и обратные трансформации для правильного освещения)

- Никакой нагрузки на CPU в каждом кадре, все вычисления идут в compute-шейдерах

- DrawMeshInstancedIndirect: один draw call рисует тысячи астероидов

Один меш, много вариантов:

Одного меша сферы с одним материалом хватает, чтобы получить тысячи непохожих друг на друга астероидов. Можно назначить несколько вариантов материала — у каждого будет своя популяция астероидов со своими мешами. GPU-буферами и рендером по всем материалам система управляет сама, draw call'ов при этом минимум.

Asteroids Belt Pro

Процедурная генерация для каждого экземпляра:

Каждый астероид отличается от других за счёт вариаций, которые считаются на GPU:

- Деформация в эллипсоид (растяжение по осям X/Y/Z независимо друг от друга)

- Двухслойный процедурный шум (Perlin + Value, частота у каждого экземпляра своя)

- Кратеры, распределённые по Фибоначчи (0–200 кратеров на астероид, размер и глубина случайные)

- Система материалов (плавный переход от камня к металлу по маске из шума)

- Вариации цвета (яркость, сдвиг оттенка, диапазоны тонирования — всё отдельно для каждого экземпляра)

- Случайный масштаб в зависимости от расстояния до центра орбиты

Аппаратная тесселяция и LOD:

Тесселяция добавляет детализацию геометрии без сильной просадки производительности:

- LOD по расстоянию (4 уровня: очень близко, близко, средне, далеко)

- Жёсткий предел тесселяции — 8 (иначе производительность падает экспоненциально)

- Постепенное отключение эффектов (AO, детальный шум и дополнительные источники света выключаются на расстоянии)

- Адаптивное уменьшение октав (с расстоянием отбрасываются слои шума Perlin и Value)

- Shadow LOD (в проходе теней смещение уменьшено, чтобы тени не мерцали)

Asteroids Belt Pro

Физически точное движение по орбитам:

Астероиды движутся по кеплеровым орбитам, которые каждый кадр считаются на GPU:

- Эллиптические орбиты (большой и малый радиус, эксцентриситет, наклон)

- Скорость зависит от гравитации (внутренние астероиды обращаются быстрее внешних)

- Вращение вокруг своей оси с разбросом угловой скорости

- Настройка области спавна (внутренняя и внешняя границы, верхний и нижний пределы по высоте)

- Кривая распределения размеров (размер астероида зависит от расстояния до центра)

Объёмное пылевое облако:

Встроенный туман с рэймаршингом рисуется внутри границ пояса астероидов:

- Объём в форме эллиптического тора (сам повторяет геометрию орбиты)

- Рассеяние света от основного направленного источника (фазовая функция Henyey-Greenstein)

- Дополнительные источники Point и Spot тоже освещают туман, с мягкими тенями

- Спад плотности по двум градиентам (плавное затухание у внутренней и внешней границ)

- Затухание по расстоянию до камеры (туман исчезает, когда камера отдаляется)

- Проходы размытия для эффекта god rays

- Рендер в половинном разрешении с апскейлом ради производительности

Asteroids Belt Pro

Визуальная правка орбит:

Гизмо в Scene view показывают границы орбиты в реальном времени, причём всегда, даже если менеджер не выделен. Ручками меняются большой и малый радиус, внутренняя и внешняя границы, высота по вертикали. Изменения применяются сразу. Цвета: зелёный — большая ось, жёлтый — малая ось, голубой — внешняя граница, пурпурный — внутренняя граница, синий градиент — вертикальные пределы.

Пресеты:

Полная настройка пояса астероидов сохраняется и загружается через окно редактора:

- Пресет загружается в один клик

- Материалы проверяются автоматически

- Настройки тумана тоже входят в пресет

- Свой пресет можно сделать из любого настроенного пояса

- Пресеты можно переносить между проектами

Подходит для космических игр, научно-фантастических окружений и роликов, где нужны огромные поля астероидов.

Asteroids Belt Pro

Возможности

Основа

  • Вычисления только на GPU — вся физика, матрицы и трансформации считаются в compute-шейдерах
  • DrawMeshInstancedIndirect — 1–2 draw call'а на вариант материала независимо от числа астероидов (5 000–10 000+ при 100 FPS)
  • Нулевая нагрузка на CPU — после начального спавна процессор в каждом кадре ничего не считает, всё делает GPU
  • Орбиты по Кеплеру — физически точные эллиптические орбиты с эксцентриситетом, наклоном и скоростью, зависящей от гравитации
  • Несколько материалов — можно назначить несколько вариантов материала со своими мешами, GPU-буферами система управляет сама

Процедурная генерация

  • Вариации для каждого экземпляра — каждый астероид уникален за счёт рандомизации на GPU (деформация в эллипсоид, частота шума, число и глубина кратеров, цвета)
  • Двухслойный шум — Perlin + Value, частота, октавы и амплитуда настраиваются отдельно
  • Кратеры по Фибоначчи — 0–200 процедурно расставленных кратеров на астероид, настраиваются размер, глубина и вал
  • Система материалов — плавные переходы от камня к металлу по маске из шума, у каждого материала свои PBR-параметры
  • Деформация в эллипсоид — растяжение по осям XYZ для каждого экземпляра превращает сферы в неправильные формы

Asteroids Belt Pro

Рендеринг и шейдеры

  • Аппаратная тесселяция — зависит от расстояния, жёсткий предел 8 (чтобы производительность не обваливалась)
  • LOD из 4 уровней — по мере удаления камеры постепенно отключаются октавы, AO, детальный шум и дополнительные источники света
  • PBR-материалы — metallic/smoothness, поддержка reflection probe в URP Forward+
  • Ambient Occlusion — AO в кратерах и AO в трещинах затемняют поверхность
  • Трипланарная детализация — высокочастотная текстура накладывается без UV
  • Shadow LOD — в проходе теней смещение уменьшено, поэтому тени не мерцают

Объёмный туман

  • Эллиптический тор с рэймаршингом — туман сам повторяет границы пояса астероидов (эллиптическое сечение)
  • Физически корректное рассеяние — фазовая функция Henyey-Greenstein для основного направленного света
  • Дополнительные источники — Point и Spot освещают туман, тени считаются мягкими
  • Плотность по двум градиентам — плавное затухание у внутренней и внешней границ, кривые спада настраиваются (Linear/Smooth/Sharper/Softer)
  • Оптимизации — рендер в половинном разрешении, проходы размытия для god rays, затухание по расстоянию до камеры

Asteroids Belt Pro

Работа и инструменты

  • Визуальная правка орбит — гизмо в Scene view с ручками (видны всегда, обновляются на лету)
  • Менеджер пресетов — сохранение и загрузка полной настройки пояса через окно редактора, применение в один клик
  • Автоматическая проверка — проверка GPU Instancing у материалов, поиск нужной render feature, диагностические отчёты
  • Динамическое отсечение камеры — near/far plane автоматически подстраиваются под границы пояса (выше точность глубины, туман меньше дрожит)

Технические детали

  • Управление GPU-буферами — жизненный цикл буферов AsteroidData, InstanceData, RenderMatrices, InverseMatrices и Args автоматический
  • Frustum culling — консервативное отсечение на GPU пропускает астероиды за пределами экрана
  • Интеграция с URP — четыре прохода шейдера (ForwardLit, ShadowCaster, DepthOnly, DepthNormals) для полной совместимости с URP
  • Модульные шейдеры — HLSL-инклуды разбиты на группы (Core, Features, Geometry, Noise), их удобно править под себя
  • Unity 6 RenderGraph — полная поддержка нового рендеринга Unity 6

Asteroids Belt Pro

Платформы

  • Поддерживаются: ПК, консоли (DirectX 11+, Vulkan, Metal)
  • Пайплайн: только Universal Render Pipeline (URP)
  • Версия Unity: Unity 6 (6000.2+)

Видео

Asteroids Belt Pro

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

Asteroids Belt Pro

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

Страница в Asset Store: Asteroids Belt Pro