Рассмотрим картины:

Опуская их художественную ценность, в глаза бросается любимый художником физический эффект — пики волн выглядят ярче, чем подножья. Меня интересует конкретный физический процесс, благодаря которому подобное может происходить в жизни. Какая минимальная модель поглощения и рассеивания света в среде описывает этот процесс?
Сразу опустим рассуждения об образовании пены и микропузырьков — этот эффект прекрасно воспроизводится и в более спокойных волнах, поэтому должен объясняться преломлением, поглощением и подповерхностным рассеиванием.
Я пробовал оптическую модель, где свет распространяется по закону:
\(I = \int_0^{+\infty} L(\vec p_0+\vec dl) e^{-\alpha l} (c + (1-c)e^{-\beta l})dl\), где \(L(\cdot)\) — функция плотности переиздучаемого света в зависимости от координаты, \(\alpha\) — коэф.поглощения, \(\beta\) — коэф.мультипликативного поглощения (для немного фейкового моделирования прозрачной, но имеющей цвет воды вроде цветного стекла). функция \(L(\cdot)\) рассчитывается по аналогичной формуле, только интегрирование ведётся от источника света. То ли я коэффициенты подбираю совсем неверно, то ли что, но подобного эффекта совершенно не наблюдается. какой важный физический эффект я упускаю?
Suslik
> этот эффект прекрасно воспроизводится и в более спокойных волнах, поэтому
> должен объясняться преломлением
Эм... а можно фоторефы, потому что я не совсем например понимаю, о чем ты говоришь.
Вроде же это классический subsurface scattering
MrShoor
> Вроде же это классический subsurface scattering
"классический subsurface scattering" в реалтайме считать вообще нельзя, потому что количество переотражений растёт экспоненциально с каждым внутренним переотражением, которых тоже бесконечно много — короче, содомия. поэтому в реалтайме используются только его дешёвые аппроксимации. давай ссылку на аппроксимацию, которая, как ты считаешь, опишет этот эффект.
единственное фото этого эффекта, которое мне удалось найти:

Suslik
> давай ссылку на аппроксимацию, которая, как ты считаешь, опишет этот эффект.
http://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch16.html
MrShoor
это как бы три самых базовых метода, которые к этой задаче практически не относятся. первый не подходит, потому что диффузного цвета как бы вообще нету, второй не подходит, потому что буфер глубины в первом приближении -- везде бесконечность, третья аппроксимация — для сильно диффузных материалов, которым вода не является.
ещё поясню. вопрос не в том, как сделать картинку с эффектом, похожим на этот. на том же шейдертое куча примеров с похожим эффектом, у нвидии есть похожая демка, юнитиассеты всякие. и всех их объединяет одно: абсолютная нефизичность, в результате чего при изменении внешних условий они выглядят как г.
я же хочу понять, какой минимальный набор физических эффектов отвечает за это явление в реальности, чтобы, возможно, смоделировать его более конкретно и устойчиво.
Suslik
> это как бы три самых базовых метода, которые к этой задаче практически не относятся.
Как скажешь, но я бы лично воспользовался техникой с буфером глубины от камеры. Практически уверен, что этот бы метод дал отменный результат, конечно если у вас вода имеет геометрию.
> потому что буфер глубины в первом приближении -- везде бесконечность
Почему бесконечность? У вас вода не имеет геометрии? Если она не имеет геометрии, то можно трейсить как при parallax mapping-е, чтобы получить ту самую s, что описана в статье.
> я же хочу понять, какой минимальный набор физических эффектов отвечает за это
> явление в реальности
Опять не понятно, тебе шашечки или ехать. Эффект, который отвечает за это в реальном мире - subsurface scattering, или BSDF (или ты не согласен?). Сам ты понимаешь, что это добро нормально не проинтегрировать. Для сильно прозрачных поверхностей поидее будет хорошо заходить аппроксимация через длину пути света внутри объекта. Это можно реализовать через ту технику с картами глубин, либо любым другим способом, позволяющим получить этот самый пройденный путь светом.
Конкретно на картинах, очень похоже что песок поднятый со дна штормом отражает свет, создавая эффект отмели.
особенность в том, что таких ракурсов, как на картине, на воду у нас нет. поэтому ситуации, когда свет проходит от источника через воду и в камеру, попросту нет. поэтому и буфер глубины для SSS особо не поможет. однако, можно построить что-то вроде cavity map и использовать его для оценки локальной кривизны поверхности. например, вот так я сделал сейчас:
(цвета для наглядности взял примерно как на рефе в предыдущем посте)
однако, если немного перекрутить параметры, то результат быстро выходит из-под контроля и выглядит как попало:
мне бы хотелось, чтобы результат был более устойчив к человеческому фактору. самый простой способ этого добиться — основываться на физике, а не на человеческой интуиции.
> Почему бесконечность? У вас вода не имеет геометрии? Если она не имеет геометрии, то можно трейсить как при parallax mapping-е, чтобы получить ту самую s, что описана в статье.
представь, что мы смотрим на бесконечно глубокую часть океана. будет там 10км или 10км + 0.5м, для SSS разницы вообще никакой нет. в таком случае всё рассеивание должно происходить в верхних слоях. высота волн несравнимо меньше глубины океана, хотя должна иметь существенный вклад в SSS.
Suslik
> особенность в том, что таких ракурсов, как на картине, на воду у нас нет.
Глядя на вашу воду - я сомневаюсь, что в реальности при таком ракурсе этот эффект будет сколь либо заметен.
> поэтому ситуации, когда свет проходит от источника через воду и в камеру, попросту нет
А у Айвазовского именно что через воду и в камеру ракурс. Поэтому эффект такой сильный.
> представь, что мы смотрим на бесконечно глубокую часть океана. будет там 10км
> или 10км + 0.5м, для SSS разницы вообще никакой нет. в таком случае всё
> рассеивание должно происходить в верхних слоях.
Такое рассеивание, как ты описал - это посути константа в какую бы точку воды ты не смотрел. Небольшой барашек на сильно прозрачной поверхности не должен вносить какой либо существенный вклад (он безусловно будет, но будет ничтожно маленьким). Поэтому даже первый твой скриншот, где ты по cavity map подогнал свечение выглядит не естественным.
Кстати, сейчас из-за скатерринга не могу разобрать, но есть такое ощущение, что при рендере "цвета воды" (и дна, которое видно сквозь воду) не учитывается dot(view, normal) к поверхности. Это так?
MrShoor
> Глядя на вашу воду - я сомневаюсь, что в реальности при таком ракурсе этот
> эффект будет сколь либо заметен.
да бывает такой эффект, ещё как:
это не translucency (который определяется картой глубины), а именно subsurface scattering, в котором свет, переотражаясь, выходит с той же поверхности, откуда упал:

Suslik
Я интегралы не решал уже лет 25... можно без них?
Ты учёл, что, чем сильнее искажена поверхность воды, тем выше вероятность того, что пришедший луч света излучится обратно в воздух, а не уйдёт навсегда в глубину?
Плюс ещё эффект - каждая капля водяных брызг содержит спекуляр отражение Солнца, более гладкая поверхность воды тоже их содержит, и суммарная яркость этих отражений на единицу отражающей поверхности та же, но тут играет роль направление - большая часть света отражается солнечной дорожкой.
И третий эффект - спекулярные блики в тысячи-миллионы раз ярче диффузного и прочего рассеянного света, даже при равной общей средней светимости поверхности и брызг, на брызгах отражений больше, но они мельче, их размер меньше разрешающей возможности глаза, а глаз ограничивает видимую яркость, то есть сильнее ослабляются те отражения, которые более крупные. Этот эффект хорошо известен в астрономии, когда далёкая галактика кажется ярче отдельной звезды той же звёздной величины.
Suslik
> да бывает такой эффект, ещё как:
Первое и второе фото - чисто на коэффициентах френеля. Нормаль на поверхности волны смотрит на нас, и следовательно меньше света приходит от неба.
Третье фото - сабсерфейс скаттеринг, но волна уже настолько высокая, что свет от неба "прошивает" её насквозь. Тот самый эффект, что я описал.
> это не translucency (который определяется картой глубины), а именно subsurface
> scattering, в котором свет, переотражаясь, выходит с той же поверхности, откуда
> упал:
Я все таки с тобой не согласен. Я понимаю, про какой эффект ты говоришь, но считаю этот эффект слабо зависимым от формы волн. Поэтому считаю, что волнами можно в этом случае пренебречь.
Mikle
> Ты учёл, что, чем сильнее искажена поверхность воды, тем выше вероятность того,
> что пришедший луч света излучится обратно в воздух, а не уйдёт навсегда в
> глубину?
на рефах оптические пути(не учитывая рассеяния) вообще обратно в атмосферу не возвращаются. могут прийти только после рассеяния. как эффективнее всего описать эти лучи — в этом и состоит вопрос
Mikle
> спекулярные блики
спекляр, отражения от поверхности — это отдельный разговор. тред не об этом.
MrShoor
> Первое и второе фото - чисто на коэффициентах френеля
извини, конечно, но найти фото океана в солнечный день без брызг, пены, спекуляра и френеля — как бы не очень просто. а из того, что френель имеет больший вклад, чем всё остальное, не значит, что других процессов не происходит или что ими всеми можно пренебречь. этот эффект и не должен быть in your face, он достаточно тонкий, но я считаю, что имеет важный вклад в восприятие и хочу разобраться, как его получить.
Тема в архиве.