waruiyume писал(а):Получится ли у меня с заменой шейдера игнорить отрисовку, если я пропишу аддитивный шейдер с 0 альфой?
Нет, такое сделать не получится, поскольку, будут отрисованы только заменённые, т.е. Вам придётся дублировать все используемые шейдеры, что, явно, крайне затруднительно.
В смысле, нельзя создавать рантайм, всегда же есть 32 слоя, и ни больше ни меньше сделать слоёв не получится?
Может просто задефайнить в шейдере участок который будет делать discard или возвращать цвет с нулевой альфой, и включать ключевое слово при надобности?
А вообще, не проще вырубить рендерер?
Расскажу суть.
У меня есть шейдер с искажениями. Он должен работать как на ПК, так и на мобилках.
Примерно такой констуркции
Subshader {
GrabPass{}
Pass{}
}
Дефайнами я не могу закрыть секцию grabpass. (которая глючит на мобилках). Lod не пойдёт (у меня куча разных шейдеров, как их все выбрать? по какому признаку?)
Опустим этот момент. Я делаю костыль - я создаю второй шейдер без grabpass. Вместо текстуры из бэкбуфера я рендерю в renderTarget и передаю как текстуру в шейдер.
Возникает проблема, ибо камера захватывает объект. Выходит рекурсивная картинка.
Для игнорирования я не могу использовать слои. Код переносимый, а слои перенести нельзя. Более того, если не объекте висит несколько материалов среди которых мой, то слой закроет отрисовку всех остальных материалов. (тот же эффект льда на скинед поверхности например, уже не создать).
Слои кстати можно создавать только в редакторе, и я даже не представляю как они переносятся в другой проект с другим кол-вом слоёв. Там ведь сравнение слоёв побитовое и всё полетит к чертям?