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
Итак, вторая песочница
>>Квантум<<
Здесь - про взаимодействие частиц. В интернете оно зовется Particle Life, но у меня немного другие функции - более физические (kmM/r^2). То есть это симуляция почти про задачу трех тел, только тел может быть до 10000.
Я НЕ использовал всякие специально для этого созданные подходы типа Барнеса-Хута. Во-первых, оно вполне себе отлично работает на современном железе и так, во-вторых, не придумал быстро, как затащить его на видюху, а долго думать - свободного времени нет. Может, когда-нибудь затащу и можно будет на пару порядков увеличить число частиц (правда там уже их рендеринг встрянет).
Попробовать можно тут: https://apps.apple.com/app/apple-store/id6504465371
Как это работает, рассказывал тут: https://youtu.be/IPrP0BLocW4 и https://youtu.be/sSzRzFtI2KQ
>>Квантум<<
Здесь - про взаимодействие частиц. В интернете оно зовется Particle Life, но у меня немного другие функции - более физические (kmM/r^2). То есть это симуляция почти про задачу трех тел, только тел может быть до 10000.
Я НЕ использовал всякие специально для этого созданные подходы типа Барнеса-Хута. Во-первых, оно вполне себе отлично работает на современном железе и так, во-вторых, не придумал быстро, как затащить его на видюху, а долго думать - свободного времени нет. Может, когда-нибудь затащу и можно будет на пару порядков увеличить число частиц (правда там уже их рендеринг встрянет).
Попробовать можно тут: https://apps.apple.com/app/apple-store/id6504465371
Как это работает, рассказывал тут: https://youtu.be/IPrP0BLocW4 и https://youtu.be/sSzRzFtI2KQ
App Store
Quantum - Particle Life
Experience the Hidden World of Particles
Immerse yourself in Quantum, a cutting-edge simulation environment capable of modeling up to 10,000 particles in real time. Dive into the mesmerizing complexities of natural phenomena—from crystallization and thermodynamics…
Immerse yourself in Quantum, a cutting-edge simulation environment capable of modeling up to 10,000 particles in real time. Dive into the mesmerizing complexities of natural phenomena—from crystallization and thermodynamics…
🔥2❤1
Прогаем с кенгурой
Итак, вторая песочница >>Квантум<< Здесь - про взаимодействие частиц. В интернете оно зовется Particle Life, но у меня немного другие функции - более физические (kmM/r^2). То есть это симуляция почти про задачу трех тел, только тел может быть до 10000. …
Немного про реализацию:
Сделано оно максимально тупо.
- Есть два буфера: с одного читаем, в другой пишем, потом меняем местами - пинг-понг то бишь
- На число частиц создаем тредов на видюхе
- В каждом треде считаем данную частицу относительно всех остальных
Да, по сути у нас O(n^2) довольно тяжелых вычислений. Альтернатива
1. Затащить Барнеса-Хута, но там надо считать дерево на видюхе, при этом в худшем и среднем случаях оно все равно будет как и раньше + собственно дерево.
2. Делать несколько проходов и, например, сохранять расстояния, чтобы не пересчитывать каждый раз. И оно могло бы выстрелить, если б не уперлось в работу с памятью, которая на нынешних видюхах медленнее, чем арифметика.
Еще момент: для симуляции высоких скоростей пришлось масштабировать время, иначе частицы тупо пролетают сквозь друг друга.
По рендеру все просто: тупо рисуем .point-ы нужного размера. Таким образом, теоретически нет ограничений на размер поля - только на максимальный размер пойнта (256).
Сделано оно максимально тупо.
- Есть два буфера: с одного читаем, в другой пишем, потом меняем местами - пинг-понг то бишь
- На число частиц создаем тредов на видюхе
- В каждом треде считаем данную частицу относительно всех остальных
Да, по сути у нас O(n^2) довольно тяжелых вычислений. Альтернатива
1. Затащить Барнеса-Хута, но там надо считать дерево на видюхе, при этом в худшем и среднем случаях оно все равно будет как и раньше + собственно дерево.
2. Делать несколько проходов и, например, сохранять расстояния, чтобы не пересчитывать каждый раз. И оно могло бы выстрелить, если б не уперлось в работу с памятью, которая на нынешних видюхах медленнее, чем арифметика.
Еще момент: для симуляции высоких скоростей пришлось масштабировать время, иначе частицы тупо пролетают сквозь друг друга.
Туннельный эффект - доказательство, что наш мир - симуляция?
По рендеру все просто: тупо рисуем .point-ы нужного размера. Таким образом, теоретически нет ограничений на размер поля - только на максимальный размер пойнта (256).
💯5
Прогаем с кенгурой
Итак, вторая песочница >>Квантум<< Здесь - про взаимодействие частиц. В интернете оно зовется Particle Life, но у меня немного другие функции - более физические (kmM/r^2). То есть это симуляция почти про задачу трех тел, только тел может быть до 10000. …
Media is too big
VIEW IN TELEGRAM
Чтобы не было скучно и сухо, вот как это выглядит
🔥6