После генерации луча для каждого пикселя обрабатывается список поверхностей на сцене, и определяется, пересекает ли луч поверхности. Если луч проходит через поверхность, вычисляется расстояние от пикселя до точки пересечения с ней. После того как все поверхности будут проверены на предмет пересечения лучами, наименьшее вычисленное расстояние до пересечения определяет поверхность, видимую для данного пикселя. Затем луч отражается от видимой поверхности вдоль траектории зеркального отражения (угол отражения равен углу падения). Для прозрачных поверхностей луч также посылается через поверхность в направлении преломления. Отраженные и преломленные лучи называются вторичными.
Рис. 10.55. Пути отражения и преломления для луча от пикселя, проходящего через сцену (панель а), и соответствующее бинарное дерево построения хода луча (панель б)
Затем процедура построения хода лучей повторяется для вторичных лучей. Поверхности проверяются на предмет пересечения с лучами, а ближайшая поверхность (если она есть) вдоль траектории вторичного луча используется для рекурсивного создания следующего поколения путей отражения и преломления. При рикошете лучей, выходящих из пикселей, каждая последовательно пересекаемая поверхность прибавляется к бинарному дереву построения хода лучей, как показано на рис. 10.55. Левые ветки дерева используются для представления траекторий отражения, а правые - траекторий пропускания. Максимальная глубина деревьев построения хода лучей может задаваться пользователем или определяться по объему доступной памяти. Путь луча от пикселя на бинарном дереве обрывается, если выполняется одно из перечисленных ниже условий.
• Луч не пересекает поверхность.
• Луч пересекает источник света, не являющийся отражающей поверхностью.
• Дерево дошло до максимально разрешенной глубины.
Рис. 10.56. Единичные векторы на поверхности объекта, который пересекается лучом, идущим вдоль направления и
Рис. 10.57. Путь преломленного и отраженного луча Т при прохождении через прозрачный материал СОКРАЩЕНИЕ ВЫЧИСЛЕНИЙ ПРИ РЕШЕНИИ ЗАДАЧИ ПЕРЕСЕЧЕНИЯ ЛУЧОМ ОБЪЕКТА
Расчет точки пересечения луча с поверхностью может занимать до 95% времени обработки в методе построения хода луча. Для сцены с большим числом объектов большая часть времени обработки для каждого луча - это проверка объектов, невидимых по ходу луча. Таким образом, было разработано несколько методов сокращения времени обработки, которое тратится на эти расчеты.
Рис. 10.63. Пересечение луча с плоскостью многоугольника
Рис. 10.64. Группа объектов внутри сферы
Один способ сократить расчеты пересечений - замкнуть группы соседствующих объектов в граничный объем, например, сферу или куб (рис. 10.64). Затем можно проверить, пересекает ли луч этот граничный объем. Если нет, вписанные поверхности исключаются из дальнейших проверок на пересечение. Данный подход можно расширить и включить в рассмотрение иерархии замыкающих объемов. Следовательно, несколько граничных объемов заключаются в больший объем, и проверки на пересечение выполняются иерархически. Вначале проверяется внешний граничный объем; затем (при необходимости) - меньшие внутренние граничные объемы и т.д.