-
Notifications
You must be signed in to change notification settings - Fork 9
41. Построение теней при создании реалистических изображений. Учет теней в алгоритмах удаления невидимых поверхностей.
Если положение наблюдателя и источника света совпадают, то теней не видно, но они появляются при перемещении в любую другую точку.
Тень состоит из 2 частей:
- Полная тень (центральная, тёмная, резко очернённая часть)
- Полутень (окружающая полную более светлая часть).
Собственная тень – объект, препятствует попаданию тени на некоторые свои грани.
Проекционная тень – один объект препятствует попаданию света на другой.
Процесс построения тени
- Удалить невидимые поверхности для положения каждого источника
- Удалить невидимые поверхности для положения наблюдателя
Построение собственной тени
Удаление нелицевых граней, если точку наблюдения совместить с источником света (алгоритм Робертса)
Построение проекционной тени
Построить проекции всех нелицевых граней на сцену, если точку наблюдения совместить с источником света. Точки пересечения проецируемой грани со всеми другими плоскостями образуют многоугольники, которые помечают как теневые и заносят в список.
Интервальный метод построчного сканирования
- Для каждого источника и многоугольника определить собственные тени и проекционные тени. Они записываются в виде двоичной матрицы – строки – многоугольники, отбрасывающие тень, столбцы – затеняемые многоугольники
- Обработка сцены относительно положения наблюдателя
- Определить видимые отрезки на интервале
- С помощью списка теневых многоугольников определить, падает ли тень на многоугольник,
которые создаёт видимый отрезок на данном интервале
a) нет теневых многоугольников – изобразить отрезок
b) есть теневые многоугольники, но они не пересекают и не покрывают данный интервал – изобразить видимый отрезок
c) интервал полностью покрывается хотя бы одним многоугольником – интенсивность изображаемого отрезка определяется с учётом интенсивностей этих многоугольников и самого отрезка
d) хотя бы один теневой многоугольник частично покрывает интервал – рекурсивно разбивать интервал и работать с подыинтервалами
Алгоритм, использующий Z-буфер
- Строится сцена, где точка наблюдения совпадает с источником. Запомнить значения Z в отдельном теневом Z-буфере
- Строится сцена из точки наблюдателя. При обработке каждой поверхности глубина каждого
пикселя сравнивается с глубиной Zбуф. Если >, то xyz из вида наблюдателя преобразуются в x'y'z' на виде из источника
- Z’≥Zтенбуф xy в буфер кадра
- < - (xyz) в тени и изображается согласно правилу рассчёта интенсивности с учётом затенения. Zбуф=Z(x,y)