
Из одного меша сферы получаются десятки тысяч разных астероидов, и все они рисуются за 1–2 draw call'а. Asteroids Belt Pro убирает узкое место обычного рендера астероидов: физика, трансформации и процедурная генерация целиком считаются на видеокарте в compute-шейдерах.
В космических играх часто нужен пояс астероидов. Но у обычных подходов есть недостатки:
- Расставлять сотни астероидов вручную — недели монотонной работы
- Создавать тысячи GameObject'ов — FPS проседает
- Использовать системы частиц — нет настоящей физики и столкновений, выглядит ненатурально
- Купить готовый пак астероидов — количество ограничено, проблемы с производительностью остаются

Нужна система, которая рисует 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'ов при этом минимум.

Процедурная генерация для каждого экземпляра:
Каждый астероид отличается от других за счёт вариаций, которые считаются на GPU:
- Деформация в эллипсоид (растяжение по осям X/Y/Z независимо друг от друга)
- Двухслойный процедурный шум (Perlin + Value, частота у каждого экземпляра своя)
- Кратеры, распределённые по Фибоначчи (0–200 кратеров на астероид, размер и глубина случайные)
- Система материалов (плавный переход от камня к металлу по маске из шума)
- Вариации цвета (яркость, сдвиг оттенка, диапазоны тонирования — всё отдельно для каждого экземпляра)
- Случайный масштаб в зависимости от расстояния до центра орбиты
Аппаратная тесселяция и LOD:
Тесселяция добавляет детализацию геометрии без сильной просадки производительности:
- LOD по расстоянию (4 уровня: очень близко, близко, средне, далеко)
- Жёсткий предел тесселяции — 8 (иначе производительность падает экспоненциально)
- Постепенное отключение эффектов (AO, детальный шум и дополнительные источники света выключаются на расстоянии)
- Адаптивное уменьшение октав (с расстоянием отбрасываются слои шума Perlin и Value)
- Shadow LOD (в проходе теней смещение уменьшено, чтобы тени не мерцали)

Физически точное движение по орбитам:
Астероиды движутся по кеплеровым орбитам, которые каждый кадр считаются на GPU:
- Эллиптические орбиты (большой и малый радиус, эксцентриситет, наклон)
- Скорость зависит от гравитации (внутренние астероиды обращаются быстрее внешних)
- Вращение вокруг своей оси с разбросом угловой скорости
- Настройка области спавна (внутренняя и внешняя границы, верхний и нижний пределы по высоте)
- Кривая распределения размеров (размер астероида зависит от расстояния до центра)
Объёмное пылевое облако:
Встроенный туман с рэймаршингом рисуется внутри границ пояса астероидов:
- Объём в форме эллиптического тора (сам повторяет геометрию орбиты)
- Рассеяние света от основного направленного источника (фазовая функция Henyey-Greenstein)
- Дополнительные источники Point и Spot тоже освещают туман, с мягкими тенями
- Спад плотности по двум градиентам (плавное затухание у внутренней и внешней границ)
- Затухание по расстоянию до камеры (туман исчезает, когда камера отдаляется)
- Проходы размытия для эффекта god rays
- Рендер в половинном разрешении с апскейлом ради производительности

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

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

Рендеринг и шейдеры
- Аппаратная тесселяция — зависит от расстояния, жёсткий предел 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, затухание по расстоянию до камеры

Работа и инструменты
- Визуальная правка орбит — гизмо в 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

Платформы
- Поддерживаются: ПК, консоли (DirectX 11+, Vulkan, Metal)
- Пайплайн: только Universal Render Pipeline (URP)
- Версия Unity: Unity 6 (6000.2+)
Видео
![]()
https://www.youtube.com/watch?v=Dw8JY4ix4q8
![]()
https://www.youtube.com/watch?v=aXTNQhGlz54
Страница в Asset Store: Asteroids Belt Pro