Войти
ПрограммированиеФорумГрафика

Физически корректное преломление в воде (5 стр)

Страницы: 14 5 6 710 Следующая »
#60
(Правка: 2:46) 2:44, 18 сен. 2019

Suslik
> ещё раз тебе повторяю, это — совершенно независимые процессы, которые никак
> друг на друга не влияют.
Так ещё раз уточню. Я говорю об отражении на пиках волн.
Я 4 страницу доказываю что в реальности не вижу зависимости отражения от преломления, а в игре эта зависимость есть. Вот формула лерпа.
x = lerp(refract, reflect, fresnel);
x = refract * (1-fresnel) + reflect * fresnel;
x - reflect * fresnel = refract * (1 - fresnel);
И по этой формуле преломление(которое включает в себя и рассеяние/свечение) не обратно-пропорционально отражению разве?

Suslik
> кстати, твоя "чернота" никак не зависит от того, будет у тебя одно
> переотражение или бесконечность.
Ты про черноту на пиках волн? Тогда от чего она зависит и от чего появляется по твоему мнению?

Suslik
> он пишет то же самое, как ты читаешь?
Он ответил прямо. Если отражение чернющее, то и пик волны будет чернющий. В реальной воде. 
Но ты ответил завуалировано "что прямая апроксимация (то есть черный цвет по картинке) даст не правильный результат". То есть не черный результат. И тоже судя по всему имея ввиду реальную воду (где бесконечно много отражений).
Что не так то?

Suslik
> она даёт корректный результат для одного отражения.
Suslik
> в этом случае аппроксимация одного отражения даст некорректный результат и
> переотражений нужно считать несколько. по формуле френеля.
За тебя 2 разных человека пишут или это какая-то веселая ачивка "выбеси оппонента"?


Suslik
> то есть они все — дурачки, а ты, видимо, самый умный.
Ты сначала говоришь о том, что 1 отражения не достаточно с формулой, а когда я говорю что в статьях везде 1 отражение и та же самая формула, то внезапно я самый умный.


Я всё ещё надеюсь, что хоть кто-нибудь повторит картинку "вода с ярким дном и черным предметом в отражении", на подобии этой.

+ Показать

Все эти светящиеся с рейтрейсингом скелетики и неизвестной формулой света, это весело, но не показательно.


#61
12:04, 18 сен. 2019

Kripto289
> Я всё ещё надеюсь, что хоть кто-нибудь повторит картинку "вода с ярким дном и
> черным предметом в отражении"
Вас, любезный, не смущает, что кроме камня в воде отражается ещё и небо, на фоне которого камень как раз и выглядит тёмным?

#62
(Правка: 22:32) 22:21, 18 сен. 2019

marggob
> на фоне которого камень как раз и выглядит тёмным?
Кроме этого, тут еще ракурс играет роль, на самом деле это просто другая сторона камня.

+ Показать

И еще оклужен... и много чего еще.
#63
(Правка: 23:11) 23:06, 18 сен. 2019

foxes
> Кроме этого, тут еще ракурс играет роль, на самом деле это просто другая
> сторона камня.
> И еще оклужен... и много чего еще.
Господи, такое ощущение что это массовый троллинг.
Ещё раз. Максимально просто

Изображение

Картинка 1: Формула френеля для воды с ior 1.33. 
Картинка 2: Материал воды. Материал внутри светится белым (рассеяние, подсветка, не важно, просто свет исходит изнутри, то есть под водой, считаем это преломлением).
Картинка 3: Как во всех демках считают финальный цвет. Lerp(цвет под водой, цвет над водой, fresnel).
В реальности 3 картинка так не выглядит. Белый свет будет даже на границе. Не будет никакой черной границы. Можно проверить в любом рейтрейсере, типа VRay.

Что бы получить черные границы (то есть остановить фотоны исходящие во все стороны из сферы), должно быть нечто физическое и обладающее массой на пути этих фотонов (атомы).
Каким образом фотоны отражающиеся по закону френеля будут перекрывать фотоны исходящие из сферы?? Фотоны не могут взаимодействовать друг с другом.
А значит фотоны из сферы никак не зависят от фотонов отраженных по закону френеля.

#64
0:33, 19 сен. 2019

Kripto289
> В реальности 3 картинка так не выглядит.
если свет исходит из-под подверхности, а не над поверхностью, то именно так и будет. ты придумал для себя супер-модельные условия, которые в жизни не встречаются, и теперь сам же не доволен их модельностью. всё потому, что
> рассеяние, подсветка, не важно, просто свет исходит изнутри, то есть под водой, считаем это преломлением
в жизни ещё как важно, откуда именно этот свет берётся. если это, например, раскалённый до свечения шарик, то свет будет исходить над поверхностью, а не под ней, поэтому френеля видно не будет. если это внутренняя светимость самой воды вроде растворённого люминофора, то именно так и будет, только в жизни такое практически нигде не встречается. а в жизни встречается рассеянный свет, который попадает снаружи, внутри отражается (частично угасая) и потом выходит обратно, так вот прямым следствием этого процесса является то, что отражённый свет практически всегда в жизни оказывается ярче рассеянного внутри. поэтому твой более тёмный френель может быть именно в очень редком случае, когда свет откуда ни возьмись появился под поверхностью, а над поверхностью его почему-то нет.

> Каким образом фотоны отражающиеся по закону френеля будут перекрывать фотоны исходящие из сферы??
именно что никак. свет аддитивен. френель в этом случае блокирует подповерхностные лучи и остаются только отражённые. если отражённые лучи несут меньше энергии, то результат будет выглядеть темнее. только, опять же, в жизни так бывает редко, так как свет под поверхностью(рассеянный) обычно берётся там именно снаружи.

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

#65
1:41, 19 сен. 2019

Kripto289
> В реальности 3 картинка так не выглядит. Белый свет будет даже на границе. Не будет никакой черной границы.
Вот, специально для тебя сфоткал лампу:

+ Лампа

Темная окантовка от Френеля видна невооруженным взглядом.


> Каким образом фотоны отражающиеся по закону френеля будут перекрывать фотоны исходящие из сферы??
Фотоны изнутри отражаются от поверхности и не доходят до глаза.
Коэффициент прохождения для лучей внутрь и наружу одинаковый по закону оптики об обращении пути.
А этот закон, в свою очередь, следует из второго начала термодинамики.

#66
3:33, 19 сен. 2019

Kripto289
> Я всё ещё надеюсь, что хоть кто-нибудь повторит картинку "вода с ярким дном и
> черным предметом в отражении", на подобии этой.
Да вот же чернота, и никакого дна не видно:
black | Физически корректное преломление в воде
По твоей формуле lerp(refraction, max(reflection,refraction), fresnel) я должен видеть дно, но вижу черное отражение. Как же так?

#67
4:24, 19 сен. 2019

фотоны такие фотоны

#68
(Правка: 5:00) 4:57, 19 сен. 2019

}:+()___ [Smile]
> Вот, специально для тебя сфоткал лампу:
Тут другой эффект. Свет исходит от люминофора у поверхности стекла. А черная окантовка это само стекло, которое искажает направление света от люминофора. Это не отражение. Знаешь почему?
Присмотрись, посередине лампы (нижние границы) точно такое же как и снаружи. Но ведь внутри лампы очень ярко и нет никакого темного отражения.
Даже если я ошибаюсь, вот ещё пруф, где лампа с рассеивателем (где нет люминофора у поверхности, и стекло не преломляет фотоны).
Равномерное освещение без темной каймы.

+ Показать

}:+()___ [Smile]
> Фотоны изнутри отражаются от поверхности и не доходят до глаза.
Фотоны в воде отражаются многократно от поверхности/частиц.
Есть ещё такая картинка внутреннего отражения. То есть мы при любом взгляде будем видеть внутренние лучи. (если интерполировать между 1 и 2 картинкой)

+ Показать

В дополнение. Раздел воздух-вода имеет один коеффициент френеля, а вода-воздух совершенно другой.

+ Показать

Наверное было бы корректнее считать свет исходящий из воды и свет отраженный как отдельные составляющие с разным коэффициентом френеля?

Suslik
> если свет исходит из-под подверхности, а не над поверхностью, то именно так и
> будет. ты придумал для себя супер-модельные условия, которые в жизни не
> встречаются, и теперь сам же не доволен их модельностью. всё потому, что
Suslik
> в жизни ещё как важно, откуда именно этот свет берётся. если это, например,
> раскалённый до свечения шарик, то свет будет исходить над поверхностью, а не
> под ней, поэтому френеля видно не будет. если это внутренняя светимость самой
> воды вроде растворённого люминофора, то именно так и будет, только в жизни
> такое практически нигде не встречается. а в жизни встречается рассеянный свет,
> который попадает снаружи, внутри отражается (частично угасая) и потом выходит
> обратно, так вот прямым следствием этого процесса является то, что отражённый
> свет практически всегда в жизни оказывается ярче рассеянного внутри. поэтому
> твой более тёмный френель может быть именно в очень редком случае, когда свет
> откуда ни возьмись появился под поверхностью, а над поверхностью его почему-то
> нет.

Но ведь в воде дно мы видим явно не у поверхности, и рассеяние воды точно так же распределено по всей глубине. Чем потенциально отличается свечение люминофора, от свечения частиц с отраженным светом? (ну кроме яркости конечно)
Или ты хочешь сказать что в воде свет исходит из под поверхности, как в коже??

Отраженный свет может быть черным, поставь ты перед водой любой темный объект. И вот уже дно + рассеяние станут ярче отражения. Даже если видно только дно (если вода чистая) или только рассеяние (если слишком глубоко), то это всё равно ярче черного отражения, что логично.

Suslik
> именно что никак. свет аддитивен. френель в этом случае блокирует
> подповерхностные лучи и остаются только отражённые. если отражённые лучи несут
> меньше энергии, то результат будет выглядеть темнее. только, опять же, в жизни
> так бывает редко, так как свет под поверхностью(рассеянный) обычно берётся там
> именно снаружи.
>
> короче, у тебя ошибочное понимание не отражённого света, который на самом деле
> считается тривиально по формуле френеля, а преломлённого, который для мутной
> воды считается гораздо сложнее и прямым образом зависит от света, который
> попадает под поверхность и рассеивается.

Уточнение что ты подразумеваешь под подповерхностным светом. Это как для кожи, или как для "свет начинающийся на глубине метр"? 

А как считается свет преломления?
Например я считаю его так, если мы смотрим на воду сверху. Буду рад услышать замечания и исправления если делаю что-то не так.

1) отдельный проход объёмного света с каустикой и тенями.
2) расчет абсорбции (когда вода синеет на глубине)
3) расчет кастомного цвета воды (как например в амазонке цвет коричневый из-за грязи/мути)
4) расчет преломления дна
5) расчет финального цвета преломления с учётом глубины
То есть примерно такая формула

_Transparent это настройка прозрачности воды от 1 до 50 метров.
_TurbidityColor настройка кастомного цвета воды (цвет грязи/мути/водорослей и т.д.)
conts float3 DepthAbsorbtion = float3(0.5, 0.8, 0.9);
conts  float MaxTransparent =50;
...
float3 absorbtionColor = pow(DepthAbsorbtion, clamp(depth, 0.01, _Transparent));
half3 volumeColor = volumeScattering.rgb * lerp(absorbtionColor, _TurbidityColor, saturate(1-_Transparent/ MaxTransparent ));
float3 finalRefract = lerp(refract, volumeColor, depthExp);

В конечном итоге у меня есть finalRefraction, reflection и fresnel. И какой должна быть формула расчета финального цвета? Потому что обычный lerp(refract, reflect, fresnel) даёт видимые черные силуеты (на верхней картинке)

+ Показать
#69
(Правка: 5:32) 5:20, 19 сен. 2019

Kripto289
> Потому что обычный lerp(refract, reflect, fresnel) даёт видимые черные силуеты
> (на верхней картинке)
чёрные силуэты у тебя получаются, потому что вода оказывается светлее отражения в ней. при этом цвет воды определяется светом, который поступает в неё из окружающей среды (из этого самого отражения), то есть типично вода оказывается темнее отражения в ней, а так как у тебя модель освещения рассеянного в воде света кривая, у тебя фактически рассеивается больше света, чем поступает. хотя при некоторых условиях отражённый луч может действительно выглядеть темнее, тем преломлённый и в этом нет ничего странного, тебе пример уже в https://gamedev.ru/code/forum/?id=246884&page=5&m=5047384#m66 привели.

> Равномерное освещение без темной каймы.
потому что поверхность матовая. угол макронормали не совпадает с микронормалью, этот случай рассчитывается через microsurface модели вроде GGX.

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

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

> А как считается свет преломления?
ты сам почитай, сколько пейперов про подповерхностное рассеивание пишут, и насколько разные алгоритмы для их аппроксимации применяются. это говорит о том, что не существует единственного быстрого и точного алгоритма и каждый изворачивается как может. читай: все алгоритмы подповерхностного рассеивания в реалтайме — плохие.

я, например, у себя предрассчитываю интенсивность рассеянного света для заданного локального радиуса кривизны и средней длины оптического свободного пробега в среде, результат запекаю в текстуру. на 0:25 показывается моя модель подповерхностного преломления и рассеяния:

но это — тоже приближение и в некоторых случаях (например, в случае тонкой поверхности, из которой луч выходит наружу без рассеивания) даёт неправильный результат.

#70
5:54, 19 сен. 2019

Kripto289
> Потому что обычный lerp(refract, reflect, fresnel) даёт видимые черные силуеты
> (на верхней картинке)
Вот тебе видимые черные силуеты на фото:
Изображение

#71
(Правка: 6:35) 6:27, 19 сен. 2019

MrShoor
> Вот тебе видимые черные силуеты на фото:
Это не черные силуеты, что появляются на моей воде.
На картинке воды(темный) + темное отражение. Всё остальное (синий цвет) это цвет отражения.
Тут вода темная и не прозрачная. Это картинка вообще не к месту.

#72
(Правка: 6:40) 6:38, 19 сен. 2019

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

Что тут скажут теоретики? :)

#73
(Правка: 7:26) 7:26, 19 сен. 2019

Kripto289
> Это не черные силуеты, что появляются на моей воде.
Те же силуеты. Твои черные силуеты - это отражения забора на фоне. Мои - отражения деревьев.

> Тут вода темная и не прозрачная.
Записал, вода темная и не прозрачная. Спасибо тебе, а то я всю жизнь думал, что вода прозрачная.

Ну а тут ты что скажешь:
Изображение
?

#74
(Правка: 9:16) 9:04, 19 сен. 2019

Suslik
> чёрные силуэты у тебя получаются, потому что вода оказывается светлее отражения
> в ней. при этом цвет воды определяется светом, который поступает в неё из
> окружающей среды
Я в курсе что там где дно светлее отражения, то просачивается чернота.
Я могу убрать абсолютно всё освещение и оставить только refraction как текущий кадр и reflection как перевернутый кадр. По крайней мере в демках это именно так.
Вот оставил чисто lerp(сцена, инвертнутная сцена, fresnel). Всё как в гайдах.
И всё равно видно черные грани.
Изображение
Скажешь что я не так рассчитываю в данной картинке?

Suslik
> потому что поверхность матовая. угол макронормали не совпадает с микронормалью,
> этот случай рассчитывается через microsurface модели вроде GGX.
Ну конечно. А теперь покрываем эту поверхность глянцем и чё появится чернота на гранях что ли? Ну нет же.

Suslik
> тем, что чтобы свет рассеялся, он сначала должен под воду попасть. не попадает
> свет извне — нет вкдада от подповерхностного рассеяния. люминофор светится вне
> зависимости от внешней освещённости.
Я имел ввиду другое. Чем финальное преломление рассеяние отличается от финального преломления люминофора. Как уж свет туда попадает это без разницы.
Suslik
> ты сам почитай, сколько пейперов про подповерхностное рассеивание пишут, и
> насколько разные алгоритмы для их аппроксимации применяются. это говорит о том,
> что не существует единственного быстрого и точного алгоритма и каждый
> изворачивается как может. читай: все алгоритмы подповерхностного рассеивания в
> реалтайме — плохие.
>
> я, например, у себя предрассчитываю интенсивность рассеянного света для
> заданного локального радиуса кривизны и средней длины оптического свободного
> пробега в среде, результат запекаю в текстуру. на 0:25 показывается моя модель
> подповерхностного преломления и рассеяния:
Я считаю в реалтайме рассеяние Реллея и Ми. По сути, это то же самое подповерхностное рассеивание, только более правильное, учитывая что я могу там рассчитывать тени/каустику и преломление (которое пока не реализовал)
https://i.imgur.com/U6Hr0Uw.mp4

Небольшая заметка, можно рассчитывать на глубине до 5-10 метров объёмное освещение даже в 1-2 цикла и разрешением текстуры в 8 раз меньше оригинала. Для воды это вполне может быть достаточно, так как мы кидаем рейкасты не из камеры, а из позиции воды вниз до текущей прозрачности. И это невероятно быстро выходит. Возможно даже быстрее чем считать подповерхностное рассеивание через апроксимации в полном разрешении. 

MrShoor
> Те же силуеты. Твои черные силуеты - это отражения забора на фоне. Мои -
> отражения деревьев.
>
> > Тут вода темная и не прозрачная.
> Записал, вода темная и не прозрачная. Спасибо тебе, а то я всю жизнь думал, что
> вода прозрачная.
>
> Ну а тут ты что скажешь:
Ну во-первых кадр с потерей детализации в темных областях, как минимум чернота и в листве.
Во-вторых, всё что можно вытянуть, вытягивается и дно более менее видно.
Изображение

Страницы: 14 5 6 710 Следующая »
ПрограммированиеФорумГрафика