Вода,зеркало,стекло-три в одном. И "лакокрасочное" покрытие.

Научился сам? Помоги начинающему.

Вода,зеркало,стекло-три в одном. И "лакокрасочное" покрытие.

Сообщение sledo 04 апр 2016, 04:38

Озадачился такой проблемой как стекло, которое бы было не просто прозрачным, но еще и имела бы какую то степень отражения, как это и бывает в жизни. Однако, как это всегда и бывает, столкнулся с такими трудностями, как - нет ничего дельного. Можно либо прозрачность, либо отражения. А вот что бы и прозрачность и отражения, отчего то нигде нет. Максимум что можно найти, это использование cubemap. Способ хорош, но однако в виду некоторых особенностей, а именно отсутствия реалистичного отражения, сводит на нет остальные достоинства и подходит только в тех случаях, когда не нужно реалистичное зеркало, а нужно создать иллюзию.
Выяснилось из всех доступных решений, что есть только два способа создания действительно хорошего зеркала, которое можно сделать прозрачным и все это находится в стандартных средствах Unity.
Первый способ - использование ReflectionProbes. Тут нет ничего сложного, важно лишь верно расположить сам ReflectionProbes и настроить отражающие материалы. Прозрачность достигается за счет прозрачности отражаеющего материала. Документация довольно хорошо эту фичу описывает и нет нужны объяснять все это еще раз. Минус штучки в том, что она скорее подходит для статичных объектов, а не динамических. Вот сслыка на ресурс с демосценой http://twiik.net/articles/realtime-refl ... in-unity-5, и на саму сцену, альтернативная ссылка RealTimeReflections.

Но мне это не подходило и я рыл просторы интернета дальше, пока не наткнулся на вот это - MirrorReflection4, а затем и на вот это http://forum.unity3d.com/threads/mirror ... der.93477/ (пост от уважаемого человека под ником Steva). И тут меня посетила мысль, что где то я это уже видел...

И вот тут то и есть второй способ сделать прозрачное зеркало - использовать стандартную воду) В самом деле, ведь у нас есть замечательная вода, которая и отражает и прозрачная. Нужно лишь отрегулировать эту прозрачность и будет самое нестоящее стекло, причем довольно шустрое.
Итак, делаем.
1) Создаем материал воды (FX/Water)
2) Создаем то, что у нас будет зеркалом или стеклом.
3) Кидаем материал к этому ГО
4) На ГО вешаем скрипт Water. (Standard Assets/Environment/Water/Water/Scripts)
5) Сбрасываем настройки материала, или регулируем их как нам нужно Как мне работать с водой?.
В общем создаем обычную воду. Можно тупо перетащить префаб на сцену.
6) А здесь начинается самое интересное, о чем в документации сказано мельком - как нам сделать нашу воду, более прозрачной или менее прозрачной, т.е. слабо отражающую или зеркальной, при чем без шаманских танцев с кодом. Ключик лежит в Альфа канале текстуры для воды, которую мы кидаем в Fresnel. Т.е. степень прозрачности текстуры, дает нам степень отражений от поверхности воды. Так если текстура будет полностью непрозрачной, то мы получим зеркало, если полностью прозрачна, то с вода не будет видна. С альфой в 50, соответственно получим полупрозрачную воду.
Как тяжелую артиллерию для создания рисунков, я использую Gimp, и он вполне справляется со степенью прозрачности текстуры. Я сделал тестовый проект, для наглядности ситуации, где цифра у материала и текстуры, означает цифру прозрачности в Gimp'е, так что если вы используете какой то другой редактор, то вполне возможно альфа будет отличаться от моих. Вот ссылка на проектик Тест отражений. Там два вида прозрачных ГО - использование стандартных шейдеров с текстурой разной альфы и использование воды с теми же тестурами, но уже в качестве зеркала или стекла.
7) Итак, текстурки создали, нацепили, теперь нужно наш ГО обозначить как слой Water что бы у нас все начало нормально работать.
Собственно зеркало или стекло готово. Normalmap нам даст искажения на поверхности по типу реализации волн, если нужно использовать кривые стекла.

Есть одна особенность - если вертеть Directional Light, но не уменьшать его степень свечения, то в какой то момент наши стекла будут отражать от него свет и как бы начнут светиться в темноте, что весьма хорошо как дополнительная дешевая фича, к примеру подстветки чего то. В любом случае, если не заглушать свет, то может светится не только вода, но и текстура террейна, поэтому неудобств подобная штука доставить не должна, поскольку глушить свет все равно придется. Благо у нас есть слои.

Вот так, очередное простое и мощное стандартное решение от юнитов) Единственно что, видимо простыми путями не получится сделать тени на воде, точнее уже на зеркале или стекле. Тут поможет решение от упомянутого выше Steva http://forum.unity3d.com/threads/mirror ... ader.93477
Последний раз редактировалось sledo 06 окт 2016, 20:29, всего редактировалось 1 раз.
sledo
Старожил
 
Сообщения: 831
Зарегистрирован: 05 янв 2014, 15:44

Re: Вода, зеркало, стекло - три в одном.

Сообщение bwolf88 04 апр 2016, 23:01

Попробовал проект, как то непонятно, я отвернулся от деревьев и отражающих плоскостей и смотрю в пустоту - мне показывает 2,2 млн треугольников и 1,7 млн вершин это как ? А вообще любопытно получилось.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: Вода, зеркало, стекло - три в одном.

Сообщение sledo 06 окт 2016, 17:59

Думаю у многих возникала проблема с краской для например автомобиля или любой другой подобной неровной поверхностью, где нужно было сделать отражения. Как я писал выше, одним из способов достижения подобного является Reflection probes. Однако предположение о том что он больше подходит к статичным объектом, оказалось не верным и он может отлично использоваться для лакокрасочного покрытия автомобиля. В Asset Store есть бесплатное расширение Realtime Reflections, с которым можно посмотреть что примерно получается. А вот что получается, если сцена оформлена, а Resolution выкручена на 2048.
Тестирование на старой видеокарте Radeon 5770, разрешение 1980х1080. Гугл диск
radikal.ru:
Изображение
Изображение
Изображение
Изображение
Изображение

Стандартными средствами эффекта металлик (или перламутр, даже в реальности их иногда сложно различить) достичь не удается, на последнем изображении слева стандартные средства, справа шейдер из MoDyEn Car Paint Shader Pack. Основной цвет один и тот же, разница очевидна.
Изображение
sledo
Старожил
 
Сообщения: 831
Зарегистрирован: 05 янв 2014, 15:44

Re: Вода,зеркало,стекло-три в одном. И "лакокрасочное" покрытие.

Сообщение alex4x 20 апр 2017, 11:12

(3A4OT)
Еще бы анизотропическое отражение в этом же шейдере, чтобы одну текстуру как "бамп" но не бамп, а силу отражения по всем углам использовать. Два канала на направления (верх низ один канал, право лево другой канал) + еще один канал остается для чего угодно, например для общего мультипликатора.
alex4x
UNец
 
Сообщения: 11
Зарегистрирован: 29 июн 2016, 15:12

Re: Вода,зеркало,стекло-три в одном. И "лакокрасочное" покрытие.

Сообщение Woolf 20 апр 2017, 17:14

Вы чего, решили все некротемы поднять?
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2