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

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

https://gostrobrod.dev
Download Telegram
Media is too big
VIEW IN TELEGRAM
Фреймрейт

На пленочных камерах/проекторах фреймрейт конечно может быть до 60, но чаще всего это стандартные 24, 18 (для любительской) и 16 для немого кино

Принцип
У нас есть время на экспозицию кадра пока обтюратортор крутится, картинка мутится, а грейфер тащит пленку. То есть время на один кадр достаточно велико.

Это вызвано ограничениями механики, прочности пленки ну и физикой/химией экспозиции картинки.

Алгоритм:
Два варианта:
1. Сохраняем копию кадра и отсчета и обновляем только когда время увеличилось больше чем на время кадра
2. То же самое, но кадры дополнительно накладываем друг на друга для эффекта смазанности

Если делать только 1, а видео изначально достаточно четкое, то результат будет выглядеть немного дерганно и стробоскопично. Такое тоже есть на пленочном кино и вызвано короткой выдержкой. То есть смазанность на низком фпс позволяет смазать не только картинку, но и фпс))))
2🔥1
Media is too big
VIEW IN TELEGRAM
Дрожание кадра

К счатью/сожалению мы живем не в идеальной математической абстракции, а в хаотичном физическом мире, а потому примитивная механика пленочной кинокамеры, как и сама пленка не идеальны. Это приводит к тому, что картинка может проецироваться не идеально в кадр, а с небольшими сдвигами. Причем по Y она будет дергаться сильнее, чем по X, так как движение пленки идет именно вдоль оси Y (так уж сложилось исторически).

Алгоритм
1. На CPU считаем случайный сдвиг по X и по Y от времени
2. На GPU в вертексном шейдере смещаем весь квад кадра на этот сдвиг
👍2🔥1
Прогаем с кенгурой
Фреймрейт На пленочных камерах/проекторах фреймрейт конечно может быть до 60, но чаще всего это стандартные 24, 18 (для любительской) и 16 для немого кино Принцип У нас есть время на экспозицию кадра пока обтюратортор крутится, картинка мутится, а грейфер…
⚠️ВАЖНО

После того, как вы понизили фпс, не забудьте передавать дальше новое - заторможенно - время, иначе у вас будет эффект не того, что фпс понизили в целом, а того, что показываете дерганные картинки на том же фреймрейте. Эффекты типа зерна (шума) и пятен должны быть одинаковы на одинаковом кадре.
1
Media is too big
VIEW IN TELEGRAM
Мерцание яркости

Я думаю, вы замечали, что яркость между кадрами на старых кинопленках может меняться от кадра к кадру.

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

Алгоритм
Рандомно поддергиваем вверх-вниз значение яркости.
2👀2👍1
Крышечки эвкалипта. Интересно, есть ли с другим числом секций
👍5🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Утечка света (Light Leak)

Как правило выглядит как засвет одной из половин пленки. На цветной пленке может иметь еще и цветной градиент - зависит от условий.

Принцип
Из-за щели в корпусе кассеты или камеры свет проникает внутрь и засвечивает кусок пленки.

Алгоритм
Можно делать как процедурно, так и просто наложить текстуру - зависит от задачи.
- процедурно можно менять засвет в зависимости от времени (например если пленка смоталась, то на нее уже падает меньше света, но на большую площадь и тд)
- текстурой можно сделать более дешево более сложные изображения
3
Я генерирую тут процедурно по вот этой функции https://www.desmos.com/calculator/v8m67hxwlw

float2 uv = in.uv * 2 - 1;
float2 leakSep = U.amount * U.pos * pow(3, -U.pos * (sign(U.pos) - uv)) * sin(3.14159 * uv);
src.rgb += leakSep.x + leakSep.y;
2
Media is too big
VIEW IN TELEGRAM
Тень от кадрового окна

Совсем забыл про нее - выглядит как достаточно четкая виньетка по самому краю кадра.

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

Алгоритм
В пассе про тряску (где у нас задействован только вертексный шейдер по сути) добавляем генерацию тени

float2 uv = -1. + 2. * in.uv;
float ratio = float(texture0.get_width()) / float(texture0.get_height());
uv.x *= ratio;
uv.x -= sign(uv.x) * fract(ratio);
float2 v2 = pow(abs(uv), 32 - 16 * U.vignette);
float v = U.vignette * (v2.x + v2.y);
src.rgb -= v;


Причем значение силы виньетки можно также потрясти от времени, чтобы имитировать разное прилегание пленки к окну.
2
Media is too big
VIEW IN TELEGRAM
Царапины

Вот эти вот продольные (вертикальные) белые полосы.

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

Если мы эту пленку переводим потом в позитив, то полосы будут не белые, а черные. А возможно и те, и те - смотря сколько у нас этапов поломанных - смотрите по обстоятельствам.

Алгоритм
Тут тоже можно либо процедурно, либо маской.

Процедурно я растягиваю перлина и подрезаю его:

float2 uv = in.uv;
uv.x *= 100;
uv.y *= 0.001;
float v = perlinNoise(float3(uv, U.time), 1, 8, 0.2, 200.0, 10);
float a = 1.0 - U.amount;
v = smoothstep(a-0.01, a, v);
src.rgb += v;
3
Media is too big
VIEW IN TELEGRAM
Пыль и грязь

Это вот эти черные (белые если есть перенос с негатива на позитив, или оба если все поломано) мелкие четкие пятна.

Принцип
Грязь может не только царапать, но и оставлять тень, если лежит прямо на пленке (или очень близко к ней) во время экспозиции.

Алгоритм
Тоже либо процедурно, либо маской.

Процедурно тоже перлином (или каким вам больше нравится) генерируем шум и подрезаем:

float2 uv = in.uv;
uv *= 10;
float v = perlinNoise(float3(uv, U.time), 6, 3, 0.0125, 0.0, 0);
float a = 1 - U.dust * 0.2;
v = smoothstep(a-0.1, a,v);
src.rgb -= v;
5
Итак, с камерой закончили - как видите, она добавляет живости и делает видео больше похожим на старые пленки (можете пролистать наверх и сравнить с постом про цветокор и ореол).

Дальше идет передача/хранение пленки (но там та же химия - цветокор) и проектор. Будем смотреть, что можно сломать на пленочном проекторе.
4
На выходных очередной эксперимент музыкальный сделал
😱3
Океан, берег и пеликаны
2🐳2😱1
Выцветание пленки

При хранении пленка выцветает. У чб меняется окрас и падает контраст, у цветной еще и цвета уходят.

Прнинцип
1. Со временем подложка окисляется и желтеет
2. Эмульсионный слой мутнеет и желтеет из-за разложения пластификаторов и желатина
3. У ЧБ пленки серебро может окисляться (что вызывает падение контраста) или превращаться в сульфиты (что дает желтоватый оттенок местами)
4. У цветной пленки выгорают красители (циан -> кадр желтеет, маджента -> уходят зеленый и синий, желтый помирает последним)

То есть как видим, в любом случае старая пленка стремиться к желтому.

Алгоритм:
Вариант 1 - физичный
Следуя принципу выше, переводим RGB в CMY, вычетаем сколько надо из циана, потом из мадженты, после чего переводим обратно в RGB и понижаем контраст.

Вариант 2 - художественный
Сначала понижаем насыщенность в зависимости от оттенка, но для всего. Потом переводим в наш любимый YUV и там понижаем конраст и делаем смещения баланса белого. Переводим обратно в RGB.
👍21