КГ_4глава (1024110), страница 10
Текст из файла (страница 10)
Подставим эти значения в формулы преобразования координат, учитывая, что радиус-вектор нового трассируемого луча направлен противоположно направлению оси Z i+1, то есть (х, у, z) = (-xr, –yr , -zr). Запишем формулы в следующем виде:
В матричной форме
Матрица Ai+1 соответствует аффинному преобразованию сдвига и поворота. В ходе трассировки лучей нам необходимо выполнять преобразования из мировой системы в систему координат текущего луча. Обозначим матрицу преобразований через Мi+1
^Поскольку М1= А1 то
Таким образом, матрица для системы координат нового луча образуется умножением матрицы предыдущего луча на матрицу сдвига и поворота.
Важным моментом при расчетах отражения и преломления является определение нормали к видимой для текущего трассируемого луча стороны участка поверхности (рис. 4.55).
Введение локальной системы координат значительно упрощает такой выбор направления нормали. Можно руководствоваться следующим правилом — среди двух противоположно направленных векторов нормали (N и —N) выбирается тот, у которого соответствующий радиус-вектор в локальной системе координат (Xi, Yi, Zi) имеет положительную координату Z.
| Рассмотрим вычисление вектора зеркально отраженного луча (Луч i). Для : этого воспользуемся уже известной нам векторной формулой, которую здесь [ запишем для единичных векторов: R = 2 N (N S) - S. Вычисляемый по этой формуле вектор R направлен так же, как искомый вектор Лучi+1, а единичный вектор S нацелен противоположно вектору падающего луча, то есть век-: тору Луч t
Рис. 4.55. К выбору нормали видимой стороны объекта
Еще раз подчеркнем, что речь здесь идет о лучах обратной трассировки, при которой падающий и отраженный лучи имеют противоположный смысл световым лучам, распространяемым в реальном случае.
Координаты вектора S составляют (0, 0,1) в локальной системе. Обозначив координаты единичного вектора нормали N через (xN, yN, zN). Найдем вначале скалярное произведение (N S) = (0 • xN + 0 • yN + 1 • zN) = zN. Координаты век-j тора отраженного луча (R) составляют
Очевидно, что направление вектора не изменится, если все его координата! разделить на два. Тогда можно записать для координат радиус-вектора отраженного луча (Луч i+1 = 0.5 К) такие формулы:
Теперь займемся вычислением координат преломленного луча. Для этого воспользуемся формулой идеального (зеркального) преломления:
Так как вектор S = (0, 0, 1), то
Если подкоренное выражение отрицательно, то преломленный луч не может быть построен.
Использование локальной системы координат, ось Z которой совпадает с линией текущего трассируемого луча, позволяет упростить также определение пересечения с оболочкой объекта. Наиболее просто определяется пересечение луча с оболочкой-шаром. Поскольку в любой локальной системе координат, задаваемой линейными преобразованиями, проекция шара есть круг, то достаточно узнать локальные координаты центра круга (Хс и Yc) и проверить, выполняется ли следующее соотношение: (Хс)2 + (Ус)2 < (радиус оболочки)2. Если выполняется, то текущий луч пересекает оболочку.
В качестве оболочки можно использовать и другую форму, например цилиндр или параллелепипед. Поскольку определение пересечения луча с произвольно повернутым цилиндром или параллелепипедом уже не столь простая задача, то здесь можно использовать следующее. Хотя расположение осей координат X, Y локальной системы ранее было нам безразлично (главное, чтобы ось Z лежала бы на линии луча), но, оказывается, приведенные выше формулы преобразования координат для локальной системы обеспечивают сохранение одинаковой ориентации для вертикальных линий. Ранее мы уже отмечали это свойство выбранного способа поворота осей применительно к аксонометрической проекции. Поэтому возможно определить проекции оболочки для всех поворотов локальных систем координат в виде прямоугольника некоторых размеров в плоскости (XOY). Определение пересечения луча с оболочкой сводится к проверке, находится ли точка локальных координат (Х i , Y i) = (0, 0) внутри прямоугольника, описывающего оболочку.
А теперь сделаем общие выводы по методу обратной трассировки лучей. Положительные черты:
1. Универсальность метода, его применимость для синтеза изображений достаточно сложных пространственных схем. Воплощает многие законы геометрической оптики. Просто реализуются разнообразные проекции.
2. Даже усеченные варианты данного метода позволяют получить достаточно реалистичные изображения. Например, если ограничиться только первичными лучами (из точки проецирования), то это дает удаление невидимых точек. Трассировка уже одного-двух вторичных лучей дает тени, зеркальность, прозрачность.
3. Все преобразования координат (если таковые есть) линейны, поэтому достаточно просто работать с текстурами.
4. Для одного пиксела растрового изображения можно трассировать несколько близко расположенных лучей, а потом усреднять их цвет для устранения эффекта ступенчатости (антиалиасинг).
5. Поскольку расчет отдельной точки изображения выполняется независимо от других точек, то это может быть эффективно использовано при реализации данного метода в параллельных вычислительных системах, в которых лучи могут трассироваться одновременно.
Недостатки:
1. Проблемы с моделированием диффузного отражения и преломления.
2. Для каждой точки изображения необходимо выполнять много вычисли тельных операций. Трассировка лучей относится к числу самых медленных алгоритмов синтеза изображений.