Прогаем с кенгурой
前往频道在 Telegram
Сидим с кенгурой под горой, запекаем текстуры... { программирование, процедурная генерация, графика, аудио, образование и немного про специфичные игры } https://gostrobrod.dev https://boosty.to/gostrobrod
显示更多236
订阅者
无数据24 小时
无数据7 天
+130 天
帖子存档
стащил слайд из какого-то доклада с какой-то демосценовской конфы (это все детали, которые я помню относительно этого слайда🤠, но идеи очень годные)
Upd:
Вообще, даже если вам не интересна демосцена как таковая, советую заглядывать туда за интересными решениями, алгоритмами и вдохновением
Надо бы в будущих версиях сделать плавный переход между амебками при смене параметров.
Придется правда затаскивать вьюмодель для вьюхи - сейчас оно обходится без нее - контроль параметров осуществляется ее парентом, а она только рисует и ловит тачи, если попросили.
Не идеально, да, но для первой версии сгодится. Времени было одни выходные на собрать новую песочницу.
Рандомно генерить амебок (визуализация параметров симуляции) вышло залипательнее, чем сама симуляция 🤠
На той неделе встретился с таким замечательным глитчем, который пердолит видеопамять, может наглухо повесить систему и отправить ее в ребут.
Случилось это на симуляторе. Обычно такое происходит, когда лезешь в памяти туда, куда не надо. Но я два часа потратил на проверки, и спамятью все было ок. Потом решил запустить на девайсе, так как с него больше полезного выпадает, и там нашел в логах, что беда не в памяти, а в переполнении стека.
То есть вот этот вызов одного ранда в другом все сломал.
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, это не поможет, потому что это рекомендация.
В итоге пришлось сделать не красиво, но рабоче - с дублированием кода. Зато спецэффекты красивые - давно таких не встречалНа следующих выходных запилю видос, как собрать амебку из примитивов и заанимировать ее базово. Ну или про физарум, если успею его релизнуть.
Пилю сейчас очередную песочницу про физарум. Сделал для нее контрол с амебкой (есть несколько запросов на улучшение - так что это не конечный вариант).
Контрол на SwiftUI + Metal (.colorEffect). Все рисуется шейдером с помощью SDF.
Затемнение на краях
На краях экрана (слева и справа яркость падает) (это не виньетка!)
Принцип
Из-за большего отклонения на краях строки луч обладает меньшей энергией из-за более длинной траектории и расфокусировки. Как результат, ток падает и визуально края кажутся темнее.
Алгоритм
По гладкой кривой занижаем яркость по
x, например:
float k = 1.0 - 5 * U.amount * pow(in.uv.x - 0.5, 4);
src.rgb *= k;Вот тут я рассказываю, что такое SDF и как это работает:
https://youtu.be/ikr0hfaez18
Bloom
Светлые области "засвечивают" растекаются на близлежащие темные.
Принцип
Из-за того, что луч имеет размер, он задевает яркие участки и засвечивает темные.
Алгоритм
Смешиваем картинку с блюренной по яркости блюренной (чем ярче, тем больше намешиваем. Есть два пути:
1. Правильный - по строкам
2. Простой - просто блюрим и мешаем
