Bloom
Светлые области "засвечивают" растекаются на близлежащие темные.
Принцип
Из-за того, что луч имеет размер, он задевает яркие участки и засвечивает темные.
Алгоритм
Смешиваем картинку с блюренной по яркости блюренной (чем ярче, тем больше намешиваем. Есть два пути:
1. Правильный - по строкам
2. Простой - просто блюрим и мешаем
Светлые области "засвечивают" растекаются на близлежащие темные.
Принцип
Из-за того, что луч имеет размер, он задевает яркие участки и засвечивает темные.
Алгоритм
Смешиваем картинку с блюренной по яркости блюренной (чем ярче, тем больше намешиваем. Есть два пути:
1. Правильный - по строкам
2. Простой - просто блюрим и мешаем
👍1
Вот тут я рассказываю, что такое SDF и как это работает:
https://youtu.be/ikr0hfaez18
https://youtu.be/ikr0hfaez18
YouTube
Введение в Signed Distance Fields (SDF): наглядно с примерами на шейдерах
SDF (Signed Distance Functions) — это мощный инструмент для генерации процедурной графики с помощью чистой математики. В этом видео я расскажу, что такое SDF, зачем он нужен, и покажу, как с ним работать на простых примерах. Всё это — без готовых моделей…
⚡3
Затемнение на краях
На краях экрана (слева и справа яркость падает) (это не виньетка!)
Принцип
Из-за большего отклонения на краях строки луч обладает меньшей энергией из-за более длинной траектории и расфокусировки. Как результат, ток падает и визуально края кажутся темнее.
Алгоритм
По гладкой кривой занижаем яркость по
На краях экрана (слева и справа яркость падает) (это не виньетка!)
Принцип
Из-за большего отклонения на краях строки луч обладает меньшей энергией из-за более длинной траектории и расфокусировки. Как результат, ток падает и визуально края кажутся темнее.
Алгоритм
По гладкой кривой занижаем яркость по
x, например:
float k = 1.0 - 5 * U.amount * pow(in.uv.x - 0.5, 4);
src.rgb *= k;
This media is not supported in your browser
VIEW IN TELEGRAM
Пилю сейчас очередную песочницу про физарум. Сделал для нее контрол с амебкой (есть несколько запросов на улучшение - так что это не конечный вариант).
Контрол на SwiftUI + Metal (.colorEffect). Все рисуется шейдером с помощью SDF.
Контрол на SwiftUI + Metal (.colorEffect). Все рисуется шейдером с помощью SDF.
❤1
На следующих выходных запилю видос, как собрать амебку из примитивов и заанимировать ее базово. Ну или про физарум, если успею его релизнуть.
❤2
Media is too big
VIEW IN TELEGRAM
На той неделе встретился с таким замечательным глитчем, который пердолит видеопамять, может наглухо повесить систему и отправить ее в ребут.
Случилось это на симуляторе. Обычно такое происходит, когда лезешь в памяти туда, куда не надо. Но я два часа потратил на проверки, и спамятью все было ок. Потом решил запустить на девайсе, так как с него больше полезного выпадает, и там нашел в логах, что беда не в памяти, а в переполнении стека.
То есть вот этот вызов одного ранда в другом все сломал.
Причем даже если объявить их
В итоге пришлось сделать не красиво, но рабоче - с дублированием кода. Зато спецэффекты красивые - давно таких не встречал
Случилось это на симуляторе. Обычно такое происходит, когда лезешь в памяти туда, куда не надо. Но я два часа потратил на проверки, и спамятью все было ок. Потом решил запустить на девайсе, так как с него больше полезного выпадает, и там нашел в логах, что беда не в памяти, а в переполнении стека.
То есть вот этот вызов одного ранда в другом все сломал.
float rand1(thread LCG &rng) {
rng.state = rng.state * 1664525u + 1013904223u;
return (float)(rng.state & 0x00FFFFFFu) / 16777215.0;
}
float rand(thread LCG &rng) {
return rand(rng) * 2.0 - 1.0;
}Причем даже если объявить их
inline, это не поможет, потому что это рекомендация.В итоге пришлось сделать не красиво, но рабоче - с дублированием кода. Зато спецэффекты красивые - давно таких не встречал
🔥2👀2
This media is not supported in your browser
VIEW IN TELEGRAM
Рандомно генерить амебок (визуализация параметров симуляции) вышло залипательнее, чем сама симуляция 🤠
❤9🔥5
Прогаем с кенгурой
Рандомно генерить амебок (визуализация параметров симуляции) вышло залипательнее, чем сама симуляция 🤠
Надо бы в будущих версиях сделать плавный переход между амебками при смене параметров.
Придется правда затаскивать вьюмодель для вьюхи - сейчас оно обходится без нее - контроль параметров осуществляется ее парентом, а она только рисует и ловит тачи, если попросили.
Не идеально, да, но для первой версии сгодится. Времени было одни выходные на собрать новую песочницу.
Придется правда затаскивать вьюмодель для вьюхи - сейчас оно обходится без нее - контроль параметров осуществляется ее парентом, а она только рисует и ловит тачи, если попросили.
Не идеально, да, но для первой версии сгодится. Времени было одни выходные на собрать новую песочницу.
💯6
This media is not supported in your browser
VIEW IN TELEGRAM
Эксперименты по сбору пресетов к скорому релизу песочницы
👀1
В преддверии релиза физарума расскажу, пожалуй про остальные песочницы.
>>Тиамат<<
Это первая песочница, про клеточные автоматы. Начиналась на тему потыкать SwiftUI, и симуляция там была тупо как заглушка. Теперь это уже полноценная песочница для экспериментов с клеточными автоматами: редактор поля, правил и прочее.
На ней же отлаживали процессы в команде, делали эксперименты с яблочной инфрой и онбордили людей. Теперь просто ждет, когда я доделаю последнюю фичу про флотовые правила, но там вопрос исключительно в UX.
Попробовать можно тут: https://apps.apple.com/app/apple-store/id1580189385
Что такое клеточные автоматы рассказывал тут: https://youtu.be/F7z_MHX3AtA
>>Тиамат<<
Это первая песочница, про клеточные автоматы. Начиналась на тему потыкать SwiftUI, и симуляция там была тупо как заглушка. Теперь это уже полноценная песочница для экспериментов с клеточными автоматами: редактор поля, правил и прочее.
На ней же отлаживали процессы в команде, делали эксперименты с яблочной инфрой и онбордили людей. Теперь просто ждет, когда я доделаю последнюю фичу про флотовые правила, но там вопрос исключительно в UX.
Попробовать можно тут: https://apps.apple.com/app/apple-store/id1580189385
Что такое клеточные автоматы рассказывал тут: https://youtu.be/F7z_MHX3AtA
🔥4❤2
Forwarded from Генканал
Media is too big
VIEW IN TELEGRAM
Lambdas, lambdas and more lambdas
Встреча прошла с участием Питера Пасмы — генеративного художника из Нидерландов, который рассказал о своем исследовании минимальных представлений алгоритмов, бинарном λ-исчислении и компрессии программ. Обсуждались как теоретические основы (λ-исчисление, Колмогоровская сложность), так и практические эксперименты: генерация SVG-графики с помощью сверхкоротких программ, оптимизация кода, автоматизация перестановки аргументов и поиск минимальных описаний.
⏱️ Таймкоды:
00:00 — Приветствие, запуск записи, знакомство
02:10 — Введение в λ-исчисление, базовые понятия
06:40 — Числа Чёрча, функции, каррирование
11:30 — Колмогоровская сложность и минимальное описание
15:00 — Бинарное λ-исчисление: идея, кодировка, мотивация
20:45 — Примеры кодирования чисел и функций
26:00 — Парсер и исполнение λ-выражений на JavaScript
32:40 — Преобразование в бинарный вид, оптимизация
38:30 — Генерация SVG-графики через минимальные программы
45:00 — Автоматизация оптимизации, перестановка аргументов
50:20 — Вопросы про эффективность и кодирование
54:00 — Практические ограничения, перспективы
58:30 — Заключение, вопросы слушателей, ресурсы
#meetup
Встреча прошла с участием Питера Пасмы — генеративного художника из Нидерландов, который рассказал о своем исследовании минимальных представлений алгоритмов, бинарном λ-исчислении и компрессии программ. Обсуждались как теоретические основы (λ-исчисление, Колмогоровская сложность), так и практические эксперименты: генерация SVG-графики с помощью сверхкоротких программ, оптимизация кода, автоматизация перестановки аргументов и поиск минимальных описаний.
⏱️ Таймкоды:
00:00 — Приветствие, запуск записи, знакомство
02:10 — Введение в λ-исчисление, базовые понятия
06:40 — Числа Чёрча, функции, каррирование
11:30 — Колмогоровская сложность и минимальное описание
15:00 — Бинарное λ-исчисление: идея, кодировка, мотивация
20:45 — Примеры кодирования чисел и функций
26:00 — Парсер и исполнение λ-выражений на JavaScript
32:40 — Преобразование в бинарный вид, оптимизация
38:30 — Генерация SVG-графики через минимальные программы
45:00 — Автоматизация оптимизации, перестановка аргументов
50:20 — Вопросы про эффективность и кодирование
54:00 — Практические ограничения, перспективы
58:30 — Заключение, вопросы слушателей, ресурсы
#meetup
👍1