Прогаем с кенгурой
Открыть в Telegram
Сидим с кенгурой под горой, запекаем текстуры... { программирование, процедурная генерация, графика, аудио, образование и немного про специфичные игры } https://gostrobrod.dev https://boosty.to/gostrobrod
Больше236
Подписчики
Нет данных24 часа
Нет данных7 дней
+130 дней
Архив постов
Интересный момент заметил - Телеграм подрезал видео по горизонтали.
Скорее всего ширина не кратна 16 и телега кропнула вниз, хотя это можно сделать иначе - физическую ширину сделать кратной 16, а логическую - оставить как есть, то есть не подрезать картинку, а расширить ее и виртуально кропнуть.
Но это уже совсем другая история.
Я хотел рассказать про реализацию простого поведения агентов в лабиринте, но вспомнил, что для этого сначала нужен лабиринт.
Итак, алгоритмы для генерации лабиринтов:
- рекурсивный с возвратом (но лучше делать через стек, чтобы рекурсия другой стек не съела)
- Прима
- Краскала
- Бинарное дерево
- Sidewinder (хз как на русском)
- Олдоса-Бродера
- Вильсона
Расписывать смысла не вижу смысла, когда есть код и визуальная демка.
Я на досуге периодически поглядываю в сторону процедурной музыки и хотя ничего годного еще не сделал, нашел кучу разных инструментов разного уровня сложности и доступности.
Разобьем на группы:
Пишем музыку нормальным кодомSuperCollider Это монструозный инструмент для обработки аудио и музыки от чувака, который потом еще CoreAudio яблокам пилил. SonicPi Тут все попроще и поприятнее - не надо глубоко погружаться в дебри - пишите себе спокойно музыку на Ruby. Сделан на SuperCollider AudioKit Ну и другие фреймворки - море их - под тот же питон и свифт.
Пишем музыку ненормальным кодомOrca
И другие эзотерические языки. Пишем поведение через странную нотацию на 2д поле. У меня так и не получилось его приконнектить к midi порту - придется пересобирать ручками.
Трекеры
Хотя изначально это больше альтернатива нотной записи, которую удобно на клавиатуре набирать, сейчас некоторые из них позволяют программировать поведение и переходы (например Renoise).
Нормальные нодыmiRack Бесплатный виртуальный модульный синтезатор. У вас есть генераторы, фильтры, модуляторы, сиквенсоры и прочее, из которых вы собираете свой синтезатор или сразу музыку делаете. PureData / PlugData Тоже собираем из отдельных элементов синтезатор, но тут уже ближе к коду и нужно вводить цифры, а не крутить ручки. Хотя ручки тоже можно сделать. Позволяют делать плагины для DAW-ов. Audulus 4 Тот же модульный синтезатор, но без претензии на реальную внешность - просто ноды. Сделан кстати на AudioKit-е.
Ненормальные нодыMidinous Это эзотерическая форма инструментов на графах. Вы ставите ноды: ноты, генераторы и тд - и соединяете их переходами. Длина перехода определяет длительность паузы между нотами. Senode Очень урезанный и почти бесполезный Midinous под ios. Если знаете что-то еще - накидывайте, интересно посмотреть.
У меня сейчас ппц какие загруженные недели, поэтому интересного буду мало постить, но чтобы вы не скучали, вот вам бесполезный факт:
Игра «Жизнь» Конвэя - полна по Тьюрингу. То есть гипотетически, вы можете на ней выполнять что угодно, в том числе моделировать моделирование самой игры жизнь, как тут: https://oimo.io/works/life/
Очевидно, что честно такое считать нереально, поэтому используется подход на основе следующих двух:
OTCA(Out The Context Advance)-метапиксели
пиксель, состоящий из пикселей-клеток игры жизнь (вы их можете видеть на симуляции по ссылке - готовый блок, который общается сразу с такими же блоками, а не всеми соседями по границе
HashLife
вставка готового предпосчитанного куска поля по текущему состоянию на определенный шаг вперед - то есть мы берем кусок поля, считаем его хэш и из таблицы берем состояние этого куска сразу на n поколений вперед.
Комбинируя эти два подхода мы можем эмулировать бесконечный зум как вверх, так и вниз, не привлекая санитаров не производя безумное число вычислений, что и видно на симуляции.
https://www.youtube.com/watch?v=C6D8d5PQNaA
Сделал видос про алгорит WFC (wave function collapse) c примерами.
Алгорит сей можно применять для генерации уровней и карт для игр, артов, текстур и даже сюжетов - на что фантазии хватит.
Пример и его исходник
Если кто хочет потыкать сам, вот это надо положить в
Files->On my phone->Physarum->Agents и можно загрузить из песочницы.
Работает оно лучше на высокой влажности.Еще наткнулся на Kokoro TTS. Хотя он не совместим с CoreML и MPS сразу из коробки и требует плясок с бубном, коих я еще не совершал, он работает довольно шустро локально на CPU и выдает очень красивый результат. Плюс имеет большой выбор голосов (и малый выбор языков).
Может кому пригодится.
Если вдруг кому-то нужно делать TTS (text to speech) на яблочных девайсах, то у них есть
AVSpeechSynthesizer, который поддерживает кучу разных голосов.
По дефолту, голоса у него максимально всратые, но можно скачать с качеством получше в Settings->Accessibility->Spoken Content->Voices.
Качайте сразу premium - он уже не звучит как робот, хотя все еще проскакивают нотки синтетики. Но это плата за почти моментальный отклик.
Посмотреть доступные голоса можно в AVSpeechSynthesisVoice.speechVoices()Нашел артефакт со старого проекта. Проект был очень давно, поэтому могу про него рассказать.
Заказчик хотел реализовать статью про перенос эмоций между видео. Для этого нужно было построить контролируемую 3д модель лица, которая бы очень точно рендерилась на оригинал.
Для этого построили модель из кучи параметров и собственный рендерер, из которого считали производную.
В модель входило:
- PCA для сетки лица
- блендшейпы для эмоций
- сферические гармоники для освещения
- матрица трансформов
- то ли текстура, то цвета вершин (не помню точно - помню только, что текстуру лица тоже снимали с исходного изображения по уже готовой сетке)
Вся эта гора параметров оптимизировалась с помощью еще большей горы производных от рендера по каждому из этих параметров.
Зубы рисовались отдельно с учетом блендшейпа рта.
Сейчас это относительно легко решилось бы нейронкой, но тогда такой роскоши не было.
PS: морда синяя, потому что BGR
Вспомнил классную легкую кроссплатформенную библиотеку/движок под плюсы.
Умеет базово в 2д, 3д, аудио + есть доп библиотеки под гую и прочее. Есть еще набор утилит, чтобы ресурсы паковать.
https://www.raylib.com
Если вы используете OpenGL, я очень рекомендую вот эти материалы - особенно схемы пайплайнов - для понимания, как, что и в каком порядке оно рисует. В свое время оно сэкономило мне кучу сил, нервов и времени.
Записал видео про симуляцию физарума
https://www.youtube.com/watch?v=mjcijiK8kFo
Шикарный момент из лекции про Фурье образы на тему отношений сеньоров/лидов и джунов/мидлов
Я даже не поленился и нашел лекцию, откуда это: https://youtu.be/nukL-PkB1g0
Итак, у меня есть песочницы под ios, одна из них доступна на мак через каталист. Другие две могли бы быть тоже, но там есть баг с
ColorPicker-ом.
Если вы используете SwiftUI-ный ColorPicker под iOS, а потом запускаете это приложение под мак, то при попытке перетаскивания этого колорпикера у вас наглухо зависнет Dock маковский, а сам колорпикер останется на месте. Если же вы используете маковский колорпикер (то есть приложение нативное, а не в режиме совместимости), то все ок.
По этому поводу я завел яблокам баг репорт (FB16568682 (SwiftUI's ColorPicker locks macOS's UI in a catalyst app)). Учитывая, сколько они правят баги, скорее всего этот компонент устареет и его просто выбросят. Шутка конечно (нет) - у меня уже был случай, когда функционал устарел раньше, чем яблоки его поправили.
Но я все еще надеюсь, что они это таки поправят и я смогу выкатить тиамат и физарум под мак, чтобы залипать на большом экране.Кстати, если вам нравится шутка про "пришел с завода и сел играть в игру про завод", то у меня есть обзоров на пол сотни игр про программирование. Их на самом деле больше, конечно, но это - самые известные. Там и просто головоломки, и песочницы, и соревновательные. Кароч, если интересно, вот вам целый плейлист
https://youtube.com/playlist?list=PLr6F6DNKHE8ZH0eTxv0uwoQBefThFl6HA&si=Bl1npeinBLviEpN4
Выкатил артмод для физарума. Теперь можно сидеть залипать, а цвета и правила будут сами меняться.
Плюс теперь можно их независимо настраивать.
