Skip to content

41. Построение теней при создании реалистических изображений. Учет теней в алгоритмах удаления невидимых поверхностей.

Pandas edited this page May 30, 2017 · 1 revision

Если положение наблюдателя и источника света совпадают, то теней не видно, но они появляются при перемещении в любую другую точку.
Тень состоит из 2 частей:

  1. Полная тень (центральная, тёмная, резко очернённая часть)
  2. Полутень (окружающая полную более светлая часть).

Собственная тень – объект, препятствует попаданию тени на некоторые свои грани.

Проекционная тень – один объект препятствует попаданию света на другой.

Процесс построения тени

  1. Удалить невидимые поверхности для положения каждого источника
  2. Удалить невидимые поверхности для положения наблюдателя

Построение собственной тени
Удаление нелицевых граней, если точку наблюдения совместить с источником света (алгоритм Робертса)

Построение проекционной тени
Построить проекции всех нелицевых граней на сцену, если точку наблюдения совместить с источником света. Точки пересечения проецируемой грани со всеми другими плоскостями образуют многоугольники, которые помечают как теневые и заносят в список.

Интервальный метод построчного сканирования

  1. Для каждого источника и многоугольника определить собственные тени и проекционные тени. Они записываются в виде двоичной матрицы – строки – многоугольники, отбрасывающие тень, столбцы – затеняемые многоугольники
  2. Обработка сцены относительно положения наблюдателя
    1. Определить видимые отрезки на интервале
    2. С помощью списка теневых многоугольников определить, падает ли тень на многоугольник, которые создаёт видимый отрезок на данном интервале
      a) нет теневых многоугольников – изобразить отрезок
      b) есть теневые многоугольники, но они не пересекают и не покрывают данный интервал – изобразить видимый отрезок
      c) интервал полностью покрывается хотя бы одним многоугольником – интенсивность изображаемого отрезка определяется с учётом интенсивностей этих многоугольников и самого отрезка
      d) хотя бы один теневой многоугольник частично покрывает интервал – рекурсивно разбивать интервал и работать с подыинтервалами

Алгоритм, использующий Z-буфер

  1. Строится сцена, где точка наблюдения совпадает с источником. Запомнить значения Z в отдельном теневом Z-буфере
  2. Строится сцена из точки наблюдателя. При обработке каждой поверхности глубина каждого пикселя сравнивается с глубиной Zбуф. Если >, то xyz из вида наблюдателя преобразуются в x'y'z' на виде из источника
    1. Z’≥Zтенбуф  xy в буфер кадра
    2. < - (xyz) в тени и изображается согласно правилу рассчёта интенсивности с учётом затенения. Zбуф=Z(x,y)
Clone this wiki locally