Черная-черная дыра TOTAL RELOAD
Да заболел, работать не получается, голова гудит как аэродинамическая труба. Ни спать, ни думать.
Недавно закончил работу над мат.моделью черной дыры для нашей игры TOTAL RELOAD:
Кинематографичный раурс №1
Cкрин из нашей группы из нескольких разработчиков. Все интенсивно кидают результаты своих работ, наброски, идеи:
Скрины процесса разработки
В процессе разработки вдохновение черпал везде где только можно. В основном из Interstellar, референсы и матмодели других разработчиков. Сразу приведу некоторые ссылки: youtube.com/watch?v=g-iw2DDNDeY (реализация без когда, полезно чтобы понять в общих чертах как сделать черную дыру)
А вот этот парень большой молодец (на мой взгляд):
Он подробнее рассказал на пальцах как сделать черную дыру и с какими проблемами можно столкнуться. Да, в его версии черной дыры есть артефакты, но видео достаточно полезное.
А еще он не забывл упомянуть "того лысого чувака", который очень подробно объясняет рейматчинг :)
А это мой вариант "Б" на случай если у меня не получилось бы сделать черну дыру приблизительно как в Интерстелларе. Такую версию дыры точно можно сделать:
Разработка
Процесс разработки начался с изучения того что из себя представляет черная дыра и того как она выглядит. Какие ожидания относительно внешнего вида имеются у игроков, как ее видят дизайнеры. То есть все началось с референсов дизайнеров и матнаработок других разработчиков.
Все что попадает (свет, материя) в область воздействия черной дыры, притягивается и сжимается в идеальную точку. Именно из-за этого черная дыра и выглядит так как ее показали в Интерстелларе:
Как оказалось, многие дизайнеры имеют свое видение черной дыры и оно часто рознится с описанием математиков. Привожу ниже разные референсы:
Некоторые рефренсы черной дыры, которые нашел в сети
Структура черной дыры, некотороые попытки воссоздания
В целом черная дыра состоит из ядра (то что находится в центре) и диска (его называют аккреционным диском).
Моей первой идеей была следующая: а что если сделать черну дыру в виде модели сферы и модели диска?
Мой напарник Александр к тому времени уже сделал версию черной дыры в Blender, записал клип и он много месяцев лежал в папке, я попробовал воссоздать что-то похожее, но полностью в Unity.
Версия черной дыры Александра
Ортографическая камера, разная толщина линий обода, кольца вокруг черной дыры, плоский аккреционый диск с перетянутой(? или в блендере mipmap неверный задается) на краях ткустурой, звезды одного размера, цвета и яркости. Непонятно что с звездным небом. То и из-за распределения, то ли из-за одинаковой яркости небо какое-то странное. А может мне кажется?
Ваше мнение?
В итоге все это привело к тому что качество картинки сцен с черной дырой пришлось доработать.
Сразу отмечу, что звезды имеют разный размер (в том числе и из-за разной яркости свечения), цвет, неравномерное распределение на небе и ко всему к этому они еще и мигают (какие-то больше, а какие-то почти нет).
В моем случае была использована процедурная генерация звезд на основе вот такого шума (https://www.shadertoy.com/view/Xsl3Dl):
Пикабу не умеет вставлять форматированный код, потому прилагаю фото кода
После того как немного пошаманил, получилось создать процедурное небо:
Минимальное количество звезд
Увеличил яркость звезд
Уменьшил яркость звезд
Что мне нравится в компьютерной графике и к чему всегда стремлюсь - это автоматизация процесса.
Взгляните, количество звезд, яркость, частота мигания и прочие параметры могут быть заданы через несколько ползунков. Можно в реальном времени настраивать параметры звезного неба и смотреть устраивает оно или нет... Круто, правда?
Черная дыра
Но а дальше пошли пляски с бубном. Мне категорический, крайне не хотелось возиться с рейматчингом. Потому что рейматчинг:
- тяжел для графической карты
- у меня небольшой опыт работы с ним
- чтобы что-то сделать в рейматчинге - это нужно реально разобраться и сделать математически. То есть там реальная математика и если где-то будет проблема, то ты ее не найдешь отладкой. Нужно сидеть и разбираться что к чему.
В общем мой подход "ВСЕ ЧТО УГОДНО, НО НЕ РЕЙМАТЧИНГ" привел меня к таком результату:
ну хоть небо на небо похоже
Здесь две модели: диск и сфера. Ну поехали критиковать:
- облака на диске плоские как лист бумаги
- облака диска не похожи на облака
- плавного перехода между облаками диска и космосом нет (в этой версии, но это не спасет все равно)
- дыра не искажает пространство
- облака с аккреционого диска не наползают на черную дыру и текстура там без перехода
- текстура газов или что это там - одноцветная какая-то, серая что ли
+ слева есть засвет от энергии, это плюс, есть как бы намек на соответствие с матмоделью
Я еще долго игрался с моделью дыры пока не понял, что пора завязывать с этими убогими потугами что ничего дельного из этого не выйдет:
Попытка улучшить аккреционный диск
Какой-то объект на фоне предполагаемой черной дыры
Аккреционный диск, попытка улучшить №100500
Попытка настроить\сделать карты нормалей для кинематографичного искажения неба
Да, можно показать дыру под определенным ракурсом, на определенном расстоянии и на определенное время. Но тут слишком много слова "определенное". Нужно чтобы можно было показывать как хочешь, со всех сторон и с разного расстояния. Рейматч короче.
Ну что, поехали, небольшое видео о том чего можно добиться рейматчингом:
Хотя облака диска у нас реализованы не на 100% так как показано на видео, посмотрел это видео чтобы погрустить на тему того, что придется много-много-много пробовать, экспериментировать.
Рейматч
Первым делом создал объемную сферу, тор и сжал тор по высоте чтобы выглядел как дск. Здесь одна из версий тора и сферы:
Одна из версий черной дыры
Далее работаем с диском, добавляем ему шум с помощью облаков, используем полярные координаты и видим артефакт:
Шов в области перехода облаков
Шов в области облаков устранен
Артефакт, в данном случае, - это как бы "шов" от замыкания облаков. Здесь показал изменение координат полярной системе. Шов находится в области резкого перехода красного в желтый. Если смажем переход (путем интерполяции), то шва не будет:
Полярные координаты в виде цветов
Скрина с текстурой облаков без шва не осталось.
После этого нужно было разобраться с текстурой глубины. Обьекты, которые попадают в диск и дыру должны пересекаться корректно. Сделано, здесь показано как палка свеху не пересекается облаками, а снизу облака перекрывают палку. Делается это так: если значение буддера глубины больше чем глубина облака, то считаем, что объект находится за облаками и рисуем облака. Иначе рисуем обьект. Результат:
Облака без цвета (один сплошной красный)
Нужно менять прозрачность в зависимости расстояния между облаками и палкой. Это нужно для того чтобы облака были похожи на обака. В данном случае облако перекрывает палку, но мы дополнительно изучаем расстояние между облаком и палкой. И в зависимости от расстояния мы задаем прозрачность облака:
Палку (ее часть, которая в облаках) немного нужно было исказить. Для этого использовал GrabPass. То есть делается фото всего экрана, помещается в текстуру и в шейдре обрабатывается текстура (вернее область палки). Так же добавим искажение звездам:
Ну что, получили артефакт в виде второй палки, которая возникла из-за искажения текстуры GrabPass. Чтобы устранить этот артефакт используем текстуру глубины и обрабатываем ситуацию, когда палка не должна рисоваться.
Позже отказался от использования искажения (его незаметно), то есть GrabPass не используется .
Результат
Кинематографичный раурс №2
Выводы
Рейматчинг довольно мощный инструмент. Да и в целом, как оказалось, математика - это достаточно мощная штука когда умеешь ее использовать :)
Экспериментировать пришлось не так и много. Во всяком случае меньше чем люди, которые разрабатывали облака для мультиков пиксар.
В результате нам удалось сделать:
+ теперь облака на диске объемные и выглядят как обака с разных углов. Потому что они реальные математические облака :)
+ облака диска стали похожи на облака
+ сделан плавный переход между облаками диска и космосом
+ дыра очень хорошо искажает пространство и звезды
+ облака с аккреционого диска наползают на черную дыру, все как надо
+ текстура газов диска цветная, объемная (цвет и плотность облаков меняются в зависимости от расстояния до ядра)
- убрал яркий засвет в правой части аккреционного диска, пока он не нужен
+ звезды похожи на звезды: разного размера, цвета, яркости, мигают
Ссылки на нас
У нас уже есть страничка в стим, трейлер, скрины из игры :)
TOTAL RELOAD в STEAM / Сообщество ВК / Reddit / TORSHOCK
Ссылки на меня: CGAleksey_VK / CGAleksey_DTF
Лига Геймеров
45.4K постов89.2K подписчика
Правила сообщества
Ничто не истинно, все дозволено, кроме политоты, за нее пермач, идите на ютуб
Помни!
- Новостные/информационные публикации постим в pikabu GAMES
- Развлекательный контент в Лигу Геймеров
Нельзя:
Попрошайничать;
Рекламировать;
Оскорблять участников сообщества;
Нельзя оценивать Toki Tori ниже чем на 10 баллов из 10;
Выкладывать ваши кулвидосы с только что зареганных акков - пермач