
ОСНОВЫ МЕТОДА ТРАССИРОВКИ ЛУЧЕЙ
198
b > DefMaterial.Kt = 0.0;
b > DefMaterial.p = 5;
b > DefMaterial.Med = Glass;
b > DefMaterial.Color = 1;
Scene > Add ( b );
Scene > Add ( Light1 );
Background = SkyBlue;
SetCamera ( Vector ( 0 ), Vector ( 0, 0, 1 ), Vector ( 0, 1, 0 ) );
RenderScene ( 1.5, 1.0, 300, 200, "SAMPLE7.TGA" );
}
Распределенная трассировка лучей
Несложно заметить, что ряд изображений, построенных в предыдущих примерах, несет
в себе заметные погрешности, наиболее заметными из которых являются "лестничные" линии
и пропадающие точки.
Эти характерные явления для классической трассировки лучен носят название aliasing
defects. Они связаны с тем, что каждый пиксел фактически трактуется как бесконечно малая
точка на регулярной сетке, хотя на самом деле пиксел является прямоугольной областью и его
цвет определяется путем суммирования по всем лучам, проходящим
через эту область, т. е. является интегралом по этой области.
Рассмотрим несколько примеров для объяснения этих явлений.
Пример 1
Пусть границей объекта является наклонная линия.
Тогда цвет пиксела однозначно определяется тем, попал ли
соответствующий луч в объект или нет (см. рис. 4).
Пример 2
Рассмотрим объект с кирпичной текстурой и с достаточно
тонкими линиями прослойки. Тогда, даже если большая часть лучей,
проведенных через соответствующий пиксел, попадает в прослойку,
возможно, что луч, выпущенный из центра пиксела, попадет мимо
прослойки, и цвет пиксела ошибочно будет принят за цвет кирпича, а не
прослойки. Это приводит к пропадающим точкам (рис. 5).
Очевидное решение увеличить разрешение сетки и использовать
для одного пиксела не один, а несколько лучей, усредняя их значения,
способно лишь частично улучшить качество, но не в состоянии полностью избавиться от них.
Одним из наиболее распространенных и мощных средств, используемых для борьбы с
этими дефектами, является так называемая распределенная трассировка лучей (Distributed
Ray Tracing). При этом для вычисления соответствующего интеграла используется метод Монте
Карло.
Рассмотрим случайную точку, равномерно распределенную в области пиксела, и
оттрассируем луч, проходящий через эту точку. Тогда освещенность, приносимая таким лучом,
является случайной величиной и ее математическое ожидание соответствующим
интегралом. Поэтому для вычисления цвета пиксела достаточно оттрассировать несколько
равномерно распределенных случайных лучей и взять среднее значение.
Существуют разные способы выбора таких точек. Наиболее распространенным
является метод, основанный на "шевелении" регулярной сетки. Он заключается в том, что
область пиксела разбивается на n
1
х n
2
одинаковых частей и в каждой из них выбирается
равномерно распределенная случайная точка, через которую проводится луч. I Этот метод
позволяет полностью избавиться от aliasingпогрешностей, при этом в изображение вносится