Детка, это просто космос!

Чёрная дыра в виртуальной реальности

1 этап – Сбор информации

Чёрная дыра – это один из самых популярных объектов в космосе, а после фильма «Интерстеллар» его популярность выросла ещё больше. Почему бы не заглянуть в неё, используя современные технологии?!

Когда мы занялись подготовкой к реализации этого проекта, оказалось, что готовых решений, которые можно применить в VR, почти нет. Да и те, что есть, работают нестабильно или не так как нужно.

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

Чёрная дыра с аккреционным диском из фильма «Интерстеллар»

Чтобы добиться такого эффекта, нужно было показать у объекта чёрной дыры в виртуальной реальности:

– горизонт событий/радиус Шварцшильда,

– аккреционный диск,

– искажение пространства-времени

2 этап – Реализация

Весь процесс поиска решения задачи проходил в Unity.

Сначала мы решили воссоздать чёрную дыру, используя шейдер граф (специальный плагин Unity, который позволяет писать шейдеры нодами, а не кодом). С созданием первой части – эффекта искажения – все прошло гладко, он хорошо работал в VR. Но вот добавить к нему аккреционный диск уже стало проблемой. Когда мы смотрели прямо в центр чёрной дыры, то он был похож на то, что нужно, но как только отводили взгляд, - все ломалось.

Верхнее искажение диска не отрисовывается

Были попытки исправить этот недочёт, но стало понятно, что придётся использовать Raymarching, чего мы пытались изначально избежать, так как Raymarching - довольно ресурсозатратная техника рендеринга и не самая простая для VR. Про него довольно хорошо переведена статья на Хабр.

Дело пошло. Но встала проблема, как подружить VR и Raymarching в Unity. Сначала мы хотели cделать так, чтобы пространство рэймарчинга рендерилось в текстуру, которая бы проецировалась на камеру. Но такой подход «кушал» слишком много ресурсов, и поэтому было решено сделать всё через обычный стерео-проходный шейдер, создать материал и кинуть его на сферу. По сути получалось то же самое, если мы просто влетим в сферу.

Скайбокс млечного пути на сфере

Существует довольного много вариаций чёрных дыр, написанных с помощью рэймарчинга. На том же ShaderToy их порядка 40, но с разными аккреционными дисками. У таких решений один и тот же принцип - искривление луча в зависимости от того, насколько близко он к чёрной дыре.

Основным руководством, после многочисленных экспериментов, для нас стала статья «Kelvin van Hoorn Supermassive black hole tutorial», в которой довольно хорошо описаны все этапы воссоздания чёрной дыры.

Чуть модернизировав и оптимизировав шейдер применительно к VR, мы пришли к решению, которое нас устроило. Команда TITABIT представляет готовый результат:

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

Чтобы избежать эффекта укачивания и упростить пользовательский опыт в VR-среде, мы реализовали поворот объекта чёрной дыры с помощью контроллера. Такой поворот показывает все эффекты и искажения, которые мы хотели получить. Отдельно сделано передвижение по сцене в виде плавных пролетов для приближения или отдаления от объекта чёрной дыры.

В итоге мы создали близкую к математической модель чёрной дыры в виртуальной реальности. Немного проявив воображение, можно в полной мере почувствовать себя героем фильма «Интерстеллар».

Доступно для Meta Quest/Quest2 через Link-кабель.

0
Комментарии
0 комментариев
null