Новое: Lens — сравнение масла, бензина и пива, источники и границы точности →

Что действительно делает масляная линза

Рабочая модель самодельной жидкостной линзы: преломление, дисперсия, поглощение и размытие вычисляются вместе по траекториям лучей. Это физически мотивированный эффект, пока без калибровки конкретного устройства.

Исследование и численные эксперименты: 21 октября 2026 года. Лабораторных измерений реального образца не проводилось. Прикреплённый скриншот показывает выпуклую ёмкость с окрашенной жидкостью, но не определяет её оптическую конструкцию однозначно.

Ревью исходной идеи

ПредположениеУточнение
Масло само по себе сильно размываетОднородная прозрачная жидкость не создаёт произвольного размытия. В такой линзе его прежде всего задают кривизна границ, размер отверстия, положение матрицы и аберрации.
Достаточно залить любой объективПлоский слой масла перед готовым объективом, заполнение промежутков внутри объектива и самостоятельная выпуклая жидкостная линза — разные оптические системы. Здесь моделируется последняя.
Показатель преломления даёт жёлтый оттенокДисперсия изменяет ход лучей разных длин волн. Окраску определяет спектральное пропускание: поглощение и, для мутных образцов, рассеяние. Это отдельные свойства.
Должны быть волны, дымка и радугаВ неподвижном однородном объёме волны не обязательны. Для дымки нужны рассеяние или паразитный свет. Радуга тонкой масляной плёнки — интерференционный эффект, который нельзя автоматически переносить на миллиметровый объём.
Вязкость определяет оптическую силуВязкость влияет на динамику формы и затухание колебаний. В статическом расчёте оптическую силу определяют показатели преломления и геометрия границ.

Зависимость жидкостной линзы от оболочки и гравитации изучается в Zhao, Ataman, Zappe, Applied Optics 55 (2016). Использованы доступные библиографические данные и аннотация; закрытый полный текст не был основанием для чисел модели. Отличие тонкоплёночной интерференции описано в OpenStax, University Physics.

Что можно узнать по скриншоту

Есть выпуклая передняя поверхность и окрашенный объём. Верхняя горизонтальная граница похожа на уровень жидкости с воздушным зазором. По одному ракурсу нельзя установить заднюю кривизну, толщину и материал оболочки, положение диафрагмы, расстояние до матрицы или наличие другой оптики. Цвет жидкости снаружи включает отражения комнаты и не является измерением её пропускания.

Поэтому стартовая геометрия — предположение: передняя сферическая поверхность радиуса 40 мм, задняя плоская, центральная толщина 8 мм, световой диаметр 20 мм. Лучи проходят через заполненную маслом область. Воздушный карман сверху не моделируется. Длинная сторона условной матрицы — 36 мм; её формат следует пропорциям фотографии.

Материал: измеренное и предполагаемое

Для преломления взята таблица NIST SRM 1922 — Liquid Refractive Index, Mineral Oil. Это эталонное парафиновое минеральное масло, не измерение моторного масла из ролика. При 20 °C: n(467,8 нм) = 1,47685; n(546,1 нм) = 1,47149; n(643,8 нм) = 1,46744. Для линии 589,3 нм n = 1,46945, dn/dT = −0,000368 /°C. Температурный диапазон сертификата: 15–35 °C.

Движок использует три реальные табличные длины волн как приближение RGB. Между табличными точками — линейная интерполяция, не новая сертифицированная дисперсионная формула. Вне измеренного диапазона интерфейс работать не предлагает. Регулятор «Дисперсия» при значении 1 соответствует этой таблице; остальные значения — исследовательское изменение материала.

Поглощение задано отдельно: αR,G,B = (0,018; 0,055; 0,160) мм⁻¹. Эти коэффициенты выбраны для правдоподобного янтарного вида, а не получены из NIST или измерений моторного масла. Регулятор окраски умножает все три. Через 8 мм такого материала проходят примерно 86,6%, 64,4% и 27,8% соответствующих каналов, до учёта отражений.

Различия масел и необходимость спектральных измерений обсуждаются в исследовании Energies 13 (2020), 3772. Формулу окраски конкретного образца из этой статьи мы не заимствуем.

Как строится изображение

Для каждого выходного пикселя движок выбирает точки на задней апертуре. Луч идёт от матрицы назад через плоскую границу и выпуклую поверхность. На каждой границе применяется закон Снеллиуса; невозможные пути и полное внутреннее отражение отбрасываются. Выходное направление указывает, откуда брать свет в исходном изображении.

n₁ sin θ₁ = n₂ sin θ₂
T(λ, ℓ) = exp[−α(λ) ℓ]

Iс(пиксель) ∝ (A / b²) · среднее по всем N лучам:
  Lс(направление) · τ₁с · τ₂с · exp(−αс ℓ) · cos⁴ θ

A — площадь заднего отверстия; b — расстояние до матрицы.
Для заблокированного луча вклад равен нулю.

Геометрическое взвешивание следует модели формирования изображения в PBRT, Realistic Cameras. Мы усредняем по всем выбранным лучам: нормировка только на прошедшие лучи ошибочно осветлила бы виньетирование. Отражение оценивается формулами Френеля. Поляризация после первого отражения не переносится на вторую границу — небольшое, но явное приближение.

Все суммы выполняются в линейном свете. Исходный sRGB декодируется до аппаратной интерполяции, результат кодируется обратно один раз. Входной JPEG уже содержит тоновую кривую, экспозицию и обработку исходной камеры: декодирование sRGB не восстанавливает исходную яркость сцены или утраченные блики.

Сферическая аберрация, кома, астигматизм, полевая зависимость резкости и цветовые расхождения возникают из тех же траекторий. Отдельный универсальный Gaussian blur не добавляется. Опциональная деформация задаёт поверхность z = R − √(R² − x² − y²) + axy/R. Это воспроизводимая геометрическая гипотеза, а не расчёт гидродинамики пакета.

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

Численные эксперименты

Все значения ниже относятся только к заданной линзе 40 / 8 / 20 мм при 20 °C. Это вычислительные эксперименты, не фотографии испытательного стенда. Формулы и сырые данные находятся в скрипте и results.json.

ПроверкаРезультатСмысл
Параксиальный задний фокус R / G / B80,121 / 79,401 / 78,467 ммФокус синего ближе к линзе. Разность R–B ≈ 1,654 мм.
Лучший геометрический фокус зелёного78,368 ммОтличается от параксиального из-за сферической аберрации.
Диаметр 6 / 10 / 20 / 30 мм, каждый раз перефокусировкаГеометрический RMS: 0,81 / 3,77 / 30,98 / 109,71 мкмКраевые лучи резко увеличивают пятно. Малые значения не учитывают дифракцию.
Поле 0° / 5° / 10° в общей плоскостиRMS: 0,031 / 0,084 / 0,308 ммОдин и тот же blur по всему кадру не соответствует этой линзе.
Температура 15 → 35 °CПараксиальный задний фокус зелёного: 79,076 → 80,391 ммПри фиксированной матрице появится дефокус; форма здесь принята неизменной.
Обратимость хода лучей8192 из 8192 возвратов; 0 пропусков; максимальная ошибка ≈ 1,4·10⁻¹⁴ ммПроверка согласованности прямой и обратной трассировки, не физическая точность в 10⁻¹⁴ мм.
Сходимость при 0,1 радRMS: 0,10651 мм при 1024 лучах; 0,10655 мм при 16384Один скалярный тест сходимости. Не гарантирует отсутствия шума на любых бликах.
Рассчитанные пятна трёх длин волн для поля 0, 5 и 10 градусов и зависимость от отверстия
Координаты получены трассировкой. Цвет точек обозначает длину волны, а не прогноз оттенка фотографии. Окна имеют одинаковый масштаб; части больших пятен могут выходить за рамку. Пятна показаны с геометрическими, а не фотометрическими весами.

При отверстии 6 мм геометрический RMS всего 0,81 мкм, но оценка первого нуля идеального диска Эйри — около 9,4 мкм. Эти две величины нельзя складывать как одинаковые радиусы или объявлять 0,81 мкм реальной разрешающей способностью. В текущем движке дифракции нет. На больших отверстиях для этой конструкции доминируют геометрические аберрации.

После независимого ревью исправлена область запуска наклонных лучей в эксперименте: диск на z = −1 мм расширен так, чтобы не отсекать допустимые лучи. Пропускание нормировано на площадь исходной апертуры. Экспериментальная обратимость теперь учитывает и явно проверяет число успешных возвратов. Обратный движок обработки изображения этой ошибкой области запуска затронут не был.

Проверка программы

11 автоматических тестов CPU проверяют закон Снеллиуса, полное внутреннее отражение, Френеля, табличную дисперсию, закон поглощения, независимый параксиальный предел, обратимость, сферическую аберрацию и преобразование sRGB. Браузерная проверка сопоставляет реальные WebGL2-вычисления с CPU в 54 случаях: максимальная разница компоненты направления 2,49·10⁻⁷, длины пути 4,18·10⁻⁶ мм, веса 3,26·10⁻⁷. Это численные расхождения двух реализаций выбранных уравнений.

Интегральная яркость однородного поля проверена при трёх отверстиях и двух значениях окраски: максимальная разница на проверенных пикселях — 0 из 255 в восьмибитном выводе. Чёрное поле остаётся чёрным. Проверена отмена на последнем пакете лучей. Подробности доступны на странице повторяемых GPU-тестов; результат зависит от доступности WebGL2 и float-буферов в браузере.

Шесть интеграционных проверок дополнительно проверяют конкуренцию декодирования файла и экспорта, блокировку сравнения, отмену отложенного PNG, единственное скачивание актуального результата и отсутствие горизонтального переполнения при ширине 1200 px. В этих тестах callbacks декодирования и скачивания контролируются; реальное сохранение также проверено отдельно: PNG 473 × 1024 из присланного изображения успешно открылся и прошёл проверку структуры файла.

Повторное ревью: фильтрация фото и мелкие блики

При повторной проверке обнаружен и исправлен алиасинг при уменьшении: прежний движок выбирал только центр выходного пикселя и билинейно фильтровал исходник без пирамиды масштабов. Это могло давать ложные узоры на мелких деталях. Теперь используется sRGB mip-пирамида с усреднением в линейном свете и явным уровнем по отношению размеров источника и вывода с учётом кадрирования. Это приближение площади пикселя; локальный якобиан нелинейного преломления и полный интеграл по пикселю пока не вычисляются.

Новый GPU-тест уменьшает однопиксельные чёрно-белые полосы 512 → 64 px. Среднее в оригинале — 188 sRGB (около 0,5 линейной яркости), а не 128 sRGB. В обработанной картинке максимум отклонения на девяти проверенных пикселях сократился с 5 до 1 уровня из 255. Прежние тесты однородного поля не могли обнаружить такую пространственную ошибку.

Дополнительный воспроизводимый стресс-тест с сырыми результатами отделяет интегрирование апертуры от уменьшения фотографии. Для аналитического гауссовского блика шириной σ = 1 пиксель источника, в сетке из 49 точек около поля (12, 8) мм, RMS-ошибка относительно 65536 лучей составляет около 69% пикового эталонного значения при 128 лучах, 8% при 1024 и 0,27% при 4096. Это требовательная искусственная мишень без mip-фильтрации, а не универсальная оценка ошибки на фотографиях и не метрика обновлённого GPU-вывода. Она показывает, почему для мелких ярких бликов стоит повышать качество экспорта.

Также исправлена повторная активация экспорта после потери графического контекста. Состояние ошибки теперь блокирует новые операции до перезагрузки. Интеграционные тесты проверяют это вместе с EN/RU, точным числовым вводом, справкой и сбросом настроек.

Границы точности

Что нужно для калибровки именно такого объектива

Нужны марка и состояние масла; размеры и профили обеих поверхностей; материал и толщина оболочки; положение отверстия и матрицы. Показатель преломления измеряется хотя бы на нескольких длинах волн. Пропускание — для известных толщин слоя: после поправки на границы можно оценить α(λ) = −ln T(λ) / ℓ.

Далее — снимки небольшой яркой точки на чёрном фоне в центре и по углам при фиксированном фокусе, белого равномерного поля, сетки и цветовой мишени. Полезно повторить измерения при разных отверстиях и наклонах камеры. Это позволит отделить геометрию, окраску, рассеяние и гравитационную деформацию. До таких данных добросовестный результат — семейство правдоподобных линз, а не точная копия устройства автора.