Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » Программирование графики и GPU » Теневые объемы (shadow vulemes) + отложнное освещение


Теневые объемы (shadow vulemes) + отложнное освещение

Сообщений 1 страница 2 из 2

1

Здравствуйте. Пытаюсь понемногу разобраться с построением теней методом теневых объёмов, при этом хочу реализовать это вместе с отложенным освещением (но суть не в этом). Я словил себя на мысли, что не до конца понимаю как, когда я в итоге получу область тени, связать ее с конкретным источником света (ведь важно, чтобы источник не мог засветлять свои же собственные тени, но при этом это могли делать остальные источники). Вероятно я до конца не понял алгоритма, сейчас я опишу как я это вижу:

- Рендеринг происходит в отдельном проходе в отдельный фрейм-буфер, используется только z и stencil буферы
- Строится теневой объем, в начале рендерятся полигоны с одной стороны (инкремент значение в stencil буфере) а затем с другой (декремент значений), оставшаяся область - это область тени
- При рендериге освещенной сцены происходит проверка, находится ли этот пиксель в тени (смотрим значение предыдущего stencil буфера соответствующее текущему пикселю?)

И вот возникает вопрос - как понять какая область в том stencil буфере относится к какому источнику? Ведь может быть такое, что одна тень падает на другую тень, и в этом месте должно становиться темнее. Так же, если этого не учитывать, источник света будет влиять на свои же собственные тени. Может быть я в корне что-то не так понимаю? За ранее спасибо.

Отредактировано DarkWolf (2019-01-18 17:06:55)

0

2

На все свои вопросы я нашел ответы. Всем кому интересно, вот, ответы есть здесь - https://ru.stackoverflow.com/questions/933909 . Если вкратце, то суть в том, в одном проходе происходит построение теневого объема только для ОДНОГО источника освещения, а затем происходит отрисовка уже затененной сцены (опять же, для одного источника освещения). Затем, результаты проходов накладываются друг на друга при помощи аддитивного blending'а (то есть суммируем освещенность мы не в шейдере, в шейдере всегда только один источник, сумма происходит за счет blending'а). В итоге я таки смог использовать эту технику для построения теней в сочетании с отложенным освещением.

Вот демка - https://www.youtube.com/watch?v=JCrWH95Jpvs

Так же крайне важно чтобы у каждого ребра меша был смежный полигон, иначе в геометрическом шейдере будет затруднительно выяснять - является ли ребро силуэтным. Но есть ситуации когда таких полигонов у ребра попросту нет (например кубы, которые индексированы таким образом, что каждая грань куба - не связана индексами с остальными, для придания эффектно плоского освещения каждой грани). В таких случаях я создаю "фантомные вершины" (то есть образуются новые "не настоящие полигоны") и отправляю все это в шейдеры. Там уже можно осуществить проверку - если треугольник, смежный к обращенному к свету треугольнику, не обращен к свету, либо если его 3-ая вершина фантомноая, ребро между этими треугольниками - силуэтное

Отредактировано DarkWolf (2019-02-11 17:46:28)

0


Вы здесь » Компьютерная графика » Программирование графики и GPU » Теневые объемы (shadow vulemes) + отложнное освещение


создать форум