Graphics & Media Lab. >> Курсы >> Курс Ю.М.Баяковского 1999

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

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

Метод трассировки лучей математически сложен, но прост концептуально. Что реально делает компьютер, так это отслеживает лучи света, идущие от источника в глаз. Когда выпускаются лучи как бы из глаза к источнику вместо того, чтобы идти от источников к глазу, то это называется обратной трассировкой (в отличие от первой - прямой). Обратная трассировка более эффективна, так как гарантирует, что число лучей, достигших глаза, будет точно таким же, как число пикселов изображения. Для того, чтобы представить этот процесс, считайте, что ваш экран монитора - это окно, через которое вы можете видеть трехмерную модель, нарисованную вашим компьютером. Мнимые линии, называемые лучами, проводятся из вашего глаза через каждый пиксел экрана и проецируются на модель. Каждый раз, когда луч пересекает некоторую поверхность в некоторой точке, из этой точки испускаются дополнительные лучи. Если поверхность отражающая, то генерируется отраженный луч. Если поверхность пропускает свет, то генерируется пропущенный луч, причем учитывается тот факт, что луч меняет направление, когда проходит из одной среды в другую. Это явление называется преломлением света. Некоторые поверхности одновременно и отражают, и пропускают лучи, и тогда испускаются оба вида лучей. Пути этих лучей отслеживаются по всей модели, и если лучи пересекают другие поверхности, то снова испускаются лучи. В каждой точке, где луч пересекает поверхность, рисуется луч тени из точки пересечения к каждому источнику света. Если этот луч пересекает другую поверхность перед тем, как достигнуть источника света, то на ту поверхность, с которой был послан луч, падает тень с поверхности, блокирующей свет. Математически, все эти лучи вместе с данными о физических характеристиках объектов модели (цвет, прозрачность, зеркальность и т.д.) позволяют компьютеру определить цвет и его интенсивность для каждой точки изображения.

Один из недостатков обычного метода трассировки лучей в том, что рассматриваемые поверхности не имеют текстуры как реальные объекты. Они гладкие - иногда слишком гладкие. Для того, чтобы это скомпенсировать, программы трассировки лучей используют текстурные отображения или bump-mapping для того, чтобы придать шероховатость поверхностям модели. С помощью текстурного отображения получают изображение, где поверхность приобретает текстуру -- дерева или мрамора, например. Эти методы извлекают пользу из того факта, что трассировка, как и другие методы закраски, использует в своих вычислениях нормаль. Bump-отображение возмущает поверхность объекта по определенному образцу, преобразуя гладкую поверхность так, что она выглядит шероховатой и неоднородной.

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

Как работает метод трассировки лучей

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

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

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

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

5. Влияние всех лучей, сгенерированных явно или неявно с помощью начального луча, суммируется и результат определяет RGB-значение данной точки.

6. Эта сцена, полученная методом трассировки лучей, создавалась 30 минут на компьютере 50 MHz -486 DX с помощью известной программы Полирэй. Сфера слева на переднем плане имеет зеркальную поверхность. Сфера в центре имеет гладкую непрозрачную поверхность, а сфера справа - полностью стеклянная. Обратите внимание на несколько полученных отражений, преломленное изображение золотой сферы в стеклянной и на тени, полученные от двух источников света. Заметим также, что мы получили изображение в перспективной проекции и с удаленными невидимыми поверхностями. Это естественные результаты процесса трассировки и эти проблемы не требуют специального рассмотрения.


 
Graphics & Media Lab. >> Библиотека | Курсы | Графикон

Hosted by Graphics & Media Lab
http://graphics.cs.msu.su
lab_logo
mailto: Laboratory