Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие 2011.docx
Скачиваний:
103
Добавлен:
10.12.2018
Размер:
3.14 Mб
Скачать
    1. Методы трассировки лучей

В простейшем методе, использующим лучи, для каждого пикселя картинной плоскости определяется ближайшая к нему грань, для чего через этот пиксель выпускается луч, находятся все его пересечения с гранями и среди них выбирается ближайшая. Цвет этой грани и определяет цвет пикселя. Такой метод часто называют методом бросания лучей или ray casting.

Алгоритм на псевдокоде можно кратко записать так:

for all pixels

for all objects

compare z

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

В этом случае для удаления скрытых линий и поверхностей можно использовать тот факт, что в реальной природе источник света испускает луч света, который, «путешествуя» по пространству, в конечном счёте «натыкается» на какую-либо преграду, которая прерывает распространение этого светового луча. В какой-либо точке пути с лучом света может случиться любая комбинация трёх вещей: поглощение, отражение (рефлекция) и преломление (рефракция).

Поверхность может отразить весь световой луч или только его часть в одном или нескольких направлениях. Поверхность может также поглотить часть светового луча, что приводит к потере интенсивности отраженного и/или преломлённого луча. Если поверхность имеет какие-либо свойства прозрачности, то она преломляет часть светового луча внутри себя и изменяет его направление распространения, поглощая некоторый (или весь) спектр луча (и, возможно, изменяя цвет). Суммарная интенсивность светового луча, которая была «потеряна» вследствие поглощения, преломления и отражения, должна быть в точности равной исходящей (начальной) интенсивности этого луча. Далее отраженные и/или преломлённые лучи достигают других поверхностей, где их поглощающие, отражающие и преломляющие способности снова вычисляются, основываясь на результатах вычислений входящих лучей. Таким образом, луч, пропущенный через пиксель картиной плоскости, образует сложный разделяющийся путь.

Рис. 8.92. Обратная трассировка лучей

Как отмечено в [7], если проследить за лучами света, выпущенным источником света, то можно убедиться, что весьма немногие дойдут до наблюдателя. Следовательно, этот процесс вычислительно неэффективен. Поэтому было предложено отслеживать (трассировать) лучи в обратном направлении, т.е. от наблюдателя к объекту и далее к источнику освещения (Рис. 8 .92). При этом, интенсивность в пикселе, через который проходит луч, рассчитывалась бы интегрально с учетом всех слагаемых: пересечения, отражения, преломления луча с разными объектами и характеристик источников света. Такой подход получил название метод обратной трассировки лучей (ray tracing).

    1. Алгоритмы, использующие список приоритетов

При реализации всех обсуждавшихся алгоритмов удаления невидимых линий и поверхностей устанавливались приоритеты, т. е. глубины объектов сцены или их расстояния от точки наблюдения. Алгоритмы, использующие список приоритетов, пытаются получить преимущество посредством предварительной сортировки по глубине или приоритету. Цель такой сортировки состоит в том, чтобы получить окончательный список элементов сцены, упорядоченных по приоритету глубины, основанному на расстоянии от точки наблюдения. Если такой список окончателен, то никакие два элемента не будут взаимно перекрывать друг друга. Тогда можно записать все элементы в буфер кадра поочередно, начиная с элемента, наиболее удаленного от точки наблюдения. Более близкие к наблюдателю элементы будут затирать информацию о более далеких элементах в буфере кадра. Поэтому задача об удалении невидимых поверхностей решается тривиально. Эффекты прозрачности можно включить в состав алгоритма путем не полной, а частичной корректировки содержимого буфера кадра с учетом атрибутов прозрачных элементов.

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

Для простой сцены, вроде той, что показана на Рис. 8 .93, а, окончательный список приоритетов можно получить непосредственно. Например, эти многоугольники можно упорядочить по их максимальному или минимальному значению координаты z. Однако уже для сцены, показанной на Рис. 8 .93 b, окончательный список приоритетов по глубине невозможно получить простой сортировкой по z. Если P и Q с рис. Рис. 8 .93, b упорядочены по минимальному значению координаты z (zmin), окажется, что Р в списке приоритетов по глубине будет стоять перед Q. Если их записать в буфер кадра в таком порядке, то получится, что Q частично экранирует P. Однако фактически P частично экранирует Q. Правильный порядок в списке приоритетов будет тогда, когда P и Q поменяются местами.

Рис. 8.93. Установление приоритетов для многоугольников

Другие трудности показаны на Рис. 8 .94. Здесь многоугольники циклически перекрывают друг друга. На Рис. 8 .94, а P находится впереди Q, который лежит впереди R, который, в свою очередь, находится впереди P. На Рис. 8 .94, b P экранирует Q, a Q экранирует P. Аналогичное циклическое экранирование возникает при протыкании многоугольников; например, на рис. 5.12 показано, как треугольник протыкает прямоугольник. Там прямоугольник экранируется треугольником, и наоборот. В обоих примерах окончательный список приоритетов невозможно установить сразу. Выход из положения заключается в циклическом разрезании многоугольников по линиям, образованным пересечениями их плоскостей, до тех пор, пока не будет получен окончательный список приоритетов. Такие линии показаны пунктиром на Рис. 8 .94.

Рис. 8.94. Циклически перекрывающие многоугольники

Ньюэл М., Ньюэл Р. и Санча предложили специальный метод сортировки для разрешения конфликтов, возникающих при создании списка приоритетов по глубине. Этот метод включен в состав алгоритма Ньюэла - Ньюэла - Санча, который излагается ниже. В алгоритме динамически вычисляется новый список приоритетов перед обработкой каждого кадра сцены. Не накладывается никаких ограничений на сложность сцены и на тип многоугольников, используемых для описания элементов сцены. Первоначальный алгоритм Ньюэла - Ньюэла - Санча был предназначен для обработки трехмерных тел. Это расширение не ограничено рамками многогранников. Оно может, кроме того, обрабатывать тела смешанных типов в рамках одной сцены.