русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Метод трассировки лучей


Дата добавления: 2013-12-23; просмотров: 2986; Нарушение авторских прав


Моделирование теней

Методы:

Построение теней на землю. Перед основной отрисовкой все грани проецируются на землю и рисуются тёмным цветом.

Достоинства: простота

Недостатки: тень не падает на предметы и может оказаться “под” ними.

Использование расстояний

○ Размещаем камеру в точке освещения и делаем проекцию сцены. Получаем Z — расстояние от камеры до любой освещённой точки.

○ Помещаем камеру в её нормальное положение и запускаем алгоритм отрисовки. Для каждой точки по проекционной координате вычисляются мировые координаты, потом они переводятся в координаты с точки зрения источника, и проводится анализ освещённости: если Zпроекц. > Zбуфера, то точка находится в тени, иначе — освещена.

Метод теневых объёмов

Теневой объём — это фигура, образованная конечным числом усеченных трапеций, которая находится в тени. Всё, что внутри него — в тени. Для каждого пикселя можно посчитать количество объемов, в которые он попадает. Для каждого пикселя сцены можно проанализировать луч, идущий от камеры до объекта. Для него вычисляется, сколько раз он входит в теневой объём и сколько раз он выходит оттуда. Если количество входов равно количеству выходов, то точка освещена, иначе — в тени.

Алгоритм:

1 Отрисовка всей сцены, как будто она вся в тени. Используется Z-буфер.

2 Рисуются грани теневого объёма и для каждой из них определяется, она повёрнута к камере или от неё.

3 Заводится дополнительный буфер, где для каждого пикселя хранится число N теневых объёмов, в которые он попадает. Изначально N=0.

○ Если Z пикселя (из Z-буфера) больше, чем Z грани:

■ Если грань повёрнута к камере, то N++

■ Если грань повёрнута от камеры, то N--

○ Иначе N не изменяется.



4 Пиксели, у которых N == 0, рисуются без учета теней, поверх изображения

Недостатки:

● Громоздкий метод со всех точек зрения

● Использование информации о глубине (дополнительный буфер, много памяти)

 

  На рисунке изображена прямая трассировка луча. Луч от источника преломился, т.к грань не сплошная.    

Прямая трассировка без преломления

В forward ray tracing траектории лучей строятся от источника ко всем точкам всех объектов сцены (первичные лучи). Затем проверяется ориентация каждой точки относительно источника, и, если она лежит на стороне объекта, обращенной в противоположную от источника сторону, точка из расчетов освещенности исключается. Для всех остальных точек вычисляется освещенность с помощью локальной модели освещения. Если объект не является отражающим или прозрачным, то есть поверхность объекта только диффузно рассеивает свет, траектория луча на этой точке обрывается (заканчивается). Если же поверхность объекта обладает свойством отражения (reflection) и/или преломления (refraction), из точки строятся новые лучи, направления которых совершенно точно определяются законами отражения и преломления.

Для построенных таким образом траекторий новых лучей может быть только три исхода. Луч либо выходит за пределы видимой из камеры области сцены, в этом случае все проделанные для него до этого момента расчеты освещенности отбрасываются, поскольку они не принимают участия в формировании изображения. Или луч попадает в камеру, тогда рассчитанная освещенность формирует цвет соответствующего пиксела изображения. Или луч встречает на своем пути новый объект, тогда для новой точки пересечения повторяется расчет освещенности и построения лучей отражения и преломления в зависимости от свойств поверхности объекта (рекурсия). Построение новых траекторий и расчеты ведутся до тех пор, пока все лучи либо попадут в камеру, либо выйдут за пределы видимой области. Очевидно, что при прямой трассировке лучей мы вынуждены выполнять расчеты для лучей, которые не попадут в камеру, то есть, проделывать бесполезную работу. По некоторым оценочным данным доля таких "слепых" лучей довольно велика.

 

Второй метод — обратная трассировка лучей, или backward ray tracing. Этот метод расчетов основывается на построении лучей не от источника, от наблюдателя через плоскость экрана вглубь сцены.

Лучи теперь строятся по двум точкам: первая точка, общая для всех лучей - положение камеры (наблюдателя), вторая точка определяется положением пикселя на плоскости видового окна. Таким образом, направление каждого луча строго определено, и количество первичных лучей также известно - это общее количество пикселей видового окна. Например, если видовое окно имеет 800 пикселей по ширине и 600 пикселей по высоте, количество лучей составит 800х600= 480 000.

Каждый луч вдоль заданного направления продляется от наблюдателя вглубь трехмерной сцены, и для каждой траектории выполняется проверка на пересечение со всеми объектами сцены и с отсекающими плоскостями. Если пересечений с объектами нет, а есть пересечение только с плоскостью отсечения, значит луч выходит за пределы видимой части сцены, и соответствующему пикселю видового окна присваивается цвет фона. Если луч пересекается с объектами сцены, то среди всех объектов выбирается тот, который ближе всего к наблюдателю. В точке пересечения с таким объектом строится три новых, так называемых вторичных луча.

 

Один луч строится в направлении источника света. Если источников несколько, строится несколько таких лучей, по одному на каждый источник. Основное назначение этого луча - определить ориентацию точки (обращена точка к источнику или от него), наличие объектов, закрывающих точку от источника света, и расстояние до источника света. Если точка обращена в противоположную сторону от источника света или закрыта другим непрозрачным объектом, освещенность от такого источника не рассчитывается, точка находится в тени. В случае затеняющего прозрачного объекта интенсивность освещения уменьшается в соответствии со степенью прозрачности. Если точка закрыта от освещения всеми источниками сцены, ей присваивается фоновый ambient цвет. В противном случае точка освещена, интенсивность и цвет освещения рассчитываются при помощи локальной модели освещенности (diffuse + specular) как сумма освещенностей от всех источников, для которых эта точка не закрыта другими объектами. Этот тип луча получил название shadow ray (иногда его еще называют illumination ray) - теневой луч. Если поверхность объекта не является отражающей и непрозрачна, теневой луч - единственный тип лучей который строится, траектория первичного луча обрывается (заканчивается), и дальнейшие расчеты не выполняются. Рассчитанный цвет (освещенности или тени) присваивается тому пикселю видового окна, через который проходит соответствующий первичный луч.

Второй луч строится, если поверхность объекта обладает отражающими свойствами, и называется reflection ray, или луч отражения. Для отраженного луча проверяется возможность пересечения с другими объектами сцены. Если пересечений нет, то интенсивность и цвет отраженного луча равна интенсивности и цвету фона. Если пересечение есть, то в новой точке снова строится три типа лучей - теневые, отражения и преломления.

Третий луч строится, если поверхность объекта прозрачна, и носит название transparency ray, т.е. луч прозрачности.

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

 

Недостатки метода:

● Трудоёмкая операция нахождения ближайшей грани.

● Сложность реализации.

● Большой объём вычислений. Не просто большой, опупенный

● Вклад освещенности от каждого нового вторичного луча очень быстро уменьшается, так как коэффициенты свойств отражения и преломления материалов меньше единицы. Например, если коэффициент отражения считать одинаковым для всех поверхностей и равным, допустим 0.3, то вклад четвертого отражения уменьшится в 0.0081 (0.3*0.3*0.3*0.3), то есть - почти в тысячу раз, а общее количество лучей к этому моменту увеличится в 12 раз (для одного источника света и в предположении, что все объекты прозрачны и отражают свет). Поэтому часто трассировку лучей прекращают, когда вклад от следующего узла ветви становится меньше заданной величины.

● Неучет вторичного освещения от диффузно отраженного объектами света

● aliasing - "зазубренность" линий

Возможная оптимизация метода:

● Источники света только светят, но не отражают и не преломляют (минус красивые лампочки)

● Упрощают свойства отражающих поверхностей (этот пункт для меня загадка, расшифруйте если кто-то знает :) )

● При зеркальном отражении не делаем свечения

● Вводим ограничение на глубину рекурсии

● Вводим ограничение на интенсивность луча. Максимальная интенсивность в камере М -> М1 при первом отражении/преломлении -> …

 

Достоинства метода:

● Универсальность. Применим для любой сцены.

● Даже при сильных упрощениях даёт реалистичное изображение.

● Легко распараллеливается (каждому потоку своя группа пикселов, для каждого из которых отслеживаем луч)

● Легко устраняется лестничный эффект (для этого достаточно повысить дискретность распределения света)



<== предыдущая лекция | следующая лекция ==>
Модели отражения света и их использование при закраске | Аппаратная архитектура графических ускорителей. Графический конвейер


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.