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

Пена воды у берега

#0
5:37, 1 янв. 2015

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


#1
7:10, 1 янв. 2015

luckyycode
> Рендерить отдельный FBO не хочется.
Он ведь всё равно нужен для преломления, с него считаешь разность z.

#2
12:55, 1 янв. 2015

luckyycode
> Имеется информация о глубине картинки.

По глубине это screen space эффект будет, тут собственно какие могут быть вопросы? Натягиваешь текстуру пены на воду, рендеришь сначала ландшафт без воды в depth, а затем когда рендеришь воду сравниваешь глубины воды и ландшафта.

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

#3
13:21, 1 янв. 2015

ScreenSpace - проверяешь глубину из текстуры с глубиной плейна воды и рисуешь пену там, где разница меньше N. Минус в том, что картинка будет "плавать" в зависимости от угла камеры и подводной части.
Ну и выглядит не очень из-за того, что рисуется там, где есть глубина. Но это увидеть надо, что бы понять. Плюс в том, что пена будет на всем, что попадает в воду (корабли, берег, всякие предметы и т.п.).

Заготовленная карта глубины - суть та же, но нет минуса из-за камеры. Однако есть минус в том, что в зависимости от локации разрешения может не хватить, хотя для пенки может не будет заметно. Может придется стримить.
А еще надо точно наложить на плейн в те места, где острова. Ну и не будет пенки от динамических объектов. Выяглдит оно чуть лучше, но и готовить чуть дольше.

Еще вариант - сделать юбку из полигонов вокруг островов, на которую и накладывать пенку. Дешево и сердито, но подходит только для плоской воды (без волн).

Другой способ, в случае если сетка воды плотная, то можно рейкастом запечь в вертексы глубину и рисовать пенку по ней. Может даже можно динамически (обновляя сетку). Но будет сильно зависеть от плотности. Что бы было более-менее, нужно много поликов.
Вероятно пойдет если плотный projective grid.

В общем, на мой взгляд, самое простое - это screen space вариант.

#4
13:44, 1 янв. 2015

с юбкой из полигонов зато плюс, что пенка имеет чёткое направление, начало и конец:
http://www.ag.ru/games/far-cry/screenshots/82565
а по глубине чаще просто в тайл переходят. в общем, мне в крайзисе пенка меньше понравилась, чем в первом фаркрае)

#5
14:08, 1 янв. 2015

DeadMeat
> Минус в том, что картинка будет "плавать" в зависимости от угла камеры и
> подводной части.

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

#6
18:48, 1 янв. 2015

Вода - океан, то есть постоянно двигается. И спасибо за советы, посмотрю о screen space rendering.

#7
23:28, 1 янв. 2015

В Крайзисе просто по глубине сделано.

#8
9:33, 2 янв. 2015

https://www.shadertoy.com/view/4sS3zG

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

Тема в архиве.