← Lens

Пиво: газовые включения и слабая мутность

Это физически мотивированная модель переноса света с явно принятыми параметрами. Она не калибрована по конкретному пиву или самодельной линзе. Радиус пузырьков, их число, коэффициент и угловое распределение рассеяния нельзя восстановить из фотографии камеры или числа EBC.

Что изменилось

Для Beer луч теперь может многократно преломляться и отражаться на сферических границах газ/пиво, испытывать полное внутреннее отражение и рассеиваться в самой жидкости. Фотография задаёт падающий свет. Итог получается интегрированием этих путей по заднему отверстию линзы, в линейном RGB. Никакие круги поверх снимка, белая пелена или дополнительный Gaussian blur не накладываются.

Пузырьки внутри объектива обычно не выглядят как резко очерченные кружки на сцене: матрица интегрирует лучи через разные участки отверстия. Их действие — перераспределение света, локальное изменение аберраций и бликов, потери и рассеянные структуры. Эффект зависит от положения сферы относительно пучков, геометрии линзы и сцены.

Основная жидкость и включения

Сохранена модель основной жидкости: nD ≈ 1,340, спектральный ход по сдвинутой дисперсии воды; принятое поглощение светлого лагера 8 EBC. Цвет и рассеяние — разные параметры. Газ имеет n = 1: пренебрегаем небольшой разницей CO₂ и наружного воздуха. Радиусы выбираются равномерно в пределах ±25% от настройки. Сферы не пересекаются, остаются внутри передней поверхности, задней плоскости и бокового отверстия; запас не менее 0,02 мм. Если все запрошенные сферы не помещаются после ограниченного числа попыток, интерфейс показывает фактически размещённое число.

Для нормали N, направленной против падающего луча, используется закон Снеллиуса. Отражение Френеля вычисляется как среднее s- и p-компонент. При nпива ≈ 1,34 отражение на нормальном падении около ((1,34−1)/(1,34+1))² ≈ 2,11%. Критический угол из пива в газ asin(1/1,34) ≈ 48,27°; выше него луч отражается полностью. Поэтому пузырёк — сильное оптическое включение, хотя отражение в центре небольшое.

На внутренних границах выбирается отражение с вероятностью R, преломление с вероятностью 1−R. После такого выбора нельзя ещё раз умножать вес на R или 1−R — это дважды уменьшило бы энергию. Потери на начальном входе через заднюю плоскость учитываются детерминированно. Смена среды и нормали отслеживается после каждого события. Поляризация не сохраняется между событиями.

Мутность как перенос света

Используется уравнение переноса dL/ds = −(α+σs)L + σs∫p(ω,ω′)L(ω′)dω′. Здесь α — поглощение, σs — коэффициент рассеяния, p — нормированная фазовая функция. Путь до очередного события в жидкости выбирается как s = −ln(1−u)/σs. Граница, расположенная ближе, прерывает этот свободный пробег. В газе рассеяния и поглощения нет.

При σs = 0,010 мм⁻¹ средний свободный пробег равен 100 мм; для прямого пути 8 мм вероятность хотя бы одного рассеяния 1−exp(−0,010×8) ≈ 7,69%. Это исходная лёгкая мутность. Поглощение применяется отдельно: Tλ = exp(−αλ × Absorption × ℓжидкости). При таком способе выборки событий нельзя дополнительно применять exp(−σsℓ) к каждому уже выбранному пути — вероятность свободного пробега уже учтена.

Углы выбираются по Henyey–Greenstein: p(cosθ) = (1−g²) / [4π(1+g²−2g cosθ)^(3/2)], принято g = 0,85. Положительный g преимущественно сохраняет направление распространения. Коэффициент не зависит от RGB-канала; это приближение достаточно крупных рассеивающих включений, а не модель всех белково-полифенольных частиц или дрожжей. Ни σs, ни g не измерены в образце. EBC цвета не переводится в σs, NTU или другой показатель мутности.

Такую модель можно уточнить измеренными σs(λ), фазовыми функциями и распределением частиц. Для сферических частиц с известными размерами и комплексными показателями нужен расчёт Ми; для смеси размеров — интегрирование по этому распределению. Одной настройки «мутность» недостаточно для точного воспроизведения конкретного сорта пива.

Граничные условия и численный расчёт

Известен только передний угловой вид сцены, представленный исходной фотографией. Заднее окружение, боковой держатель и направления за пределами кадра считаются чёрными. Поэтому модель не придумывает свет от неизвестных ламп или комнаты вокруг камеры. Рассеяние может ослаблять контраст и переносить свет от ярких областей к тёмным, но не освещает полностью чёрную сцену.

Для Stout добавлена отдельная азотная микровзвесь с рассеянием Ми. Этот отчёт описывает прежнюю HG-компоненту и крупные сферы, не заменяющие микровзвесь.

Без азота каждый путь ограничен 32 событиями, с азотом — 128. Достигший лимита вклад отбрасывается, что создаёт отрицательное смещение; в указанных ниже конечных выборках таких путей не наблюдалось. Это не доказательство отсутствия смещения при любых seed и настройках. Нормали и пересечения определяются по реальным поверхностям. Для деформированной передней поверхности используется ограниченный поиск корня, а не предположение, что луч обязательно пересекает исходную сферу. Фокус по-прежнему считается для прозрачной основной жидкости.

Seed и координаты сфер сохраняются в JSON. Позиции фиксированы в течение экспозиции: это статичный снимок, без всплытия, слияния, деформации пузырьков и пены. Разный seed меняет расположение, а не добавляет анимацию.

В режиме Fit прозрачный предпросмотр: до 960 px, 128 лучей на канал. При включённых пузырьках или мутности в Fit: до 720 px, 256 лучей. При масштабе 100% и выше видимый участок пересчитывается в разрешении рабочей фотографии. Для финального файла рекомендуется 4096 лучей. Остаточная зернистость — ошибка Монте-Карло, не физическая зернистость камеры. Результат при разных количествах лучей сходится статистически; изображения разных качеств не обязаны совпадать попиксельно.

Проверки

33 CPU-тестов, включая нормировку HG и среднее cosθ = g; независимую критическую границу; статистику свободного пробега; отсутствие пересечений сфер; точную прозрачную ветку; конечность и пассивность путей. Центральный луч через пузырёк диаметром 2 мм в линзе толщиной 8 мм получает поглощение за 6 мм жидкости.

15 GPU-проверок: 216 прозрачных и 1968 объёмных путей, включая деформированные поверхности, рассеяние и полное внутреннее отражение. Максимальная разница CPU/GPU для объёмных путей: направление 4,73×10⁻⁵, длина в жидкости 0,000179 мм, вес 3,59×10⁻⁷; несовпадений валидности нет. Независимая проверка интеграла яркости на однородном источнике: ошибка 0/255. Чёрный источник остаётся чёрным; настройки пива не меняют масло и бензин попиксельно.

Независимое ревью дополнительно проверило 1,6 млн пересечений границ на крайних значениях геометрии: несовпадений с отдельным методом поиска нет, максимальная ошибка расстояния менее 0,000001 мм. Интеграция: 29 проверок приложения и 40 проверок мобильной компоновки на пяти размерах. Это численная и браузерная проверка, а не оптическая валидация по реальному стенду.

РежимПути к передней сценеСреднее рассеянийСреднее границ пузырьковЛимит событий
Пузырьки, без мутности57 987 / 65 53600,03730
Мутность, без пузырьков57 988 / 65 5360,074200
Исходные Beer57 330 / 65 5360,07490,03760
Сильный асимметричный вариант44 101 / 65 5360,36580,11830
546,1 нм; две позиции матрицы [0,0] и [9,6] мм, равномерное заднее отверстие. Передний выход ещё не гарантирует попадание в поле исходной фотографии. Здесь не применены поглощение и экспозиция. Сильный вариант: R30, t18, D30 мм, a0,12, 24 пузырька радиуса около 0,9 мм, σs0,025 мм⁻¹. Полные результаты: JSON; воспроизведение: node research/run-beer-experiments.mjs.

Где заканчивается точность

Пузырьки намного крупнее длины волны, поэтому геометрические преломление и отражение описываются лучами. Но даже крупный пузырёк имеет волновую дифракцию в очень узком переднем конусе: она здесь не рассчитана. Это не полная диаграмма Ми, не абсолютное предсказание сечения рассеяния и не расчёт дифракционного предела разрешения. Нельзя удваивать геометрическое затенение «для дифракции» без явной волновой модели.

Не восстановлены спектр и глубина сцены, неизвестное освещение вне кадра и оптика исходной камеры. Сохраняются три эффективные RGB-длины волны и приближённая mipmap-фильтрация. Оболочка линзы считается оптически пренебрежимой. Гидродинамика, пена, конвекция, изменение растворённого CO₂ и физический шум матрицы отсутствуют. Экспозиция и баланс цвета остаются пользовательскими фотографическими коррекциями.

Источники