Принятие теней прозрачными материалами

Шейдеры и все-все-все.

Принятие теней прозрачными материалами

Сообщение Leonin 22 янв 2018, 19:46

Приветствую формумчане.
Мой главный герой может зайти за непрозрачную стену и его не станет видно, поэтому я кастую лучи в сторону ортографической "поверхности экрана" и собираю все непрозрачные объекты. Меняю их материал на прозрачный (standart material с модом fade).
Все бы ничего, но возникли две проблемы. И если первая еще решаема, то со второй не все так однозначно.
Проблема первая:
Типичная проблема при сортировке двух прозрачных пересекающихся объектов. Заливать в ютуб не стану, но скину видюшку из ВК, отражающая суть проблемы.
https://vk.com/video?z=video219887374_456239141
Решил считать расстояние от видимых вершин параллелепипеда до поверхности экрана, и если дистанция какая-либо для вершины оказалась больше, чем любая из дистанций других вершин другого прозрачного параллелепипеда, то сначала рисую первый, потом второй. Должно работать в теории. Так ли это?

Теперь о второй проблеме. Как заставить прозрачные стены принимать realtime тени от точечного источника света?

Скрытый текст:
Изображение
Аватара пользователя
Leonin
UNец
 
Сообщения: 44
Зарегистрирован: 12 янв 2018, 16:59

Re: Принятие теней прозрачными материалами

Сообщение artk 05 фев 2018, 02:43

Типичная проблема при сортировке. Как вы сами сказали - типичная. Есть множество костыльных решений. Гуглите Transperent sorting problem. Общего решения нет, даже решение в dx11 костыльное. Нужно сортировать в ручную.
А вот с райтнайм тенями для Transperent - это проблема.
1) Либо придется писать свои тени, с помощью Shadow volume.
2) Либо делать многопроходной шейдер с записью Z-buffer. Первый проход - запись глубины, второй - вывод только тени, третий - основной проход с блендингом.


https://forum.unity.com/threads/transparent-shader-receive-shadows.325877
https://forum.unity.com/threads/transparent-depth-shader-good-for-ghosts.149511
Варианты с AlphaTest вам не подойдут


Я бы использовал dithering, вместо альфа-блендинга. Сейчас это много где применяется. Проблемы со сортировкой и с тенями это решит, да и по производительности намного лучше
http://catlikecoding.com/unity/tutorials/rendering/part-12/ (там применяется для теней, но тоже самое можно применить и на сам объект, заместо transperent)
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: Принятие теней прозрачными материалами

Сообщение Leonin 05 фев 2018, 03:48

artk писал(а):Типичная проблема при сортировке. Как вы сами сказали - типичная. Есть множество костыльных решений. Гуглите Transperent sorting problem. Общего решения нет, даже решение в dx11 костыльное. Нужно сортировать в ручную.
А вот с райтнайм тенями для Transperent - это проблема.
1) Либо придется писать свои тени, с помощью Shadow volume.
2) Либо делать многопроходной шейдер с записью Z-buffer. Первый проход - запись глубины, второй - вывод только тени, третий - основной проход с блендингом.


https://forum.unity.com/threads/transparent-shader-receive-shadows.325877
https://forum.unity.com/threads/transparent-depth-shader-good-for-ghosts.149511
Варианты с AlphaTest вам не подойдут


Я бы использовал dithering, вместо альфа-блендинга. Сейчас это много где применяется. Проблемы со сортировкой и с тенями это решит, да и по производительности намного лучше
http://catlikecoding.com/unity/tutorials/rendering/part-12/ (там применяется для теней, но тоже самое можно применить и на сам объект, заместо transperent)

Я с шейдерами на вы, но попробую разобраться, большое спасибо :)
Аватара пользователя
Leonin
UNец
 
Сообщения: 44
Зарегистрирован: 12 янв 2018, 16:59


Вернуться в Shader Lab

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

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