Крутая заставка по мотивам Hail Mary для MacOS на Metal+SwiftUI
Мне давно хотелось посмотреть что под капотом вот этих заставок, которые 100% видел каждый.
Как оказалось, есть специальный таргет в оси, который до сих пор генерит h+m файлы по дефолту (хотя и без проблем эту шляпу можно дропнуть и впилить нормальный код на Swift).
Я даже нашел какой-то древний репозиторий, в котором кто-то сделал ту самую заставку с dvd (а вот тут есть более свежий вариант).
Пришлось побороться с передачей нашей вьюхи с шейдером, но в итоге все оказалось проще, а ещё кстати можно даже прокидывать возможность менять настройки наружу для юзера.
Сам алгоритм шейдера довольно понятный:
Чтобы получить корректный эффект полос со сгустками света, режем экран на полосы. На этой основе каждая линия получает свою случайную скорость, случайный цвет и стартовую позицию (фазу). Они становятся независимыми!
А чтобы получить сами кусочки света, мы берём синусоиду времени и возводим ее в высокую степень: pow(sin(...), 8.0).
Это чуть плющит график волны: большую часть времени линия просто слегка светится, но на пике происходит резкая, яркая вспышка.
Ну и я ещё добавил пару вариантов для красоты, как бы видел Роки наш шейдер (только без аудио отражений волн), но палитру сохранил.
Код шейдера уже в Notion:)
Код шейдера уже в Notion:)
Creator has disabled comments for this post.