Black Hole Complex

Black Hole Complex — чёрная дыра, которая по-настоящему затягивает материю.

Один самостоятельный префаб из пяти связанных частей: процедурный аккреционный диск, горизонт событий с фотонным кольцом, гравитационное линзирование в экранном пространстве, процедурная поверхность звезды и система захвата материи на GPU, которая реагирует на всё, что окажется рядом.

Демо в браузере (WebGPU) (Если частиц не видно, в браузере нужно включить флаг WebGPU.)

Захват материи на лету

Компонент GravityBody можно повесить на что угодно: звезду, обломки, астероид, летящий корабль. Как только объект пересекает радиус захвата, с него срывается материя и по спирали уходит внутрь: опускается за заданное число витков, прижимается к плоскости диска и растворяется в аккреционном потоке.

Если увести тело из радиуса захвата, поток дотекает и отпускает его. Если двигать тело, пока дыра его поглощает, поток тянется следом: каждая частица сохраняет траекторию, на которой родилась, и не перескакивает на новую, поэтому хвост расходится веером, как и положено обломкам. Если подвести к дыре три тела с разных сторон, получится три потока, у каждого своя HDR-палитра.

Ничего не нужно анимировать вручную: ни таймлайнов, ни ключевых кадров. Эффект сам реагирует на сцену.

Black Hole Complex

Всё считается на GPU

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

Black Hole Complex

Настройка без запуска Play Mode

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

Что это за эффект

Стилизованный и дешёвый эффект, который легко подогнать под арт: хорошо смотрится в роликах и при этом спокойно работает в самой игре. Это не физически точный рендер дыры Керра на ray marching и не попытка его сделать.

Ещё его можно использовать как опасную зону на уровне, оружие масштаба босса, постановочную сцену для ролика, дальний объект на фоне, портал или эффект варп-прыжка

Возможности

Захват материи

  • Захват по ситуации: объект с компонентом GravityBody сам начинает подпитывать дыру, когда оказывается рядом, и отпускается, когда уходит
  • Сколько угодно одновременных потоков, у каждого своя HDR-палитра из четырёх цветов
  • Каждая частица помнит свою траекторию: за движущимся источником тянется веер, а не кривая, которая прыгает за ним, как резинка
  • Плотность эмиссии зависит от расстояния
  • Настраиваемая спираль: радиус, число витков и их распределение, доля плоского участка, направление вращения, сужение по ширине

Black Hole Complex

Диск, горизонт и звезда

  • Процедурный меш аккреционного диска из редактируемых кривых профиля, пересобирается на лету
  • Доплеровская асимметрия, бесшовное течение в полярных координатах, двухслойный бегущий шум
  • Гравитационное линзирование в экранном пространстве с затуханием по кольцу и защитой по глубине
  • Фотонное кольцо через симметричный френель, настроено под Bloom
  • Процедурная поверхность звезды на 3D fBm: без текстур и без швов UV

Остальное

  • Полное превью в режиме редактирования: меш, симуляция и шейдеры работают прямо в Scene view
  • 100% написано вручную на HLSL, compute и C#: полные исходники, без Shader Graph, без VFX Graph, без зависимостей
  • Совместимо с SRP Batcher, поддерживает instancing
  • В комплекте свободная камера и демо-сцена

Black Hole Complex

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

Количество 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, без аллокаций каждый кадр.

Black Hole Complex

Меши: генерируются в рантайме — поверхность вращения аккреционного диска из редактируемых кривых профиля и квад-билборд для прохода линзирования.

Текстуры: 2

- TX_BH_Disk — 1024 x 1024

- TXC_BlueBurpleNebula — кубмапа, 512 на грань.

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

Совместимость

Только URP

Видео

Black Hole Complex

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

Страница в Asset Store: Black Hole Complex