ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅 👈

Прогаем с кенгурой

Прогаем с кенгурой

前往频道在 Telegram

Сидим с кенгурой под горой, запекаем текстуры... { программирование, процедурная генерация, графика, аудио, образование и немного про специфичные игры } https://gostrobrod.dev https://boosty.to/gostrobrod

显示更多
236
订阅者
无数据24 小时
无数据7 天
+130 天
帖子存档
Поставил на мак - 20 лет не играл. Буду учить английский мат и ностальгировать.
Поставил на мак - 20 лет не играл. Буду учить английский мат и ностальгировать.

Вечно так:(
+1
Вечно так:(

Пока писал, сам понял физику видикона🤠 зачем мне это - хз, но в универе зачем-то учили это все на телевидении и обработке видеосигналов

Как видите, тут два ключевых момента для корректной имитации: 1 - построение картинки идет по строкам 2 - система инертна, а значит и значения пикселей будут "инертны"

Цвета Контраст (и насыщенность на цветном) немного понижены Принцип Видикон по своей физике — инерционный, нелинейный, малоконтрастный фотопроводник, а не мгновенный фотоэмиттер, в итоге получаем переходы смягчаются, но при этом срезаются крайние значения. Алгоритм Ну тут очевидно - слегка понижаем контраст и насыщенность. Если кто забыл как это делать:

// Saturation
float l = rgb2yuv(src.rgb).x;
src.rgb += (src.rgb - l) * U.saturation;
// Contrast
src.rgb = exp(U.contrast) * (src.rgb - 0.5) + 0.5;

Нестабильность горизонтальной развёртки Дрожание строк (смещение/гребенка и тд) Принцип Тут уже вопрос не только к самой трубке, но и к системе развертки/синхронизации. Из-за сбоя/реальности мира/плохой настройки строки не синхронизированы с лучом и строки съезжают Алгоритм Смещаем x по y и чему еще хотите перед чтением с текстуры. Я вот такого например наворотил:

uv.x += 0.01 * U.amplitude * (sin(U.frequency * uv.y * U.height + U.time) + rand(float2(uv.y, fract(U.time))) * 2 - 1);

Затемнение на краях На краях экрана (слева и справа яркость падает) (это не виньетка!) Принцип Из-за большего отклонения на краях строки луч обладает меньшей энергией из-за более длинной траектории и расфокусировки. Как результат, ток падает и визуально края кажутся темнее. Алгоритм По гладкой кривой занижаем яркость по x, например:

float k = 1.0 - 5 * U.amount * pow(in.uv.x - 0.5, 4);
src.rgb *= k;

Шлейф Светлые области оставляют шлейф/след на следующих кадрах Принцип Мишень не успевает восстановиться (разрядиться) и остаточный заряд переходит на следующий кадр, добавляя яркости Алгоритм Храним предыдущий кадр после смешения и по его яркости мешаем с ним текущий

Bloom Светлые области "засвечивают", растекаются на близлежащие темные. Принцип Из-за того, что луч имеет размер, он задевает яркие участки и засвечивает темные. Алгоритм Смешиваем картинку с блюренной по яркости блюренной (чем ярче, тем больше намешиваем. Есть два пути: 1. Правильный - по строкам 2. Простой - просто блюрим и мешаем

Шум в тени Во всех сенсорах, основанных на электрических процессах, присутствует шум на малоосвещенных участках картинки. Принцип Даже при отсутсвии засвета в системе протекают слабые токи, к которым добавлются тепловые флуктуации. Алгоритм Добавляем шум с коэффициентом (1-яркость), чтобы зашумить именно темные участки (светлые на самом деле тоже зашумляются, но не так заметно)

Мягкость картинки На аналоговой камере картинка получается достаточно мягкой - без резких границ (хотя это зависит от трубки) Принцип Из-за того, что у нас нет как таковых зерен/пикселей, а только уровень сигнала в момент времени + сканирующий луч имеет толщину и размытие, у нас будут подблюрены строки Алгоритм 1. Правильный: блюрим строки по горизонтали (луч идет по строкам, соответственно и блюрится будет внутри строки в основном) 2. Простой: просто слегка подблюриваем гауссом весь кадр - эффект будет не такой классный, но мы потом попячим дополнимтельно

Мне полегчало и я накидал эффектов по трубкам

математически обоснованный костыль не является костылем

Псевдо-жидкость

    float2 uv = -1. + 2. * In.v_texcoord;
    for(int i = 0; i < 10; ++i) {
        uv.y += sin(uv.x * i * 4 + 6 * sin(0.3 * U.time)) * 0.01 * i;
        uv.x += sin(uv.y * i * 3 + 8 * cos(0.1 * U.time)) * 0.01 * i;
    }
    uv = uv * 0.5 + 0.5;
    float4 a = mix(float4(1,0,0,1), float4(1,1,0,1), uv.x);
    float4 b = mix(float4(0,0,1,1), float4(0,1,0,1), uv.x);
    float4 c = mix(a, b, uv.y);
    return pow(c,0.75);

но если вам нечего делать, можете посмотреть как мы егэ по информатике смотрели https://youtu.be/Vtgy6b2S1rQ?si=8QCPSkQ-lE4K1onx

я зачем-то заболел, потому посты пока на паузе

Так, и видос держите: https://youtu.be/J6t79BEIa9o гештальт закрыт - можно возвращаться к видеоэффектам

Обернул модель вот этого безобразия в дезмос https://www.desmos.com/calculator/foeis5maji

Зачем-то решил в ходе прокрастинации смоделировать звук инструмента по его геометрии. Так как есть куча параметров кроме геом
Зачем-то решил в ходе прокрастинации смоделировать звук инструмента по его геометрии. Так как есть куча параметров кроме геометрии, а физический мир на практике чуть сложнее трех формул из теории для разных видов вибраторов, пришлось эту кучу параметров подбирать торчом. Результат синтеза все равно - говно. Завтра (уже 2 часа как сегодня) буду искать пакеты для физического моделирования акустических систем.

Так, еще одна статья про базовую диагностику Метала в Хкоде https://gostrobrod.medium.com/mtl-s02e02-basic-diagnostics-of-metal-in-xcode-a1b9d92875b6