Научная статья на тему 'О трассировке лучей'

О трассировке лучей Текст научной статьи по специальности «Прочие технологии»

CC BY
212
14
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по прочим технологиям, автор научной работы — Пискарев Алексей Валерьевич

Эта рубрика для тех, кто умеет открывать и переоткрывать для себя и других плодотворные идеи и красивые алгоритмы. В первом номере статья об одном способе построения изображения в компьютерной графике.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «О трассировке лучей»

■ ■*'*' ж i

*

УЧЕБНАЯ МАСТЕРСКАЯ

Пискарев Алексей Валерьевич

О ТРАССИРОВКЕ ЛУЧЕЙ

Одним из наиболее эффективных способов построения реалистических изображений на основе гипотетических сцен является так называемый метод трассировки лучей (ray tracing).

Человеческий глаз "видит" различные предметы из-за того, что он поглощает световые лучи, отраженные от этих предметов.

Рубрика "Учебная мастерская" предназначена для публикаций преподавателей, студентов, школьников и всех тех, кто неравнодушен к компьютерным инструментам, кто любит мастерить программы и ценит красивые идеи и результаты.

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

Метод трассировки лучей сводится к моделированию "судьбы" луча, выпущенного источником света. Выпущенный луч, распространяясь прямолинейно, падает на какой-нибудь из объектов сцены. На

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

Метод отслеживания луча от момента выхода его из источника света плох тем, что большинство выпущенных лучей никогда не попадут в глаз наблюдателя; невозможно предсказать, попадет очередной луч в глаз или нет. Поэтому чаще практикуется метод "обратной" трассировки лучей, который обычно и понимается под названием "трассировка лучей". В методе обратной трассировки отслеживается, откуда пришел луч, под определенным углом попавший в глаз наблюдателя. (Правильность такого подхода объясняется принципом обратимости хода луча света, который гласит, что луч, "двигаясь" в противоположном направ-

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

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

Рассмотрим подробнее процесс определения освещенности. Пусть мы определили, что некий луч 1 попал к нам в глаз, побывав в точке А поверхности О. В точке А восстановлен перпендикуляр п, отмечены луч падающего света г, луч I света, проникающею из "нижней" среды, угол падения света а и угол отражения света (3, а также угол х между лучом I и нормалью п (схема 1). Чтобы определить освещенность поверхности О в точке А, найдем отдельные составляющие этой освещенности, привносимые лучами 1 и г , а также попытаемся определить осве-щенноаъ поверхности вследствие диффузных отражения и преломления.

Определим прямое освещение точки А источниками света. Чтобы это сделать, для каждого источника света 8 построим отрезок А8 и проверим, не пересекается ли этот отрезок с какими-либо объектами

Схема 1

сцены. Если пересекается, то мы не станем рассматривать прямое освещение точки А соответствующим источником. Для определения освещения точки А источником S следует вычислить угол ср (см. схему); понятно, что, чем меньше угол ср, тем более яркой видится нам точка А. Поэтому для определения прямого освещения точки поверхности необходимо задаться некоторой функцией р, которая определяла бы освещенность точки А в зависимости от угла ф; при ф=0 р принимает определенное положительное значение, при ф, возрастающем от 0 до я/2, р монотонно уменьшается до нуля. Чаще всего в качестве такой функции берут определенную натуральную степень косинуса ф: р = cos" ф . В таком случае показатель п именуется "коэффициентом Фонга"; чем большее значение этого коэффициента мы назначим, тем быстрее будет спадать освещенность точки с ростом ф, тем уже, стало быть, будет световое пятно на поверхности.

Определим информацию, приносимую лучом г. Для этого из точки А выпустим луч в направлении, противоположном г, и отследим его судьбу аналогично лучу i. Так же поступим с лучом t.

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

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

Распространение света в однородной среде происходит прямолинейно и с постоянной скоростью. При этом свет затухает, и затухание это происходит по экспоненциальному закону, то есть с прохождением любых двух равных по длине отрезков пути в одной и той же среде свет затухает в одно и то же количество раз. Интенсивность света, прошедшего расстояние I: I = 10е~'м . Здесь 10 - начальная интенсивность света, [3 - коэффициент затухания (свойство среды распространения). Это обстоятельство учитывается при подсчете информации, приносимой вновь выпускаемым лучом: готовая цифра домножается на е-«"-

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

преломленный. Эти два луча трассируются аналогично первому. Мы отказываемся от отслеживания нового луча, как только станет понятно, что в конечную картину он не приносит заметного вклада: это тогда, когда новый луч стал слишком далеким "потомком" первого луча, или когда новый луч должен пройти слишком большое расстояние, чтобы попасть в наше изображение.

На второй странице обложки приведен пример картины, построенной с применением метода обратной трассировки лучей. В пространстве сцены расположена "комната" из шести плоскостей, разных по свойствам, стеклянная колонна, два шара: матовый красный и глянцевый зеленый, и источник света (схема 2).

Дня примера на второй странице обложки приведены в качестве рисунков 2 и 3 изображения той же сцены, что и на рисунке 1. Конфигурация сцены та же, и так же расположен "наблюдатель", но в сцене на рисунке 2 объекты не отражают света (коэффициенты вклада для отраженного луча для всех объектов равны нулю); в просчете изображения сцены на рисунке 3 применена менее глубокая рекурсия при трассировке лучей: на рисунке 1 для каждого исходного луча отслеживались его "потомки" десятого "колена", а на рисунке 3 - только второго. Также на рисунке 3 для красного шара задан более высокий, чем на рисунке 1, коэффициент Фонга; обратите внимание, что световое пятно на красном шаре на рисунке 3 уже, чем на рисунке 1.

Для более подробного ознакомления с возможностями метода трассировки лучей без погружения в возможные насущные проблемы можно почитать книги, приведенные в списке литературы.

ru к iifiï.": лис«.ете

засисзш цршшршшш ш срелы M'SDOS. стр -г—шзвЁ§вЁЯШШЛ 1 форма« ЗМР ne mît "- -заслоиивэ удаче». Пс« п рогт i» « ж «СИВ •% ЗШШКЪ L' ' Г Ç4*T M ы. опис-мяиые i i nue алгоритмы, разрабоаанк » ira:- ti^Ai'nneciofl пиошш №39 if м i ffc мербург). Об испс i :>:иш цроернамси tsict s факте README IXT

Литература.

Шнкин E.B. Б ope сков A.B. Компьютерная »рафика. Динамика, ические изображения. Москва: ДИАЛОГ-МИФИ, 1995;

2 Иванов В.П. Батраков A.C. Трехмерная компьютерная графика. Москва: Радио и связь, 1995.

¡1 иска-*4 Алексей Валерьевич в 1996 году закончил физико-.чаги-чатическхю гимназию \30, в настоящее время студент II курса факультета информатики и вычислительной техники СПбГЭТУ.

1(л*сб(са xcffatfcHutca

nfafCKAjAmt, aaadfem azefeeffuiù луг 6- глау. или Нет.

i Надоели баннеры? Вы всегда можете отключить рекламу.