Suslik
> спекуляра и френеля — как бы не очень просто
Без спекуляра и френеля как бы вообще нереально найти. И я даже боюсь представить, как выглядел бы океан без спекуляра и френеля. Наверное это было бы как излучение Вавилова-Черенкова в реакторе (только инвертированное).
> но я считаю, что имеет важный вклад в восприятие и хочу разобраться
Вот мне кажется, что сначала надо разобраться имеет он важный вклад или нет. Мне кажется, что нет, хотя я допускаю, что это может быть не так.
Я сходил в гугл, и поискал фото океана.
Вот, вроде неплохой ракурс, а свечения нет, наоборот все темнее стало:
И кстати вполне понятно почему.
Вот вроде эффект, который ты описываешь:
Но все равно волна достаточно "тонкая", и в данном случае мы имеем просто эмбиент свет, проходящий волну насквозь.
Можно кстати просто влоб поинтегрировать множество точек (тупо замонтекарлить этот скаттеринг), и посмотреть на его вклад. И пусть это будет даже оффлайн рендер, суть чисто глянуть вклад. Если вклад будет минимальным, то может и нет смысла заморачиваться с аппроксимацией?
MrShoor
> Можно кстати просто влоб поинтегрировать множество точек (тупо замонтекарлить
> этот скаттеринг), и посмотреть на его вклад. И пусть это будет даже оффлайн
> рендер, суть чисто глянуть вклад. Если вклад будет минимальным, то может и нет
> смысла заморачиваться с аппроксимацией?
вот именно это я сейчас и сделал. по моей теории луч из камеры, который идёт ближе к поверхности (который, кстати, обычно меньше видно из-за френеля), должен "собирать" отражённые от солнца лучи с меньшей глубины, то есть которые должны быть ярче.
таким образом, я считаю, что на участках с гребнями лучи входят под воду почти перпендикулярно поверхности(из-за этого они не отражаются френелем), а идут под поверхностью почти параллельно ей, поэтому они получаются ярче. я замонтекарлил этот процесс и.. чёрт знает что получилось. у меня не получилось воспроизвести этот процесс даже в оффлайн. то ли баг в коде, то ли в моей гига-теории.
Suslik
> спекляр, отражения от поверхности — это отдельный разговор. тред не об этом.
Так именно мелкие спекулярные блики, невидимые по отдельности, дают часть того эффекта, о котором речь.
Suslik
> по моей теории луч из камеры, который идёт ближе к поверхности (который,
> кстати, обычно меньше видно из-за френеля), должен "собирать" отражённые от
> солнца лучи с меньшей глубины, то есть которые должны быть ярче.
Вроде верно. Рассмотрим плоскую воду. Положим у нас directional свет, который светит вертикально вниз.
Тогда количество света, дошедшего до точки на глубине z будет e^(-a*z), где a - коэффециент поглощения.
Мы смотрим вдоль view вектора, и количество света, поступающего из каждой точки будет e^(-a*t), где t - точка на луче. Видно, что z и t связаны как: z=dot(view, n)*t.
Следовательно количество света, поступающего к нам в глаз из заданного направления будет такой вот интегальчик (форум линки побил, так что копипасть):
https://www.wolframalpha.com/input/?i=int(e%5E(-a*t*(b%2B1)),+dt)
где b - это собственно константа dot(view, n)
Однако если попросить нарисовать вольфрам график этой функии, задав переменными наш dot и коэффициент "мутности" воды, то видим такую картину:
https://www.wolframalpha.com/input/?i=plot+y+%3D+-e%5E(-a*(b%2B1)*2)+%2F+(a*(b%2B1)),+a+from+0+to+1,+b+from+0+to+1
И вот на этом графике уже хорошо видно, что от dot (b параметр на графике) зависимость минимальная.
Так что твоя теория верная. Эффект просто слабый очень.
MrShoor
гмм... ещё есть такой важный эффект: в реальности вода бывает как в бассейне(в ней, можно считать, полностью поглощается только очень узкая часть спектра):
и вода как в мутной реке, в которой свет из-за множественных переотражений от частиц взвеси поглощается вне зависимости от спектра и поэтому приобретает диффузный цвет этих частиц:

в реальности же вода поглощает свет обоими способами одновременно. особенность в том, что первый способ сам по себе свет вообще не переотражает, поэтому эффекта из нульпоста не создаёт. второй способ, судя по всему, даёт эффект очень слабый. я думал, возможно, можно подогнать теорию, чтобы эти два способа взаимодействия со светом дали интересный эффект в итоге? если нет, то надо ещё искать околофизичные условия и модели, при которых можно получить похожий эффект. похожий на айвазовского, а не на мои потуги.
Suslik
> гмм... ещё есть такой важный эффект: в реальности вода бывает как в бассейне(в
> ней, можно считать, полностью поглощается только очень узкая часть спектра):
Хм... не совсем понял какой эффект в бассеине. На фото хорошо видна каустика, но каустика - это же не поглощение света. Где-то убыло, где-то прибыло. А еще немного видна дисперсия света. Но мне сложно увидеть то поглощение, о котором ты говоришь.
> от частиц взвеси поглощается вне зависимости от спектра и поэтому приобретает диффузный цвет этих частиц
А этот эффект мы вроде как и пытаемся симулировать, но вот копчиком чую, что эффект будет очень слабо зависеть от волн.
> при которых можно получить похожий эффект. похожий на айвазовского, а не на мои потуги.
Я вот не наблюдал эффект, как на картинах у Айвазовского в ракурсах с водой как у тебя. Может попробовать рефы поискать? Я когда смотрю на картины Айвазовского - у меня стойкое ощущение, что: 1. Источник света находится низко. 2. Источник света освещает волну с другой стороны и просвечивает её на сквозь. Если взять этот же эффект, и поместить на небольшие волны с ракурсом как у тебя - смотрется это будет весьма странно.
Короче я бы поискал в реале годный реф, чтобы понять вообще есть эффект или нет. В идеале получить ракурс близко к твоему игровому, и тупо сравнить с игрой.
MrShoor
> Хм... не совсем понял какой эффект в бассеине. На фото хорошо видна каустика,
> но каустика - это же не поглощение света. Где-то убыло, где-то прибыло. А еще
> немного видна дисперсия света. Но мне сложно увидеть то поглощение, о котором
> ты говоришь.
вода выглядит синей, но не мутной. потому что синий цвет практически не поглощается и в воде нет рассеивающей взвеси.
Suslik
> вода выглядит синей, но не мутной
А она не подкрашена? Это практикуется.
А она не подкрашена? Это практикуется.
Синева из-за плитки на дне бассейна и небо может давать синеву.
ronniko
> Синева из-за плитки на дне бассейна и небо может давать синеву.
Оба варианта не дадут зависимость от глубины.
Что насчёт воды из Unigine?
Mikle
> А она не подкрашена?
wiki
Так вот почему океан часто зеленоват, а не синий (из википедии):
Важный компонент, поглощающий свет в океанических водах — это хлорофилл, используемый фитопланктоном для производства углерода через фотосинтез. Из-за хлорофилла фитопланктон больше поглощает в красной и синей частях спектра и отражает в зелёные длины волн. Поэтому морские воды с районами высокой концентрацией фитопланктона будут иметь сине-зелёный и зелёный окрас, в зависимости от плотности популяции фитопланктона.
ENAleksey какой у вас маленький шейдер :))) От такого шейдера наверное и вода мокрая на ощупь.
Не тормозит ?
Про хлорофилла знаю.
Вот потому на втором рисунке на волне зеленый цвет, а вода с зади синего цвета.
https://gamedev.ru/code/forum/?id=241028&page=2#m15
Suslik
Немного некорректная терминология, поэтому решил вмешаться. По сути нет никакого duffuse а есть SSS. duffuse как раз моделирует процесс при котором свет, проникший в объект, после некоторого количества внутренних переотражений выходит наружу. Все популярные duffuse-BSDF предполагают, что свет выходит примерно в области падения (в пределах пикселя). Здесь https://schuttejoe.github.io/post/disneybsdf/ вроде бы производится попытка расширить BSDF, насколько это хорошо получилось, не скажу, так как не вчитывался.
Тема в архиве.