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

показать пересечение геометрий в форвард рендере на мобилке

Страницы: 1 2 Следующая »
#0
23:27, 16 фев. 2018

всем привет
такая проблема
есть пример из документации юнити https://docs.unity3d.com/Manual/SL-Stencil.html
второй пример с фейковым вырезанием геометрии
я сделал что-то типо такого, с небольшими изменениями, но для прозрачки, которая просто заливает получившуюся зону
форвард рендер, без постпроцессинга, без доп проходов, 3 одинаковых совпадающих сферы, 3 разных шейдера (в примере два, но один двухпроходный) 

+ Показать

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

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

+ Показать

код первого шейдера

+ Показать

код второго

+ Показать

третий

+ Показать


вопрос - можно ли это исправить вообще ? и если да, то как? я примерно понимаю что надо плясать со стенсилом и сортировкой, но хз что


#1
23:34, 16 фев. 2018

kinyz
> но проблема появляется когда хочется использовать две таких зоны
По рисунку не понятна проблема. То есть непонятно что ты делаешь и что хочешь получить в итоге.

#2
23:39, 16 фев. 2018

kinyz
> но проблема появляется когда хочется использовать две таких зоны
Ну так глубина сееер! Суть проблемы - прозрачность. Обычное решение сортировка по глубине. Это "ZTest Less" "ZTest Greater" "ZTest Always" придется как то убирать.

Вообще задачу можно решить гораздо проще, и одним шейдером с одним проходом, определив для него соответствующий приоритет в очереди. Та же техника для стенсил или волюм теней используется.
Хотя конечно можно сказать что и два прохода получается, сама идея:

+ Показать

Останется только вместо сереньких плюшек полосочки нарисовать.

fix: "GPROGRAM ENDCG"
#3
1:53, 17 фев. 2018

foxes
> Обычное решение сортировка по глубине.
Я вот не догоняю, зачем такие советы давать?
В каждой сраной теме, где нуб наступает на сраные грабли OIT - ему сразу же советуют сортировку.
Ну отсортирует он. Что дальше?
Немного отодвинет проблему, буквально до первого невыпуклого объекта или объекта с самопересечениями.
Что даст сортировка? Часы кодинга, просранные на никому не нужный код?
Эти нубы сейчас же пойдут сортировки колбасить, одна офигительнее другой. А потом опять на форум с той же проблемой.
Хоспаде, да запилите уже в терминах или подсказках темку какую, куда бы все это нубье перенаправлять.
Вот так сходу: создал тему по OIT - и ему сразу же, ПЕРВЫМ ПОСТОМ, ссылка на тему. И все, никаких комментариев и разжовываний. Можно даже тему сразу же закрывать, вот.
Я кончил.

#4
3:09, 17 фев. 2018

kinyz
Если проблема в буфере глубины, как предполагает foxes, то тебе при отрисовке сфер достаточно выключить запись в буфер глубины. Но вот как это делать в юнити фиг знает. Гугли unity disable z write

#5
4:50, 17 фев. 2018

MrShoor
Изображение
пофиксил первый пост

#6
5:23, 17 фев. 2018

kinyz
В третьем проходе, который stencil_Hole добавь ZWrite off

#7
5:54, 17 фев. 2018

The Player
что за OIT ?

#8
6:34, 17 фев. 2018

MrShoor
это не оказывает никакого эффекта

#9
6:57, 17 фев. 2018
The Player
Лучше на лбу написать "мы умные и нас бомбит от первой фразы, а посты целиком мы читать не умеем".

kinyz
> я примерно понимаю что надо плясать со стенсилом и сортировкой, но хз что
странный подход впихивать невпихуемое, у тебя уже маска используется зачем туда еще сортировку пихать? Смысл использования стенсила в том, чтобы использовать его для отрисовки определенных проходов, а не пихать все на экран, потом он используется как маска.

Запилил полный шейдер для стенсила, выглядит он так:

+ Показать

Первый и последний проход можно вынести в отдельный шейдер и просто большой квад рисовать на экран.
Stencil | показать пересечение геометрий в форвард рендере на мобилке

Вариант выше тоже работает но он геморойный, хоть и без стенсила.

#10
17:18, 17 фев. 2018

foxes
спасибо, ахриненно) буду разбираться как это работает)
про сортировку я говорил имея ввиду все эти "Queue" = "Transparent+2" - это же и есть сортировка фактически и порядок пассов тоже вроде бы можно к ней отнести, хотя может это называется не так и я несу пургу

#11
19:45, 17 фев. 2018

kinyz
> это же и есть сортировка фактически и порядок пассов тоже вроде бы можно к ней
> отнести, хотя может это называется не так и я несу пургу
очень иногда полезно знать язык. Queue - очередь. Процесс ручной перестановки пасов местами в очереди я с трудом отношу к алгоритмам механической сортировки.

#12
19:48, 17 фев. 2018

В шейдере проверять попадает ли точка в объём сферы и если до то докрашивать полосками в экранных координатах.
Предварительно можно проверять в апдэйте попадание и менять соответственно шейдеры(с полоскаим/без).

#13
20:05, 17 фев. 2018

foxes
я знаю что это очередь, но её же надо задать определённую, задать порядок

#14
6:37, 18 фев. 2018

foxes
> Первый и последний проход можно вынести в отдельный шейдер и просто большой
> квад рисовать на экран.
если каждый пасс вынести в отдельный шейдер это всё будет батчиться, что важно на мобилке

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

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