Прогаем с кенгурой
229 subscribers
188 photos
187 videos
17 files
155 links
Сидим с кенгурой под горой, запекаем текстуры...

{ программирование, процедурная генерация, графика, аудио, образование и немного про специфичные игры }

https://gostrobrod.dev
Download Telegram
я зачем-то заболел, потому посты пока на паузе
😢2🙏21
Media is too big
VIEW IN TELEGRAM
Псевдо-жидкость


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);
🔥6👍1
математически обоснованный костыль не является костылем
🔥3💘21😁1
Media is too big
VIEW IN TELEGRAM
Мягкость картинки
На аналоговой камере картинка получается достаточно мягкой - без резких границ (хотя это зависит от трубки)

Принцип
Из-за того, что у нас нет как таковых зерен/пикселей, а только уровень сигнала в момент времени + сканирующий луч имеет толщину и размытие, у нас будут подблюрены строки

Алгоритм
1. Правильный: блюрим строки по горизонтали (луч идет по строкам, соответственно и блюрится будет внутри строки в основном)
2. Простой: просто слегка подблюриваем гауссом весь кадр - эффект будет не такой классный, но мы потом попячим дополнимтельно
2👀2
Media is too big
VIEW IN TELEGRAM
Шум в тени
Во всех сенсорах, основанных на электрических процессах, присутствует шум на малоосвещенных участках картинки.

Принцип
Даже при отсутсвии засвета в системе протекают слабые токи, к которым добавлются тепловые флуктуации.

Алгоритм
Добавляем шум с коэффициентом (1-яркость), чтобы зашумить именно темные участки (светлые на самом деле тоже зашумляются, но не так заметно)
👍3
Media is too big
VIEW IN TELEGRAM
Bloom
Светлые области "засвечивают", растекаются на близлежащие темные.

Принцип
Из-за того, что луч имеет размер, он задевает яркие участки и засвечивает темные.

Алгоритм
Смешиваем картинку с блюренной по яркости блюренной (чем ярче, тем больше намешиваем. Есть два пути:
1. Правильный - по строкам
2. Простой - просто блюрим и мешаем
👍1
Media is too big
VIEW IN TELEGRAM
Шлейф
Светлые области оставляют шлейф/след на следующих кадрах

Принцип
Мишень не успевает восстановиться (разрядиться) и остаточный заряд переходит на следующий кадр, добавляя яркости

Алгоритм
Храним предыдущий кадр после смешения и по его яркости мешаем с ним текущий
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Затемнение на краях
На краях экрана (слева и справа яркость падает) (это не виньетка!)

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

Алгоритм
По гладкой кривой занижаем яркость по x, например:

float k = 1.0 - 5 * U.amount * pow(in.uv.x - 0.5, 4);
src.rgb *= k;
👍3
Media is too big
VIEW IN TELEGRAM
Нестабильность горизонтальной развёртки
Дрожание строк (смещение/гребенка и тд)

Принцип
Тут уже вопрос не только к самой трубке, но и к системе развертки/синхронизации. Из-за сбоя/реальности мира/плохой настройки строки не синхронизированы с лучом и строки съезжают

Алгоритм
Смещаем 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);
3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Цвета
Контраст (и насыщенность на цветном) немного понижены

Принцип
Видикон по своей физике — инерционный, нелинейный, малоконтрастный фотопроводник, а не мгновенный фотоэмиттер, в итоге получаем переходы смягчаются, но при этом срезаются крайние значения.

Алгоритм
Ну тут очевидно - слегка понижаем контраст и насыщенность. Если кто забыл как это делать:

// 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;
👍3
Как видите, тут два ключевых момента для корректной имитации:
1 - построение картинки идет по строкам
2 - система инертна, а значит и значения пикселей будут "инертны"
Пока писал, сам понял физику видикона🤠 зачем мне это - хз, но в универе зачем-то учили это все на телевидении и обработке видеосигналов
👍1
Вечно так:(
👀2
Поставил на мак - 20 лет не играл. Буду учить английский мат и ностальгировать.
😁3
Вот вам еще видео про аналоговые камеры, если буковы читать лень

https://www.youtube.com/watch?v=7VkpyzUZuXo
2👍2
Малыш хантсман
👀1
Вот так выглядит в зеленой зоне полярное сияние через камеру. Глазами - зеленовато-бордовое светлое небо с полосами.

Возможно, на юге острова в оранжевой зоне оно красивее. Надеюсь, однажды и у нас тут будет красота без туч
5🔥1