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

Unity. Как шейдеры влияют на лайтмэпы?

#0
16:49, 2 апр 2017

Изучаю шейдеры, написал несколько своих, чтобы поддерживали несколько источников света, тени, reflection probes и тп. С реалтайм освещением всё гуд, но когда запекаю, все лайтмэпы получаются в grayscale (имеется в виду, что на мэпах видно где свет, где тень и тп, но всё в оттенках серого). Не нашел никакой документации на эту тему. Шейдеры ведь как-то влияют на лайтмэпы? В теории должны, ведь indirect lighting зависит от свойств поверхностей, а свойства поверхностей - это материалы. А вообще забавно - если запечь лайтмэпы с моими шейдерами, а потом поменять шейдеры на стандартные, то можно в реалтайме менять цвет материала и indirect lighting тоже будет меняться.

Объясните плз, что нужно в шейдерах добавить, чтобы влиять на лайтмэпы. Сейчас у меня три pass'а - forwardbase, forwardadd, shadowcaster. Или киньте ссылку, где почитать.


#1
17:05, 2 апр 2017

Как шейдеры влияют на лайтмэпы?

Иногда хорошо.

#2
19:13, 2 апр 2017

Уж пардон, но телепатов на данный сайт не завезли. Есть вопросы - покажи код шейдера.

#3
11:50, 3 апр 2017

я имел в виду в общем. Но если нужен код, то вот: (в нем нет ничего, касающегося лайтмэпов)

+ Показать
+ Показать
#4
13:09, 3 апр 2017

arcturgray
> я имел в виду в общем. Но если нужен код, то вот: (в нем нет ничего,
> касающегося лайтмэпов)
1. В шейдере действительно нет ни чего про лайтмапы. Он по идее вообще на них реагировать не должен, освещается ж только лайтпробами. Покажи что ли как оно в сцене выглядит.

2. Зачем писать всё так сложно? Делал бы в сурфейс шейдерах - там такой простой по функционалу шейдер сделать проще. Хотя если хочешь именно поразбираться с юнити, то конечно так поколупаться - самое то. )

#5
14:50, 3 апр 2017

мне кажется, вы меня не поняли, или же я вас. Мне интересно, как шейдер влияет на генерацию лайтмэпов. Например, берем стандартный шейдер. У него есть emission. Там можно выбрать опцию, чтобы emission GI запекался в лайтмэпы. То есть Юнити при запекании, видимо, запускает шейдер (но не как при рендеринге, а как-то по-особому, может pass какой-то специальный) ищет там emission, берет цвет, интенсивность и эти значения использует для калькуляции GI в сцене. Мне вот интересно, как сообщить Юнити следующее "в моем шейдере вот этот цвет - это emission, используй его для расчетов GI при запекании". И вообще я не только про emission, а в целом - Юнити ведь как-то использует шейдеры в процессе генерации лайтмэпов, или шейдеры тут вообще не при делах?

Может я туплю и не понимаю чего-то очевидного.

А по поводу surface shader'ов - это ведь просто абстрация над вершинными и фрагментными шейдерами, как я понял. Хочу понять на низком уровне сначала, потом займусь абстракциями. Я просто разбираюсь, а не для каких-то практических целей.

#6
16:11, 3 апр 2017

arcturgray
> или шейдеры тут вообще не при делах?
Голосую за это, с Юнити незнаком.

#7
17:42, 3 апр 2017

>может pass какой-то специальный
Пасс с "LightMode"="Meta"
Вообще, скачай билдин шэйдеры, там всё есть.

#8
18:05, 3 апр 2017

Спасибо. Именно то, что я искал.

#9
21:06, 3 апр 2017

Battle Angel Alita
> Пасс с "LightMode"="Meta"
> Вообще, скачай билдин шэйдеры, там всё есть.
Ага, после последнего комментария автора тоже самое хотел посоветовать.

arcturgray
> Спасибо. Именно то, что я искал.
Вот здесь поподробнее инфа есть, если что.
Спасибо. Именно то, что я искал.
https://docs.unity3d.com/Manual/MetaPass.html

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

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