Это SDF точек на кубической кривой Безье, взятых с равным шагом
С другой стороны, как видно на второй картинке, плотность тем выше, чем выше кривизна. То есть, в принципе, можно отрисовать кривую Безье кусочно линейной интерполяцией, использую равный шаг
t. Как видите, плотность точек неравномерная, то есть равный шаг между значениями параметра не гарантирует равного расстояния между результирующими точками.С другой стороны, как видно на второй картинке, плотность тем выше, чем выше кривизна. То есть, в принципе, можно отрисовать кривую Безье кусочно линейной интерполяцией, использую равный шаг
t без лишних заморочек.🔥3👀1
Прогаем с кенгурой
Это SDF точек на кубической кривой Безье, взятых с равным шагом t. Как видите, плотность точек неравномерная, то есть равный шаг между значениями параметра не гарантирует равного расстояния между результирующими точками. С другой стороны, как видно на второй…
bezier_experiment.klproj
3.2 KB
Вот исходник про sdf и безье в KodeLife
🔥2
Forwarded from Генканал (George)
This media is not supported in your browser
VIEW IN TELEGRAM
Интересная реализация глитча от @coding_with_kangaroo.
Если вы пилите что-то на Метале, то можете воспользоваться UB в Metal Shading Lnaguage (С++14) и получить натуральный глитч:
Вариант 1. Через безвозвратную функцию:
Вариант 2. Через неинициализированную переменную:
Есть еще один способ - взять мусор и записать его в выходную текстуру, но он не стабилен и может возврщать черный или мадженту - без спецэффектов.
Самые классные спецэффекты с глитчем на весь монитор (или два - сколько их у вас) можно получить, устроив stack overflow на видюхе (например в кернеле).
#glitch
Если вы пилите что-то на Метале, то можете воспользоваться UB в Metal Shading Lnaguage (С++14) и получить натуральный глитч:
Вариант 1. Через безвозвратную функцию:
float4 garbage() {
}
fragment float4 fshTextureQuad() {
return garbage();
}
Вариант 2. Через неинициализированную переменную:
fragment float4 fshTextureQuad() {
float4 garbage;
return garbage;
}
Есть еще один способ - взять мусор и записать его в выходную текстуру, но он не стабилен и может возврщать черный или мадженту - без спецэффектов.
let descriptor = MTLRenderPassDescriptor()
pass.colorAttachments[0].texture = someTexture
pass.colorAttachments[0].loadAction = .dontCare
if let encoder = commandBuffer.makeRenderCommandEncoder(descriptor: descriptor) {
encoder.endEncoding()
}
Самые классные спецэффекты с глитчем на весь монитор (или два - сколько их у вас) можно получить, устроив stack overflow на видюхе (например в кернеле).
#glitch
❤2
Генканал
Интересная реализация глитча от @coding_with_kangaroo. Если вы пилите что-то на Метале, то можете воспользоваться UB в Metal Shading Lnaguage (С++14) и получить натуральный глитч: Вариант 1. Через безвозвратную функцию: float4 garbage() { } fragment float4…
я про это уже писал, но тут - больше контекста добавил
This media is not supported in your browser
VIEW IN TELEGRAM
Выкатил артмод для физарума. Теперь можно сидеть залипать, а цвета и правила будут сами меняться.
Плюс теперь можно их независимо настраивать.
Плюс теперь можно их независимо настраивать.
👏5🔥3❤2
Кстати, если вам нравится шутка про "пришел с завода и сел играть в игру про завод", то у меня есть обзоров на пол сотни игр про программирование. Их на самом деле больше, конечно, но это - самые известные. Там и просто головоломки, и песочницы, и соревновательные. Кароч, если интересно, вот вам целый плейлист
https://youtube.com/playlist?list=PLr6F6DNKHE8ZH0eTxv0uwoQBefThFl6HA&si=Bl1npeinBLviEpN4
https://youtube.com/playlist?list=PLr6F6DNKHE8ZH0eTxv0uwoQBefThFl6HA&si=Bl1npeinBLviEpN4
👍6🔥3😱2
Media is too big
VIEW IN TELEGRAM
Итак, у меня есть песочницы под ios, одна из них доступна на мак через каталист. Другие две могли бы быть тоже, но там есть баг с
Если вы используете SwiftUI-ный ColorPicker под iOS, а потом запускаете это приложение под мак, то при попытке перетаскивания этого колорпикера у вас наглухо зависнет Dock маковский, а сам колорпикер останется на месте. Если же вы используете маковский колорпикер (то есть приложение нативное, а не в режиме совместимости), то все ок.
По этому поводу я завел яблокам баг репорт (FB16568682 (SwiftUI's ColorPicker locks macOS's UI in a catalyst app)). Учитывая, сколько они правят баги, скорее всего этот компонент устареет и его просто выбросят. Шутка конечно (нет) - у меня уже был случай, когда функционал устарел раньше, чем яблоки его поправили.
Но я все еще надеюсь, что они это таки поправят и я смогу выкатить тиамат и физарум под мак, чтобы залипать на большом экране.
ColorPicker-ом.Если вы используете SwiftUI-ный ColorPicker под iOS, а потом запускаете это приложение под мак, то при попытке перетаскивания этого колорпикера у вас наглухо зависнет Dock маковский, а сам колорпикер останется на месте. Если же вы используете маковский колорпикер (то есть приложение нативное, а не в режиме совместимости), то все ок.
По этому поводу я завел яблокам баг репорт (FB16568682 (SwiftUI's ColorPicker locks macOS's UI in a catalyst app)). Учитывая, сколько они правят баги, скорее всего этот компонент устареет и его просто выбросят. Шутка конечно (нет) - у меня уже был случай, когда функционал устарел раньше, чем яблоки его поправили.
Но я все еще надеюсь, что они это таки поправят и я смогу выкатить тиамат и физарум под мак, чтобы залипать на большом экране.
🫡6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
мне слишком нравится это видео, чтобы не запостить его
😁7
This media is not supported in your browser
VIEW IN TELEGRAM
Шикарный момент из лекции про Фурье образы на тему отношений сеньоров/лидов и джунов/мидлов
Я даже не поленился и нашел лекцию, откуда это: https://youtu.be/nukL-PkB1g0
Я даже не поленился и нашел лекцию, откуда это: https://youtu.be/nukL-PkB1g0
🔥4
OpenGL ES 3.0 Pipeline Map.pdf
701.4 KB
Если вы используете OpenGL, я очень рекомендую вот эти материалы - особенно схемы пайплайнов - для понимания, как, что и в каком порядке оно рисует. В свое время оно сэкономило мне кучу сил, нервов и времени.
👍9
Вспомнил классную легкую кроссплатформенную библиотеку/движок под плюсы.
Умеет базово в 2д, 3д, аудио + есть доп библиотеки под гую и прочее. Есть еще набор утилит, чтобы ресурсы паковать.
https://www.raylib.com
Умеет базово в 2д, 3д, аудио + есть доп библиотеки под гую и прочее. Есть еще набор утилит, чтобы ресурсы паковать.
https://www.raylib.com
raylib
raylib is a simple and easy-to-use library to enjoy videogames programming.
👍1
Нашел артефакт со старого проекта. Проект был очень давно, поэтому могу про него рассказать.
Заказчик хотел реализовать статью про перенос эмоций между видео. Для этого нужно было построить контролируемую 3д модель лица, которая бы очень точно рендерилась на оригинал.
Для этого построили модель из кучи параметров и собственный рендерер, из которого считали производную.
В модель входило:
- PCA для сетки лица
- блендшейпы для эмоций
- сферические гармоники для освещения
- матрица трансформов
- то ли текстура, то цвета вершин (не помню точно - помню только, что текстуру лица тоже снимали с исходного изображения по уже готовой сетке)
Вся эта гора параметров оптимизировалась с помощью еще большей горы производных от рендера по каждому из этих параметров.
Зубы рисовались отдельно с учетом блендшейпа рта.
Сейчас это относительно легко решилось бы нейронкой, но тогда такой роскоши не было.
PS: морда синяя, потому что BGR
Заказчик хотел реализовать статью про перенос эмоций между видео. Для этого нужно было построить контролируемую 3д модель лица, которая бы очень точно рендерилась на оригинал.
Для этого построили модель из кучи параметров и собственный рендерер, из которого считали производную.
В модель входило:
- PCA для сетки лица
- блендшейпы для эмоций
- сферические гармоники для освещения
- матрица трансформов
- то ли текстура, то цвета вершин (не помню точно - помню только, что текстуру лица тоже снимали с исходного изображения по уже готовой сетке)
Вся эта гора параметров оптимизировалась с помощью еще большей горы производных от рендера по каждому из этих параметров.
Зубы рисовались отдельно с учетом блендшейпа рта.
Сейчас это относительно легко решилось бы нейронкой, но тогда такой роскоши не было.
PS: морда синяя, потому что BGR
🔥5❤3
Если вдруг кому-то нужно делать TTS (text to speech) на яблочных девайсах, то у них есть
По дефолту, голоса у него максимально всратые, но можно скачать с качеством получше в
Качайте сразу premium - он уже не звучит как робот, хотя все еще проскакивают нотки синтетики. Но это плата за почти моментальный отклик.
Посмотреть доступные голоса можно в
AVSpeechSynthesizer, который поддерживает кучу разных голосов.По дефолту, голоса у него максимально всратые, но можно скачать с качеством получше в
Settings->Accessibility->Spoken Content->Voices.Качайте сразу premium - он уже не звучит как робот, хотя все еще проскакивают нотки синтетики. Но это плата за почти моментальный отклик.
Посмотреть доступные голоса можно в
AVSpeechSynthesisVoice.speechVoices()Еще наткнулся на Kokoro TTS. Хотя он не совместим с CoreML и MPS сразу из коробки и требует плясок с бубном, коих я еще не совершал, он работает довольно шустро локально на CPU и выдает очень красивый результат. Плюс имеет большой выбор голосов (и малый выбор языков).
Может кому пригодится.
Может кому пригодится.
This media is not supported in your browser
VIEW IN TELEGRAM
Зацените, какое правило нашел один из пользователей. Жуки-хромосомы)))
Bug.agent
178 B
Если кто хочет потыкать сам, вот это надо положить в
Работает оно лучше на высокой влажности.
Files->On my phone->Physarum->Agents и можно загрузить из песочницы. Работает оно лучше на высокой влажности.
https://www.youtube.com/watch?v=C6D8d5PQNaA
Сделал видос про алгорит WFC (wave function collapse) c примерами.
Алгорит сей можно применять для генерации уровней и карт для игр, артов, текстур и даже сюжетов - на что фантазии хватит.
Пример и его исходник
Сделал видос про алгорит WFC (wave function collapse) c примерами.
Алгорит сей можно применять для генерации уровней и карт для игр, артов, текстур и даже сюжетов - на что фантазии хватит.
Пример и его исходник
YouTube
Процедурная генерация уровней с помощью алгоритма коллапс волновой функции - объяснение с примером
Алгоритм коллапса волновой функции (Wave Function Collapse, WFC) — мощный инструмент для процедурной генерации, который широко используется в играх, симуляциях и генеративном дизайне. В этом видео я объясняю, как он работает, и показываю всё на наглядном…
👍2🔥2