
Black Hole Complex — чёрная дыра, которая по-настоящему затягивает материю.
Один самостоятельный префаб из пяти связанных частей: процедурный аккреционный диск, горизонт событий с фотонным кольцом, гравитационное линзирование в экранном пространстве, процедурная поверхность звезды и система захвата материи на GPU, которая реагирует на всё, что окажется рядом.
Демо в браузере (WebGPU) (Если частиц не видно, в браузере нужно включить флаг WebGPU.)
Захват материи на лету
Компонент GravityBody можно повесить на что угодно: звезду, обломки, астероид, летящий корабль. Как только объект пересекает радиус захвата, с него срывается материя и по спирали уходит внутрь: опускается за заданное число витков, прижимается к плоскости диска и растворяется в аккреционном потоке.
Если увести тело из радиуса захвата, поток дотекает и отпускает его. Если двигать тело, пока дыра его поглощает, поток тянется следом: каждая частица сохраняет траекторию, на которой родилась, и не перескакивает на новую, поэтому хвост расходится веером, как и положено обломкам. Если подвести к дыре три тела с разных сторон, получится три потока, у каждого своя HDR-палитра.
Ничего не нужно анимировать вручную: ни таймлайнов, ни ключевых кадров. Эффект сам реагирует на сцену.

Всё считается на GPU
Каждый поток прогоняет тысячи частиц через compute-шейдер и рисуется через Graphics.DrawProcedural: без GameObject'ов, без обновления частиц на CPU, без аллокаций каждый кадр. Плотность эмиссии зависит от расстояния: с дальнего тела материя едва сочится, с близкого — льётся потоком. Буферы выделяются на каждый поток и освобождаются автоматически, когда тело уходит.

Настройка без запуска Play Mode
Генератор меша диска, симуляция потоков и все шейдеры работают в Scene view в режиме редактирования. Можно двигать звезду, менять форму спирали, подкручивать доплеровскую асимметрию — всё отражается сразу.
Что это за эффект
Стилизованный и дешёвый эффект, который легко подогнать под арт: хорошо смотрится в роликах и при этом спокойно работает в самой игре. Это не физически точный рендер дыры Керра на ray marching и не попытка его сделать.
Ещё его можно использовать как опасную зону на уровне, оружие масштаба босса, постановочную сцену для ролика, дальний объект на фоне, портал или эффект варп-прыжка
Возможности
Захват материи
- Захват по ситуации: объект с компонентом GravityBody сам начинает подпитывать дыру, когда оказывается рядом, и отпускается, когда уходит
- Сколько угодно одновременных потоков, у каждого своя HDR-палитра из четырёх цветов
- Каждая частица помнит свою траекторию: за движущимся источником тянется веер, а не кривая, которая прыгает за ним, как резинка
- Плотность эмиссии зависит от расстояния
- Настраиваемая спираль: радиус, число витков и их распределение, доля плоского участка, направление вращения, сужение по ширине

Диск, горизонт и звезда
- Процедурный меш аккреционного диска из редактируемых кривых профиля, пересобирается на лету
- Доплеровская асимметрия, бесшовное течение в полярных координатах, двухслойный бегущий шум
- Гравитационное линзирование в экранном пространстве с затуханием по кольцу и защитой по глубине
- Фотонное кольцо через симметричный френель, настроено под Bloom
- Процедурная поверхность звезды на 3D fBm: без текстур и без швов UV
Остальное
- Полное превью в режиме редактирования: меш, симуляция и шейдеры работают прямо в Scene view
- 100% написано вручную на HLSL, compute и C#: полные исходники, без Shader Graph, без VFX Graph, без зависимостей
- Совместимо с SRP Batcher, поддерживает instancing
- В комплекте свободная камера и демо-сцена

Технические детали
Количество VFX: 1 готовый префаб чёрной дыры, собранный из 5 слоёв эффектов, которые можно использовать и по отдельности.
Слои: аккреционный диск / ядро горизонта событий / гравитационное линзирование в экранном пространстве / потоки захвата материи / процедурная поверхность звезды
Свои шейдеры: 5 + 1 compute
- BlackHoleCore — unlit, непрозрачный, очередь 4000
- AccretionDisk — unlit, аддитивный, очередь 3100
- ScreenDistortion — читает Opaque Texture, очередь 2900
- StreamParticles — процедурный вершинный шейдер, читает StructuredBuffer, аддитивный, очередь 3200
- SunCore — unlit, непрозрачный, полностью процедурный
- StreamSim.compute — ядро симуляции частиц на GPU
Все совместимы с SRP Batcher, один CBUFFER UnityPerMaterial, instancing включён.
Порядок очередей рендера выбран намеренно и описан в README.
Частицы: симулируются на GPU, до 65 536 на поток, по умолчанию 4000.
Рисуются через Graphics.DrawProcedural: без GameObject'ов, без обновлений на CPU, без аллокаций каждый кадр.

Меши: генерируются в рантайме — поверхность вращения аккреционного диска из редактируемых кривых профиля и квад-билборд для прохода линзирования.
Текстуры: 2
- TX_BH_Disk — 1024 x 1024
- TXC_BlueBurpleNebula — кубмапа, 512 на грань.
Без флипбуков, атласов и карт нормалей. Поверхность звезды, меш диска и всё движение частиц генерируются процедурно в рантайме.
Совместимость
Только URP
Видео
![]()
https://www.youtube.com/watch?v=ydjAxw3xt1E
Страница в Asset Store: Black Hole Complex