![]() |
Depth water shader
Уважаемые, кто-нибудь может рассказать на каком принципе работает этот шейдер?
Как рассчитывается, затемнение в зависимости от глубины воды? Можно ли написать подобный шейдер для бесплатной версии Unity? Вот пример работы данного шейдера: http://approject.comxa.com И тема на форуме Unity, за 2009 год: http://forum.unity3d.com/threads/wat...y-indie.25294/ |
Ответ: Depth water shader
На сколько я понимаю, в шейдере можно использовать текстуру глубины с камеры
PHP код:
В примере для отражений видимо используется скайбокс, поэтому, скорее всего, такую же воду можно сделать на бесплатной версии Unity. В unity есть два пакаджа для воды, для бесплатной версии и для Pro. |
Ответ: Depth water shader
Вложений: 2
Андрей а сложно ли написать такой шейдер?
Нужно чтобы чем больше было расстояние между водой и песком, тем темнее была бы вода. Я собрал сцену с водой и песком (картинка ниже), сцену прикладываю к сообщению. Не мог бы ты мне помочь с написанием такого шейдера? С чего начать? Может еще кому-нибудь пригодиться. |
Ответ: Depth water shader
К сожалению у меня не хватает опыта написания подобных шейдеров
|
Ответ: Depth water shader
Ну ладно, буду искать решение. Можно конечно еще сделать маску проскандировав дно, и в зависимости от глубины заполнить карту прозрачности...
|
Ответ: Depth water shader
а)
1. читаешь _CameraDepthTexture 2. берёшь аналогичную глубину фрагмента воды 3. находишь разницу между ними 4. юзаешь как коэф для альфы б) 1. читаешь карту высот террейна 2. берёшь высоту воды в такой же системе координат 3. находишь разницу между ними 4. юзаешь как коэф для альфы |
Ответ: Depth water shader
Решение нашлось... нужно просто не шейдер воды менять, а шйедер земли.
http://jakobknudsen.com/?p=224 Учитывая позицию по высоте IN.pos.y Меняем яркость текстуры |
Ответ: Depth water shader
Код:
а) Но это наверное в будущем. Так как сам я вряд ли такой шейдер напишу, квалификация в этом деле у меня тоже недостаточная) Плюс там еще какие-то команды в коде вроде нужно использовать в чем их таинственный смысл мне вообще не понятно. http://docs.unity3d.com/Manual/SL-Ca...thTexture.html |
Ответ: Depth water shader
Цитата:
а высота воды пойдёт, если ты с картой высот террейна сравниваешь. |
Ответ: Depth water shader
Вообще нужно попробовать написать этот шейдер. Интересно, а андроид его потянет?
p.s. Mr_F_ , полистал твой блог, судя по темам, у тебя опыт работы с шейдерами приличный) |
Ответ: Depth water shader
Вложений: 2
Что-то получается да не то...
Что делает Linear01Depth ? |
Ответ: Depth water shader
Цитата:
Цитата:
|
Ответ: Depth water shader
Вложений: 1
Получилось извлечь линейную глубину изображения.
Как я понял поверхность дна должна отрисовываться в z-buffer, после чего шейдер воды должен считывать показания z буфера и на основе этого уже определять затемненность воды. Но как сделать чтобы шейдер воды не вносил изменения в z буффер? Вставил ZWrite OFF не работает... Код:
Shader "Render Depth" { |
Ответ: Depth water shader
Цитата:
|
Ответ: Depth water shader
Вложений: 1
"Queue" - как я понял определяет положение в очереди прорисовки.
"RenderType"="Transparent" - Transparent не может влиять на Z buffer? Прикладываю проект. Может кто сможет помочь... |
Ответ: Depth water shader
Мне кажется z берется не из Z буфера...
|
Ответ: Depth water shader
твой шейдер выводит глубину самого объекта, на который он наложен, если что.
возможно ты попутал что-то и хочешь увидеть в нём глубину того что под водой? или я не так понял, что ты хотел им показать? |
Ответ: Depth water shader
Я пытаюсь извлечь глубину из z-buffera что-то вроде: d=Linear01Depth(UNITY_SAMPLE_DEPTH(tex2D(_CameraDe pthTexture,i.uv)));
Но ни как не получается, уже много вариантов перебрал... Может в indie эта функция заблокирована?( Для начала я пытаюсь извлечь значение z земли, что под водой из z буфера... Потом от этого отнять высоту воды Ну и затемнить воду по этому значению. Была такая depth water, но в 4 версии Unity она не работает( |
Ответ: Depth water shader
Возьми любой шейдер частиц (частицы работают на Free), там все что тебе надо находится вот в таком условии:
PHP код:
|
Ответ: Depth water shader
Вот ссылка на что_то подобное:
http://forum.unity3d.com/threads/ble...slider.253270/ В чем разница: sampler2D_float _CameraDepthTexture ? В Google упоминается всего пару раз. |
Ответ: Depth water shader
В шейдере частиц данный самплер задан вне директив препроцессора. Поэтому я его привел.
|
Ответ: Depth water shader
Оставлю пока этот шейдер до лучших времен
|
Ответ: Depth water shader
По идее если учитывать глубину воды то схема будет такая
прячем плоскость воды срезаем все что выше воды рендерим сцену высот (низменость светлая/высота темная)-> сохраняем в текстуру N1 КАРТА ВЫСОТ далее рендерим эту же сцену с нормальными текстурами -> сохраняем в текстуру N2 КАРТА ПРОЗРАЧНОСТИ/ПРЕЛОМЛЕНИЯ далее срезаем все что ниже воды опускаем камеру(важно повернуть правильно) рендерим ->сохраняем в текстуру N3 КАРТА ОТРАЖЕНИЯ возвращаем камеру плоскость воды начинаем рендерить смешивая три выше подготовленые текстуры Естественно в последнем рендере координаты текстур являются проекционными, то есть ориентируемся по экрану Код:
VS |
Часовой пояс GMT +4, время: 07:35. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot