Всем привет. У меня вопрос, я ещё до этого не дошел, но подумал, что если сделать обычный шейдер или pbr шейдер с освещением, то стены не будут помехой, так ведь? Можете подсказать как решается такая проблема? Нужно, чтобы свет освещал только свою область и не переходил за стену. Может название алгоритма. Метод. Пишу на opengl и c++. Может, это ретрейсинг называется?
archinaragu
Добавь тени.
При расчете освещения в точке, алгоритм как правило не знает никакой информации о всей сцене. Он лишь владеет параметрами источника света, параметрами материала и нормалью в точке. Чтобы свет не проходил сквозь стены(о которых световая модель ничего не знает, как я упомянул выше), ты должен так же считать затенённость, помимо освещённости и перемножаться их. Тогда, если точка в тени, ее затененнность будет 0, и все произведение будет 0, независимо от освещённости.
AMM1AK, боюсь твои объяснения не совсем будут понятны новичку, который с этим не сталкивался. )))
AMM1AK
Так, теория понятна. У меня есть в книге примеры того, как делать тень. Ещё вопрос, чтобы произведение было равно нулю, то получается, что тень ото объекта имеет такую же силу света, который попадает на пол? Я как-то раньше делал тень, но уже не помню ничего из этого. Я так понимаю, что затененность не нужно явно перемножать в шейдере, так как они просто будут складываться сначала тень, потом свет, или сначала свет, потом тень. Что ж, если я правильно понял, то спасибо.
Тоесть если шейдер цвета объекта простой, то тень сделать легче, чем если материал будет PBR?
archinaragu
> Пишу на opengl и c++.
Есть уроки по opengl и там есть урок про тени. Там все неплохо расписано,для начала ознакомься с ним.
MikeNew
На этом сайте есть? Хорошо, посмотрю. Ещё в книге своей посмотрю. Спасибо.
Кстати, далеко не факт что тени решат все проблемы ... От омников или спотов нужно подогнать дальность тени под затухание лайтинга
archinaragu
> Нужно, чтобы свет освещал только свою область и не переходил за стену. Может название алгоритма. Метод.
Pathtrace, например. Реализован в киберпанке. Требует топовую видяху.
AMM1AK
> При расчете освещения в точке, алгоритм как правило не знает никакой информации о всей сцене.
А всю и не надо. Вон какой элегантный костыль в движке 15-летней давности:
Вот что подумалось. Может как-то можно рассчитывать освещенность сцены с помощью нейросети. Натренировать ее для начала на сценах с обычными тенями, а потом пустить в свободное плавание.
Что думаете? Реально такое?
iw4nna.rock
чем отличается от лайтмапов? переучиванием?
fake.pdf
> чем отличается от лайтмапов? переучиванием?
есть примитивы, источник света. Примитивы подаются на входной слой нейросети, на выходном слое получаем карту тени. И всё это в динамике.
iw4nna.rock
А зачем? Есть уже изобретённый велосипед, как считать тень. Нейронки используются там, где нет конкретного алгоритма.