Оглавление
Введение
1. Конструкторская часть
Трассировка лучей
Построение теней
- Сплошные тени
- Реалистичные тени
Математические и физические предпосылки алгоритма обратной трассировки
- Освещение
- Схема расчета интенсивности. Параметры, задающие свойства тел.
Вычисление нормалей
Вычисление отраженного луча
Вычисление преломленного луча
Вычисление точки пересечения с примитивом
Описание типов данных. Структура программы
Краткое описание структур и классов
2. Технологическая часть
Выбор языка программирования
Описание интерфейса программы
3. Исследовательская часть
Зависимость времени построения от глубины рекурсии
Зависимость времени построения от количества источников
Выводы по результатам исследований
Заключение
Список литературы
Введение
Эта программа посвящена генерации реалистичных изображений, в частности – реалистичному изображению стекла.
Существует несколько методов генерации реалистичных изображений, таких как прямая трассировка лучей (трассировка фотонов), обратная трассировка лучей, radiosity.
Методы трассировки лучей на сегодняшний день считаются наиболее мощными и универсальными методами создания реалистичных изображений. Известно много примеров реализации алгоритмов трассировки для качественного отображения самых сложных трехмерных сцен. Можно отметить, что универсальность методов трассировки в значительной степени обусловлена тем, что в их основе лежат простые и ясные понятия, отражающие наш опыт восприятия окружающего мира.
Окружающие нас объекты обладают по отношению к свету такими свойствами:
- излучают;
- отражают и поглощают;
- пропускают сквозь себя.
Каждое из этих свойств можно описать некоторым набором характеристик.
Излучение можно охарактеризовать интенсивностью и спектром.
Свойство отражения (поглощения) можно описать характеристиками диффузного рассеивания и зеркального отражения. Прозрачность можно описать ослаблением интенсивности и преломлением.
Из точек поверхности (объема) излучающих объектов исходят лучи света. Можно назвать такие лучи первичными – они освещают все остальное. От источников излучения исходит по различным направлениям бесчисленное множество первичных лучей. Некоторые лучи уходят в свободное пространство, а некоторые попадают на другие объекты. Если луч попадает в прозрачный объект, то, преломляясь, он идет дальше, при этом некоторая часть световой энергии поглощается.
В результате действия на объекты первичных лучей возникают вторичные лучи. Некоторые из них попадают на другие объекты. Так, многократно отражаясь и преломляясь, отдельные световые лучи приходят в точку наблюдения. Таким образом, изображение сцены формируется некоторым множеством световых лучей.
Цвет отдельных точек изображения определяется спектром и интенсивностью первичных лучей источников излучения, а также поглощением световой энергии в объектах, встретившихся на пути соответствующих лучей.
Непосредственная реализация данной лучевой модели формирования изображения представляется затруднительной. Можно попробовать построить алгоритм построения изображения указанным способом. В таком алгоритме необходимо предусмотреть перебор всех первичных лучей и определить те из них, которые попадают в объекты и в камеру. Затем выполнить перебор всех вторичных лучей, и также учесть только те, которые попадают в объекты и в камеру. И так далее. Такой алгоритм называется прямой трассировкой лучей. Главный недостаток этого метода – много лишних операций, связанных с расчетом лучей, которые затем не используются.
Обратная трассировка лучей.
Именно этому методу генерации реалистичных изображений посвящена эта работа.
Метод обратной трассировки лучей позволяет значительно сократить перебор световых лучей. Метод разработан в 80-х годах, основополагающими считаются работы Уиттеда и Кэя. Согласно этому методу отслеживание лучей производится не от источников света, а в обратном направлении – от точки наблюдения. Так учитываются только те лучи, которые вносят вклад в формирование изображения.
Плоскость проецирования разбита на множество пикселов. Выберем центральную проекцию с центром схода на некотором расстоянии от плоскости проецирования. Проведем прямую линию из центра схода через середину пиксела плоскости проецирования. Это будет первичный луч обратной трассировки. Если этот луч попадет в один или несколько объектов сцены, то выбираем ближайшую точку пересечения. Для определения цвета пиксела изображения нужно учитывать свойства объекта, а также то, какое световое излучение приходится на соответствующую точку объекта.
Если объект зеркальный (хотя бы частично), то строим вторичный луч – луч падения, считая лучом отражения предыдущий, первичный трассируемый луч. Для идеального зеркала достаточно затем проследить лишь очередную точку пересечения вторичного луча с некоторым объектом. У идеального зеркала идеально ровная отполированная поверхность, поэтому одному отраженному лучу соответствует только один падающий луч. Зеркало может быть затемненным, то есть поглощать часть световой энергии, но все равно остается правило: один луч падает – один отражается.
Если объект прозрачный, то необходимо построить новый луч, такой, который при преломлении давал бы предыдущий трассируемый луч.
Для диффузного отражения интенсивность отраженного света, как известно, пропорциональна косинусу угла между вектором луча от источника света и нормалью.Когда выясняется, что текущий луч обратной трассировки не пересекает какой-либо объект, а уходит в свободное пространство, то на этом трассировка для этого луча заканчивается.
При практической реализации метода обратной трассировки вводят ограничения. Некоторые из них необходимы, чтобы можно было в принципе решить задачу синтеза изображения, а некоторые ограничения позволяют значительно повысить быстродействие трассировки.
Ограничения при реализации трассировки.
1. Среди всех типов объектов выделим некоторые, которые назовем источниками света. Источники света могут только излучать свет, но не могут его отражать или преломлять. Будем рассматривать только точечные источники света.
2. Свойства отражающих поверхностей описываются суммой двух составляющих – диффузной и зеркальной.
3. В свою очередь, зеркальность также описывается двумя составляющими. Первая (reflection) учитывает отражение от других объектов, не являющихся источниками света. Строится только один зеркально отраженный луч r для дальнейшей трассировки. Вторая компонента (specular) означает световые блики от источников света. Для этого направляются лучи на все источники света и определяются углы, образуемые этими лучами с зеркально отраженным лучом обратной трассировки (r). При зеркальном отражении цвет точки поверхности определяется собственным цветом того, что отражается.
4. При диффузном отражении учитываются только лучи от источников света. Лучи от зеркально отражающих поверхностей ИГНОРИРУЮТСЯ. Если луч, направленный на данный источник света, закрывается другим объектом, значит, данная точка объекта находится в тени. При диффузном отражении цвет освещенной точки поверхности определяется собственным цветом поверхности и цветом источников света.
5. Для прозрачных (transparent) объектов не учитывается зависимость коэффициента преломления от длины волны. (Иногда прозрачность вообще моделируют без преломления, то есть направление преломленного луча t совпадает с направлением падающего луча.)
6. Для учета освещенности объектов светом, рассеянным другими объектами, вводится фоновая составляющая (ambient).
7. Для завершения трассировки вводится ограничение количества итераций (глубины рекурсии).
RADIOSITY (ИЗЛУЧАТЕЛЬНОСТЬ).
Кроме вышеперечисленных методов генерации реалистичных изображений существует еще один метод. Он называется radiosity. Этот метод рассматривает распространение в пространстве световых волн. Это более сложный метод, более точно учитывающий законы распространения световой энергии и требующий больших затрат времени и аппаратных ресурсов. С помощью этого метода реализуются не только такие явления, как зеркальное отражение и преломление, но и более сложные явления, например, диффузное отражение и диффузное преломление.
Сцену можно представить как набор поверхностей, обменивающихся световой энергией. Большинство реальных поверхностей является диффузными отражателями, когда падающий луч отражается или рассеивается во всех направлениях полусферы, находящейся над отражающей поверхностью.
Особый здесь случай - отражение Ламберта (идеальная диффузия). Метод излучательности описывает баланс энергетического равновесия в замкнутой системе.
Предполагается, что поверхности идеально диффузны, т.е. после отражения падающий луч пропадает. Излучательность отдельной поверхности включает самоизлучение и отраженный или пропущенный свет.
Выводы по методу обратной трассировки.
Положительные черты:
1. Универсальность метода, его применимость для синтеза изображений достаточно сложных пространственных схем. Воплощает многие законы геометрической оптики. Просто реализуются разнообразные проекции.
2. Даже усеченные варианты данного метода позволяют получить достаточно реалистичные изображения. Например, если ограничиться только первичными лучами (из точки проецирования), то это дает удаление невидимых точек. Трассировка уже одного-двух вторичных лучей дает тени, зеркальность прозрачность.
3. Все преобразования координат линейны, поэтому достаточно просто работать с текстурами.
Недостатки:
1. Проблемы с моделированием диффузного отражения и преломления.
2. Для каждой точки изображения необходимо выполнять много вычислительных операций. Трассировка относится к числу самых медленных алгоритмов синтеза изображений.
Конструкторская часть
Алгоритмы
Обратная трассировка лучей
Рис. 2.1.1. Блок-схема рекуррентного алгоритма обратной трассировки лучей.
В этой программе алгоритм обратной трассировки реализован рекуррентным образом. Функция расчета интенсивности первичного луча рекуррентно вызывает саму себя для нахождения интенсивностей отраженного и преломленного лучей.
Алгоритм:
Для расчета цвета каждого пиксела буфера кадра выполняются следующие действия:
1. Найти координаты пиксела в мировой системе координат.
2. Найти координаты первичного луча.
3. Запуск функции вычисления интенсивности первичного луча.
4. Найти пересечения луча со всеми примитивами сцены и выбрать ближайшее.
5. Если пересечение не найдено, значит, луч ушел в свободное пространство.
Для расчета цвета принимаем полную интенсивность равной фоновой интенсивности. Перейти на шаг 12. Если пересечение найдено, перейти на шаг 6.
6. Рассчитываем «локальную» интенсивность цвета объекта, которому принадлежит точка пересечения. Под «локальной» интенсивностью понимается интенсивность с учетом интенсивности диффузно отраженного света и интенсивность бликов.
7. Если материал отражает свет только диффузно, то считаем интенсивности отраженного и преломленного света нулевыми. Перейти на шаг 12. Иначе перейти на шаг 8.
8. Если достигнута максимальная глубина рекурсии, то принять интенсивности отраженного и преломленного света нулевыми. Перейти на шаг 12. Иначе перейти на шаг 9.
9. Вычислить вектор отраженного луча. Запуск рекурсии для нахождения интенсивности отраженного луча.
10. Вычислить вектор преломленного луча. Запуск рекурсии для нахождения интенсивности преломленного луча.
11. Вычисление полной интенсивности цвета. Полная интенсивность включает в себя интенсивность рассеянного света, локальную интенсивность и интенсивности отраженного и преломленного лучей.
12. Возврат в точку вызова функции вычисления интенсивности луча.
Если шел расчет первичного луча, то в буфер кадра помещается пиксел вычисленного цвета. Переходим к расчету следующего пиксела буфера кадра Если шел расчет отраженного (преломленного) луча, то вычисленная интенсивность будет принята как интенсивность отраженного (преломленного) луча на предыдущем шаге рекурсии.
Построение теней
СПЛОШНЫЕ ТЕНИ
Для построения сплошных теней в алгоритме трассировки на этапе вычисления «локальной» интенсивности цвета в точке объекта проверяется «видимость» каждого источника света из этой точки.
Принцип работы алгоритма.
1. Из проверяемой точки строится луч, направленный на источник света.
2. Производится поиск пересечений этого луча с примитивами сцены между проверяемой точкой и источником.
3. Если найдено хотя бы одно пересечение, то проверяемая точка находится в тени. При расчете ее цвета источник, для которого проводилась проверка, не учитывается.
4. Если пересечений не найдено, точка не в тени. При расчете ее цвета учитываем проверяемый источник.
Такой метод нахождения теней дает приемлемый результат до тех пор, пока на сцене нет прозрачных объектов. Однако сплошная черная тень от стакана выглядит не реалистично. Стекло частично пропускает свет, поэтому интенсивность заслоненного источника должна учитываться при подсчете интенсивности света в точке объекта, но она должна ослабляться при проходе света сквозь стекло.
РЕАЛИСТИЧНЫЕ ТЕНИ
В этой программе предлагается способ построения теней, хотя и не соответствующий физике процесса образования тени, но, тем не менее, дающий более реалистичные результаты, чем обыкновенные сплошные тени. В этом алгоритме ослабление интенсивности света, дошедшего до проверяемой точки, привязано к расстоянию, пройденному светом в материале (в стекле). При этом преломлением света полностью пренебрегаем.
Алгоритм работает следующим образом.
1. Из проверяемой точки строится луч, направленный на источник света.
2. Находятся ВСЕ пересечения этого луча с примитивами сцены между проверяемой точкой и источником и сохраняются в массив пересечений. Первым элементом в массив заносится 0 (сама точка, для которой истроится тень). Одновременно с этим формируется массив, в котором хранятся данные о том, какому объекту сцены принадлежит найденная точка пересечения.
3. Массив пересечений сортируется по возрастанию расстояния от проверяемой точки до точки пересечения. При этом абсолютно аналогичные операции проводятся и со вторым массивом.
4. Если в массив не была добавлена ни одна точка кроме начальной, то проверяемая точка не затенена. Берется полная интенсивность источника. В противном случае начинаем проход массива со второй точки по всем точкам.
5. Если объект, которому принадлежит текущая точка пересечения, абсолютно непрозрачный, то имеет место сплошная тень, цикл прерываем. Иначе проверяем, входит луч в объект или выходит из него. Если входит – переход в следующей точке.
6. Если выходит, то вычисляем расстояние от предыдущей точки до текущей. Это будет расстояние, пройденное светом внутри объекта. В зависимости этого расстояния ослабляем интенсивность источника. Переходим к следующей точке.
Надо заметить, что различные прозрачные объекты могут отбрасывать разную тень даже при одинаковом расстоянии, пройденном светом в объекте. Так цветное стекло должно отбрасывать более темную тень, чем прозрачное. Для учета этого факта для каждого объекта введен специальный параметр - это расстояние, пройденное светом внутри объекта до полного затухания. Чем больше этот параметр, тем светлее тень, отбрасываемая объектом.
Освещение
Согласно модели Уиттеда цвет некоторой точки объекта определяется суммарной интенсивностью
I(l)=Ka*Ia(l)C(l) + Kd*Id(l)*C(l) +Ks*Is(l) + Kr*Ir(l) +Kt*It(l),
где l – длина волны, C(l) – заданный исходный цвет точки объекта, Ka, Kd, Ks, Kr и Kt – коэффициенты, учитывающие свойства конкретного объекта параметрами фоновой интенсивности, диффузного рассеивания, зеркальности, отражения и прозрачности.
Ia – интенсивность фоновой подсветки,
Id – интенсивность, учитываемая для диффузного рассеивания,
Is – интенсивность, учитываемая для зеркальности,
Ir – интенсивность излучения, пришедшая по отраженному лучу,
It – интенсивность излучения, пришедшая по преломленному лучу.
Интенсивность фоновой подсветки (Ia) для некоторого объекта обычно константа. Запишем формулы для остальных интенсивностей.
Для диффузного отражения:
Id=∑I(l)cosӨ,
где I(l) – интенсивность излучения i-го источника света, Ө - угол между нормалью к поверхности объекта и направлением на i-й источник света.
Для зеркальности:
Id=∑I(l)cosα,
где p – показатель степени от единицы до нескольких сотен (согласно модели Фонга), α – угол между отраженным лучом (обратной трассировки) и направлением на i-й источник света.
Надо заметить, что в модели Уиттеда в чистом виде есть один существенный недостаток. Дело в том, что доля световой энергии отраженной от поверхности объекта зависит от угла падения и преломления. Например, если смотреть вдоль поверхности стекла, то доля отраженного света повысится, а преломленного понизится. Но в модели Уиттеда коэффициенты, отражающие доли интенсивности отраженного и преломленного света в суммарной интенсивности точки поверхности объекта задаются константами (не зависят от угла). В большинстве случаев это дает приемлемый результат. Но при моделировании стекла мы встречаемся с эффектом полного внутреннего отражения. Некоторые лучи света не могут выйти из толщи стекла за заданное фиксированное число итераций. В результате этого по краям стакана возникает четкая черная полоса. Если учесть зависимость интенсивности отраженного и преломленного света от углов падения и преломления, то эффект будет намного более реалистичным. Края черной области размоются.
Для вычисления коэффициента при интенсивности отраженного луча используется следующая формула:
r = 0.5(cos α - Ncos β)2 /(cos α + Ncos β)2 + 0.5(Ncos α – cos β)2 /(Ncos α + cos β)2,
где α – угол падения луча, β – угол преломления луча, N – относительный показатель преломления двух сред.
Коэффициент при интенсивности преломленного луча вычисляется по формуле:
t = 1 – r.
Вычисление отраженного луча
Пусть задан вектор падающего луча S, а также известен вектор нормали N. Требуется найти вектор отраженного луча R.
Рассмотрим единичные векторы R1, S1и N1. Поскольку векторы нормали, падающего луча и отраженного луча находятся в одной плоскости, то можно записать R1 + S1 = N`, где N` - это вектор, соответствующий диагонали ромба и совпадающий по направлению с нормалью. Длина вектора N` равна 2cosθ. Так как вектор N` по направлению совпадает с N1, то
N` = N`2cosθ.
Отсюда найдем единичный вектор отраженного луча:
R1 = N1 2cosθ – S1 = N/|N| 2cosθ – S/|S|.
Найдем cosθ. Это можно сделать, используя скалярное произведение векторов N и S:
cosθ = N*S/(|N|*|S|).
Полагая, что искомый вектор отраженного луча будет иметь такую же длину, что и вектор падающего луча, то есть R = |S| R1, получим
R = N 2NS/|N|2 – S.
Это решение в векторной форме. Запишем координаты вектора:
xR = 2xN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) – xS,
yR = 2yN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) – yS,
zR = 2zN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) – zS.
Технологическая часть
Выбор языка программирования
При разработке программы был использован язык программирования высокого уровня C++ в составе среды визуального программирования CBuilder6.
Данный язык был выбран благодаря тому, что он предоставляет максимально удобные средства по работе с оперативной памятью, позволяет реализовывать алгоритмы более эффективно, по сравнению с другими высокоуровневыми языками. Программы, написанные на C++, работают быстрее и занимают меньше места на диске.
Кроме того, среда визуального программирования CBuilder6 предоставляет большое количество стандартных визуальных компонентов для создания интерфейса, и ряд библиотек с различными часто используемыми полезными функциями.
Исследовательская часть
Исследования проводились на компьютере со следующей конфигурацией:
CPU AMD Athlon 2100+
512 Mb DDR SDRAM
WindowsXP
Оглавление
Введение
1. Конструкторская часть
Трассировка лучей
Построение теней
- Сплошные тени
- Реалистичные тени
Математические и физические предпосылки алгоритма обратной трассировки
- Освещение
- Схема расчета интенсивности. Параметры, задающие свойства тел.
Вычисление нормалей
Вычисление отраженного луча
Вычисление преломленного луча
Вычисление точки пересечения с примитивом
Описание типов данных. Структура программы
Краткое описание структур и классов
2. Технологическая часть
Выбор языка программирования
Описание интерфейса программы
3. Исследовательская часть
Зависимость времени построения от глубины рекурсии
Зависимость времени построения от количества источников
Выводы по результатам исследований
Заключение
Список литературы
Введение
Эта программа посвящена генерации реалистичных изображений, в частности – реалистичному изображению стекла.
Существует несколько методов генерации реалистичных изображений, таких как прямая трассировка лучей (трассировка фотонов), обратная трассировка лучей, radiosity.
Методы трассировки лучей на сегодняшний день считаются наиболее мощными и универсальными методами создания реалистичных изображений. Известно много примеров реализации алгоритмов трассировки для качественного отображения самых сложных трехмерных сцен. Можно отметить, что универсальность методов трассировки в значительной степени обусловлена тем, что в их основе лежат простые и ясные понятия, отражающие наш опыт восприятия окружающего мира.
Окружающие нас объекты обладают по отношению к свету такими свойствами:
- излучают;
- отражают и поглощают;
- пропускают сквозь себя.
Каждое из этих свойств можно описать некоторым набором характеристик.
Излучение можно охарактеризовать интенсивностью и спектром.
Свойство отражения (поглощения) можно описать характеристиками диффузного рассеивания и зеркального отражения. Прозрачность можно описать ослаблением интенсивности и преломлением.
Из точек поверхности (объема) излучающих объектов исходят лучи света. Можно назвать такие лучи первичными – они освещают все остальное. От источников излучения исходит по различным направлениям бесчисленное множество первичных лучей. Некоторые лучи уходят в свободное пространство, а некоторые попадают на другие объекты. Если луч попадает в прозрачный объект, то, преломляясь, он идет дальше, при этом некоторая часть световой энергии поглощается.
В результате действия на объекты первичных лучей возникают вторичные лучи. Некоторые из них попадают на другие объекты. Так, многократно отражаясь и преломляясь, отдельные световые лучи приходят в точку наблюдения. Таким образом, изображение сцены формируется некоторым множеством световых лучей.
Цвет отдельных точек изображения определяется спектром и интенсивностью первичных лучей источников излучения, а также поглощением световой энергии в объектах, встретившихся на пути соответствующих лучей.
Непосредственная реализация данной лучевой модели формирования изображения представляется затруднительной. Можно попробовать построить алгоритм построения изображения указанным способом. В таком алгоритме необходимо предусмотреть перебор всех первичных лучей и определить те из них, которые попадают в объекты и в камеру. Затем выполнить перебор всех вторичных лучей, и также учесть только те, которые попадают в объекты и в камеру. И так далее. Такой алгоритм называется прямой трассировкой лучей. Главный недостаток этого метода – много лишних операций, связанных с расчетом лучей, которые затем не используются.
Обратная трассировка лучей.
Именно этому методу генерации реалистичных изображений посвящена эта работа.
Метод обратной трассировки лучей позволяет значительно сократить перебор световых лучей. Метод разработан в 80-х годах, основополагающими считаются работы Уиттеда и Кэя. Согласно этому методу отслеживание лучей производится не от источников света, а в обратном направлении – от точки наблюдения. Так учитываются только те лучи, которые вносят вклад в формирование изображения.
Плоскость проецирования разбита на множество пикселов. Выберем центральную проекцию с центром схода на некотором расстоянии от плоскости проецирования. Проведем прямую линию из центра схода через середину пиксела плоскости проецирования. Это будет первичный луч обратной трассировки. Если этот луч попадет в один или несколько объектов сцены, то выбираем ближайшую точку пересечения. Для определения цвета пиксела изображения нужно учитывать свойства объекта, а также то, какое световое излучение приходится на соответствующую точку объекта.
Если объект зеркальный (хотя бы частично), то строим вторичный луч – луч падения, считая лучом отражения предыдущий, первичный трассируемый луч. Для идеального зеркала достаточно затем проследить лишь очередную точку пересечения вторичного луча с некоторым объектом. У идеального зеркала идеально ровная отполированная поверхность, поэтому одному отраженному лучу соответствует только один падающий луч. Зеркало может быть затемненным, то есть поглощать часть световой энергии, но все равно остается правило: один луч падает – один отражается.
Если объект прозрачный, то необходимо построить новый луч, такой, который при преломлении давал бы предыдущий трассируемый луч.
Для диффузного отражения интенсивность отраженного света, как известно, пропорциональна косинусу угла между вектором луча от источника света и нормалью.Когда выясняется, что текущий луч обратной трассировки не пересекает какой-либо объект, а уходит в свободное пространство, то на этом трассировка для этого луча заканчивается.
При практической реализации метода обратной трассировки вводят ограничения. Некоторые из них необходимы, чтобы можно было в принципе решить задачу синтеза изображения, а некоторые ограничения позволяют значительно повысить быстродействие трассировки.
Ограничения при реализации трассировки.
1. Среди всех типов объектов выделим некоторые, которые назовем источниками света. Источники света могут только излучать свет, но не могут его отражать или преломлять. Будем рассматривать только точечные источники света.
2. Свойства отражающих поверхностей описываются суммой двух составляющих – диффузной и зеркальной.
3. В свою очередь, зеркальность также описывается двумя составляющими. Первая (reflection) учитывает отражение от других объектов, не являющихся источниками света. Строится только один зеркально отраженный луч r для дальнейшей трассировки. Вторая компонента (specular) означает световые блики от источников света. Для этого направляются лучи на все источники света и определяются углы, образуемые этими лучами с зеркально отраженным лучом обратной трассировки (r). При зеркальном отражении цвет точки поверхности определяется собственным цветом того, что отражается.
4. При диффузном отражении учитываются только лучи от источников света. Лучи от зеркально отражающих поверхностей ИГНОРИРУЮТСЯ. Если луч, направленный на данный источник света, закрывается другим объектом, значит, данная точка объекта находится в тени. При диффузном отражении цвет освещенной точки поверхности определяется собственным цветом поверхности и цветом источников света.
5. Для прозрачных (transparent) объектов не учитывается зависимость коэффициента преломления от длины волны. (Иногда прозрачность вообще моделируют без преломления, то есть направление преломленного луча t совпадает с направлением падающего луча.)
6. Для учета освещенности объектов светом, рассеянным другими объектами, вводится фоновая составляющая (ambient).
7. Для завершения трассировки вводится ограничение количества итераций (глубины рекурсии).
RADIOSITY (ИЗЛУЧАТЕЛЬНОСТЬ).
Кроме вышеперечисленных методов генерации реалистичных изображений существует еще один метод. Он называется radiosity. Этот метод рассматривает распространение в пространстве световых волн. Это более сложный метод, более точно учитывающий законы распространения световой энергии и требующий больших затрат времени и аппаратных ресурсов. С помощью этого метода реализуются не только такие явления, как зеркальное отражение и преломление, но и более сложные явления, например, диффузное отражение и диффузное преломление.
Сцену можно представить как набор поверхностей, обменивающихся световой энергией. Большинство реальных поверхностей является диффузными отражателями, когда падающий луч отражается или рассеивается во всех направлениях полусферы, находящейся над отражающей поверхностью.
Особый здесь случай - отражение Ламберта (идеальная диффузия). Метод излучательности описывает баланс энергетического равновесия в замкнутой системе.
Предполагается, что поверхности идеально диффузны, т.е. после отражения падающий луч пропадает. Излучательность отдельной поверхности включает самоизлучение и отраженный или пропущенный свет.
Выводы по методу обратной трассировки.
Положительные черты:
1. Универсальность метода, его применимость для синтеза изображений достаточно сложных пространственных схем. Воплощает многие законы геометрической оптики. Просто реализуются разнообразные проекции.
2. Даже усеченные варианты данного метода позволяют получить достаточно реалистичные изображения. Например, если ограничиться только первичными лучами (из точки проецирования), то это дает удаление невидимых точек. Трассировка уже одного-двух вторичных лучей дает тени, зеркальность прозрачность.
3. Все преобразования координат линейны, поэтому достаточно просто работать с текстурами.
Недостатки:
1. Проблемы с моделированием диффузного отражения и преломления.
2. Для каждой точки изображения необходимо выполнять много вычислительных операций. Трассировка относится к числу самых медленных алгоритмов синтеза изображений.
Конструкторская часть
Алгоритмы
Обратная трассировка лучей
Рис. 2.1.1. Блок-схема рекуррентного алгоритма обратной трассировки лучей.
В этой программе алгоритм обратной трассировки реализован рекуррентным образом. Функция расчета интенсивности первичного луча рекуррентно вызывает саму себя для нахождения интенсивностей отраженного и преломленного лучей.
Алгоритм:
Для расчета цвета каждого пиксела буфера кадра выполняются следующие действия:
1. Найти координаты пиксела в мировой системе координат.
2. Найти координаты первичного луча.
3. Запуск функции вычисления интенсивности первичного луча.
4. Найти пересечения луча со всеми примитивами сцены и выбрать ближайшее.
5. Если пересечение не найдено, значит, луч ушел в свободное пространство.
Для расчета цвета принимаем полную интенсивность равной фоновой интенсивности. Перейти на шаг 12. Если пересечение найдено, перейти на шаг 6.
6. Рассчитываем «локальную» интенсивность цвета объекта, которому принадлежит точка пересечения. Под «локальной» интенсивностью понимается интенсивность с учетом интенсивности диффузно отраженного света и интенсивность бликов.
7. Если материал отражает свет только диффузно, то считаем интенсивности отраженного и преломленного света нулевыми. Перейти на шаг 12. Иначе перейти на шаг 8.
8. Если достигнута максимальная глубина рекурсии, то принять интенсивности отраженного и преломленного света нулевыми. Перейти на шаг 12. Иначе перейти на шаг 9.
9. Вычислить вектор отраженного луча. Запуск рекурсии для нахождения интенсивности отраженного луча.
10. Вычислить вектор преломленного луча. Запуск рекурсии для нахождения интенсивности преломленного луча.
11. Вычисление полной интенсивности цвета. Полная интенсивность включает в себя интенсивность рассеянного света, локальную интенсивность и интенсивности отраженного и преломленного лучей.
12. Возврат в точку вызова функции вычисления интенсивности луча.
Если шел расчет первичного луча, то в буфер кадра помещается пиксел вычисленного цвета. Переходим к расчету следующего пиксела буфера кадра Если шел расчет отраженного (преломленного) луча, то вычисленная интенсивность будет принята как интенсивность отраженного (преломленного) луча на предыдущем шаге рекурсии.
Построение теней
СПЛОШНЫЕ ТЕНИ
Для построения сплошных теней в алгоритме трассировки на этапе вычисления «локальной» интенсивности цвета в точке объекта проверяется «видимость» каждого источника света из этой точки.
Принцип работы алгоритма.
1. Из проверяемой точки строится луч, направленный на источник света.
2. Производится поиск пересечений этого луча с примитивами сцены между проверяемой точкой и источником.
3. Если найдено хотя бы одно пересечение, то проверяемая точка находится в тени. При расчете ее цвета источник, для которого проводилась проверка, не учитывается.
4. Если пересечений не найдено, точка не в тени. При расчете ее цвета учитываем проверяемый источник.
Такой метод нахождения теней дает приемлемый результат до тех пор, пока на сцене нет прозрачных объектов. Однако сплошная черная тень от стакана выглядит не реалистично. Стекло частично пропускает свет, поэтому интенсивность заслоненного источника должна учитываться при подсчете интенсивности света в точке объекта, но она должна ослабляться при проходе света сквозь стекло.
РЕАЛИСТИЧНЫЕ ТЕНИ
В этой программе предлагается способ построения теней, хотя и не соответствующий физике процесса образования тени, но, тем не менее, дающий более реалистичные результаты, чем обыкновенные сплошные тени. В этом алгоритме ослабление интенсивности света, дошедшего до проверяемой точки, привязано к расстоянию, пройденному светом в материале (в стекле). При этом преломлением света полностью пренебрегаем.
Алгоритм работает следующим образом.
1. Из проверяемой точки строится луч, направленный на источник света.
2. Находятся ВСЕ пересечения этого луча с примитивами сцены между проверяемой точкой и источником и сохраняются в массив пересечений. Первым элементом в массив заносится 0 (сама точка, для которой истроится тень). Одновременно с этим формируется массив, в котором хранятся данные о том, какому объекту сцены принадлежит найденная точка пересечения.
3. Массив пересечений сортируется по возрастанию расстояния от проверяемой точки до точки пересечения. При этом абсолютно аналогичные операции проводятся и со вторым массивом.
4. Если в массив не была добавлена ни одна точка кроме начальной, то проверяемая точка не затенена. Берется полная интенсивность источника. В противном случае начинаем проход массива со второй точки по всем точкам.
5. Если объект, которому принадлежит текущая точка пересечения, абсолютно непрозрачный, то имеет место сплошная тень, цикл прерываем. Иначе проверяем, входит луч в объект или выходит из него. Если входит – переход в следующей точке.
6. Если выходит, то вычисляем расстояние от предыдущей точки до текущей. Это будет расстояние, пройденное светом внутри объекта. В зависимости этого расстояния ослабляем интенсивность источника. Переходим к следующей точке.
Надо заметить, что различные прозрачные объекты могут отбрасывать разную тень даже при одинаковом расстоянии, пройденном светом в объекте. Так цветное стекло должно отбрасывать более темную тень, чем прозрачное. Для учета этого факта для каждого объекта введен специальный параметр - это расстояние, пройденное светом внутри объекта до полного затухания. Чем больше этот параметр, тем светлее тень, отбрасываемая объектом.
Математические и физические предпосылки алгоритма обратной трассировки лучей
Освещение
Согласно модели Уиттеда цвет некоторой точки объекта определяется суммарной интенсивностью
I(l)=Ka*Ia(l)C(l) + Kd*Id(l)*C(l) +Ks*Is(l) + Kr*Ir(l) +Kt*It(l),
где l – длина волны, C(l) – заданный исходный цвет точки объекта, Ka, Kd, Ks, Kr и Kt – коэффициенты, учитывающие свойства конкретного объекта параметрами фоновой интенсивности, диффузного рассеивания, зеркальности, отражения и прозрачности.
Ia – интенсивность фоновой подсветки,
Id – интенсивность, учитываемая для диффузного рассеивания,
Is – интенсивность, учитываемая для зеркальности,
Ir – интенсивность излучения, пришедшая по отраженному лучу,
It – интенсивность излучения, пришедшая по преломленному лучу.
Интенсивность фоновой подсветки (Ia) для некоторого объекта обычно константа. Запишем формулы для остальных интенсивностей.
Для диффузного отражения:
Id=∑I(l)cosӨ,
где I(l) – интенсивность излучения i-го источника света, Ө - угол между нормалью к поверхности объекта и направлением на i-й источник света.
Для зеркальности:
Id=∑I(l)cosα,
где p – показатель степени от единицы до нескольких сотен (согласно модели Фонга), α – угол между отраженным лучом (обратной трассировки) и направлением на i-й источник света.
Надо заметить, что в модели Уиттеда в чистом виде есть один существенный недостаток. Дело в том, что доля световой энергии отраженной от поверхности объекта зависит от угла падения и преломления. Например, если смотреть вдоль поверхности стекла, то доля отраженного света повысится, а преломленного понизится. Но в модели Уиттеда коэффициенты, отражающие доли интенсивности отраженного и преломленного света в суммарной интенсивности точки поверхности объекта задаются константами (не зависят от угла). В большинстве случаев это дает приемлемый результат. Но при моделировании стекла мы встречаемся с эффектом полного внутреннего отражения. Некоторые лучи света не могут выйти из толщи стекла за заданное фиксированное число итераций. В результате этого по краям стакана возникает четкая черная полоса. Если учесть зависимость интенсивности отраженного и преломленного света от углов падения и преломления, то эффект будет намного более реалистичным. Края черной области размоются.
Для вычисления коэффициента при интенсивности отраженного луча используется следующая формула:
r = 0.5(cos α - Ncos β)2 /(cos α + Ncos β)2 + 0.5(Ncos α – cos β)2 /(Ncos α + cos β)2,
где α – угол падения луча, β – угол преломления луча, N – относительный показатель преломления двух сред.
Коэффициент при интенсивности преломленного луча вычисляется по формуле:
t = 1 – r.
Дата: 2019-07-24, просмотров: 276.