Тема: Depth water shader
Показать сообщение отдельно
Старый 19.09.2014, 20:43   #23
Izunad
ПроЭктировщик
 
Аватар для Izunad
 
Регистрация: 02.06.2011
Адрес: Набережные Челны
Сообщений: 103
Написано 27 полезных сообщений
(для 91 пользователей)
Ответ: Depth water shader

По идее если учитывать глубину воды то схема будет такая

прячем плоскость воды
срезаем все что выше воды
рендерим сцену высот (низменость светлая/высота темная)-> сохраняем в текстуру N1 КАРТА ВЫСОТ

далее рендерим эту же сцену с нормальными текстурами -> сохраняем в текстуру N2 КАРТА ПРОЗРАЧНОСТИ/ПРЕЛОМЛЕНИЯ

далее срезаем все что ниже воды
опускаем камеру(важно повернуть правильно)
рендерим ->сохраняем в текстуру N3 КАРТА ОТРАЖЕНИЯ

возвращаем камеру плоскость воды
начинаем рендерить смешивая три выше подготовленые текстуры

Естественно в последнем рендере координаты текстур являются проекционными, то есть ориентируемся по экрану

VS
OUT.Position = mul(IN.Position, matrixWorldViewProject);
OUT.TexProj.x = 0.5f*(OUT.Position.w+OUT.Position.x);
OUT.TexProj.y = 0.5f*(OUT.Position.w-OUT.Position.y);
OUT.TexProj.z = OUT.Position.w;


PS
tex2D(TextureSampler,IN.TexProj.xy/IN.TexProj.z)
Важно так же учитывать что карту высот вы будете делать через шейдер на той же модели где лежат нормальные текстуры, отсюда следует что для модели надо подготовить шейдер с двумя эффектами
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Evgen (22.09.2014)