понедельник, 7 мая 2018 г.

Тени с учетом карты высот

Обычные теневые карты ничего не знают о рельефе поверхности и ведут себя так, будто она гладкая. Но если у нас есть parallax mapping и, соответственно, данные о высоте фрагмента, можно улучшить картинку путем смещения не только текстурных координат, но и теневых:

vec4 shadowCoord = shadowMatrix * vec4(eyePosition + eyeNormal * height * 0.3, 1.0);


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


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

Не знаю, использовалась ли такая техника раньше, и как она называется - может быть, что-то вроде height-corrected shadow mapping?

Комментариев нет:

Отправить комментарий