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

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

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

for all pixels

for all objects

compare z

 

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

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

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

 

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

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