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

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

https://gostrobrod.dev
Download Telegram
Алгоритм

1. Как и с астигматизмом, сначала рассчитываем параметры радиально-тангенциального поля в точке (можно расширить функцию для астигаматизма
2. Для каждой точки свертки пересчитываем, куда она смещается


struct AstigCtx {
float2 e_r; // radial unit in uv metric
float2 e_t; // tangential unit (perp)
float s_r; // radial scale
float s_t; // tangential scale
float rhoN; // normalized field height (0 center .. 1 edge)
};

inline AstigCtx astigSetup(float2 uv, constant Parameters& P) {
AstigCtx C;

float ar = P.invSize.y / P.invSize.x; // width/height
float2 oc = P.opticalCenter;
float2 df = uv - oc;
float2 dfIso = float2(df.x * ar, df.y);
float rhoN = clamp(length(dfIso) * 2.0f, 0.0f, 1.0f);

float2 rIso = (length(dfIso) > 1e-6f) ? normalize(dfIso) : float2(1.0f, 0.0f);
float2 e_r = normalize(float2(rIso.x / ar, rIso.y));
float2 e_t = float2(-e_r.y, e_r.x);

float mag = fabs(P.astigK) * (rhoN * rhoN);
float a = 1.0f + mag;
float s_r = (P.astigK >= 0.0f) ? (1.0f / a) : a;
float s_t = (P.astigK >= 0.0f) ? a : (1.0f / a);

C.e_r = e_r;
C.e_t = e_t;
C.s_r = s_r;
C.s_t = s_t;
C.rhoN = rhoN;

return C;
}

inline float2 comaApply(float2 d, AstigCtx C, float comaK) {
if (fabs(comaK) < 1e-6f) return d;
// Project onto radial/tangential axes
float dr = dot(d, C.e_r);
float dt = dot(d, C.e_t);
// Magnitude grows ~ rho^3 across the field (third-order behavior)
float mag = comaK * (C.rhoN * C.rhoN * C.rhoN);
// Quadratic skew in pupil coordinates → "comet" shape in image PSF
float2 delta = ( (dr*dr - 0.5f*dt*dt) * C.e_r
+ (dr*dt) * C.e_t );
return d + mag * delta;
}
👍2
Вообще, как видите, сверточные эффекты тоже опираются на линейную оптику, но, если для идеального фокуса мы можем использовать исключительно пересчет координат, то для объектов вне фокуса необходимо применять свертку и тут все крутится вокруг ядра этой свертки (ее формы, центра и тд).
👍3
Тут в соседнем чате скинули статью про настроечные таблицы и я вспомнил, что давно когда-то пробовал их использовать для реверсинжинирига цветокоррекций и эффектов, но они справлялись не очень (не для того их делали), поэтому пришлось сделать свою.

Из минусов - тут нет разного сатурейшена по цветам, поэтому для некоторых эффектов она не подходила, но подходил слайс (y)UV.

PS: серое поле между шахматной доской и угловым градиентом - тоже шахматная доска 1х1. Зачем-то она тоже была нужна, как и все остальные поля - не помню уже точно (лет 10 назад это было)
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Полевая кривизна
При смещении от центра начинает усиливаться расфокус (на видео утрированно)
🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Принцип
Если плоскость изображения (сенсор) плоская, а поверхность наилучшего фокуса - сферическая (как глаз например), то дефокус будет увеличиваться с удаленем от центра

Алгоритм
Считаем радиус ядра свертки в зависимости от расстояния до центра и применяем его
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Продольная цветовая абберация
Изменение оттенка у объектов до и после плоскости фокуса

Пример не совсем корректный, но для корректного примера нам нужна картинка/видео с картой глубин - тут мы просто делаем имитацию
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Принцип
Из-за разного преломления лучей разной длины волны либо красные (недолет фокуса), либо синие (перелет) лучи будут вылетать из точки фокуса, что даст определнный оттенок.

Алгоритм
Считаем отдельные смещения для сэмплинга каждого канала. Потом собираем RGB
👍1
Яблоки релизнули иос26. Теперь телефон будет греться и садиться просто по факту своего существования 🤠
Сегодня в обед таких вот зверей наблюдал на отливе.

Я сейчас с работами разберусь и буду дальше про видео вещать
2👀1
This media is not supported in your browser
VIEW IN TELEGRAM
Сидел наблюдал за физарумом и нашел что он может объединяться вот в такие пузыри и ползать ими
🔥8
Media is too big
VIEW IN TELEGRAM
Сделал еще одну демку про оптику. На сей раз про проекцию через идеализированную физическую абстракцию объектива - pinhole.
👍53
Теперь надо как-то затащить вместо математической точки физическое отверстие (диафрагму), и будет иллюстрация, откуда берется глубина резкости
1
Media is too big
VIEW IN TELEGRAM
Вот теперь наглядно видно, как образуется глубина резкости:
- когда мы открываем диафрагму от каждой точки объекта приходит не один луч, а пучок под немного разными углами
- линзой мы ловим и фокусируем только пучки с определенного расстояния
- остальные накладываются друг на друга и размывают изображение

Причем, как видите, кусок объекта еще не фокусируется, а другой - уже
9
Пользователь нашел правило физарума, которое образует звездочки
4🤯2
Наткнулся на канал про музыку с шикарно оригинальной подачей материала
https://www.youtube.com/@synthet7
2
Джордан Мекнер (автор старого Принца Персии) написал статью, как портироровал игру между платформами 35 лет назад
https://www.jordanmechner.com/en/latest-news/#a-platform-jumping-prince
👍3