Алгоритм
1. Как и с астигматизмом, сначала рассчитываем параметры радиально-тангенциального поля в точке (можно расширить функцию для астигаматизма
2. Для каждой точки свертки пересчитываем, куда она смещается
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 назад это было)
Из минусов - тут нет разного сатурейшена по цветам, поэтому для некоторых эффектов она не подходила, но подходил слайс (y)UV.
PS: серое поле между шахматной доской и угловым градиентом - тоже шахматная доска 1х1. Зачем-то она тоже была нужна, как и все остальные поля - не помню уже точно (лет 10 назад это было)
🔥1
Прогаем с кенгурой
Тут в соседнем чате скинули статью про настроечные таблицы и я вспомнил, что давно когда-то пробовал их использовать для реверсинжинирига цветокоррекций и эффектов, но они справлялись не очень (не для того их делали), поэтому пришлось сделать свою. Из минусов…
надо будет на досуге сделать новую версию - исправленную и дополненную
❤2
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
Из-за разного преломления лучей разной длины волны либо красные (недолет фокуса), либо синие (перелет) лучи будут вылетать из точки фокуса, что даст определнный оттенок.
Алгоритм
Считаем отдельные смещения для сэмплинга каждого канала. Потом собираем RGB
👍1
Яблоки релизнули иос26. Теперь телефон будет греться и садиться просто по факту своего существования 🤠
This media is not supported in your browser
VIEW IN TELEGRAM
Сидел наблюдал за физарумом и нашел что он может объединяться вот в такие пузыри и ползать ими
🔥8
Media is too big
VIEW IN TELEGRAM
Сделал еще одну демку про оптику. На сей раз про проекцию через идеализированную физическую абстракцию объектива - pinhole.
👍5❤3
Теперь надо как-то затащить вместо математической точки физическое отверстие (диафрагму), и будет иллюстрация, откуда берется глубина резкости
❤1
Media is too big
VIEW IN TELEGRAM
Вот теперь наглядно видно, как образуется глубина резкости:
- когда мы открываем диафрагму от каждой точки объекта приходит не один луч, а пучок под немного разными углами
- линзой мы ловим и фокусируем только пучки с определенного расстояния
- остальные накладываются друг на друга и размывают изображение
Причем, как видите, кусок объекта еще не фокусируется, а другой - уже
- когда мы открываем диафрагму от каждой точки объекта приходит не один луч, а пучок под немного разными углами
- линзой мы ловим и фокусируем только пучки с определенного расстояния
- остальные накладываются друг на друга и размывают изображение
Причем, как видите, кусок объекта еще не фокусируется, а другой - уже
❤9
Наткнулся на канал про музыку с шикарно оригинальной подачей материала
https://www.youtube.com/@synthet7
https://www.youtube.com/@synthet7
❤2
Джордан Мекнер (автор старого Принца Персии) написал статью, как портироровал игру между платформами 35 лет назад
https://www.jordanmechner.com/en/latest-news/#a-platform-jumping-prince
https://www.jordanmechner.com/en/latest-news/#a-platform-jumping-prince
Jordanmechner
Jordan Mechner - Latest News
Blog posts and articles by author and game developer Jordan Mechner
👍3