Добавил:
sergeevpavel0406@mail.ru СОВА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика

.pdf
Скачиваний:
83
Добавлен:
06.03.2018
Размер:
6.96 Mб
Скачать

4.2. Методы и алгоритмы трехмерной графики и геометрии

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

Алгоритм трассировки лучей. Трассировка лучей — рейтресинг (ray tracing), также известная как выбрасывание лучей — рейкастинг (ray casting), определяет видимость поверхностей, прослеживая воображаемые лучи света от глаза наблюдателя до объектов в сцене. Главная идея, лежащая в основе этого алгоритма, заключается в том, что наблюдатель видит любой объект посредством испускаемого неким источником света, который падает на этот объект и затем каким-то путем доходит до наблюдателя. Свет может достичь наблюдателя, отразившись от поверхности, преломившись или пройдя через нее. Если проследить за лучами света, испускаемыми источником света, то можно убедиться, что весьма немногие из них дойдут до наблюдателя, следовательно, этот процесс вычислительно неэффективен. Однако можно отслеживать (трассировать) лучи в обратном направлении, т. е. от наблюдателя к объекту. Выбираются центр проецирования (глаз наблюдателя) и окно вида на произвольной плоскости. Окно вида можно представить в виде правильной сетки, элементы которой соответствуют пикселам в соответствующей разрешающей способности. Тогда для каждого пиксела в окне луч света запускается из центра проецирования через центр пиксела в сцену, как показано на рис. 4.63.

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

Объекты

Точка

наблюдения

Окно вида

Точки пересечения

Луч

 

луча с объектами

трассировки

Рис. 4.63. Трассировка луча из точки наблюдения

355

4. Методы, алгоритмы и форматы файлов компьютерной графики

дого луча отслеживается, чтобы определить, какие именно объекты сцены, если таковые существуют, пересекаются с данным лучом. Необходимо проверить пересечение каждого объекта сцены с каждым лучом. Если луч пересекает объект, то определяются все возможные точки пересечения луча и объекта. Можно получить большое количество пересечений, если рассматривать много объектов. Эти пересечения упорядочиваются по глубине. Пересечение с максимальным значением z представляет видимую поверхность для данного пиксела. Атрибуты этого объекта используются для определения характеристик пиксела.

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

Факт пересечения трехмерного луча со сферой определяется просто. В частности, если расстояние от центра сферической оболочки до луча превосходит радиус этой сферы, то луч не пересекает оболочки. Следовательно, он не может пересечься и с объектом. Поэтому тест со сферической оболочкой сводится к определению расстояния от точки до трехмерной прямой, т. е. луча. Будем использовать параметрическое представление прямой, проходящей через точки Р\(*i, У\, Z\) и Р22, у2, z2) в виде функции P(t) = /} + 2 —P\)t с компонентами

х = Xj + 2 X) )t = Xj + at;

У=У\+(У2-У\)*=У\

Описывающая

сфера

Описывающий

параллелепипед

Рис. 4.64. Сферическая и прямоугольная оболочки

356

4.2. Методы и алгоритмы трехмерной графики и геометрии

Тогда параметр t, определяющий ближайшую точку P(t), равен

t = -

a2+b2+c2

Если расстояние d от прямой до этой точки, определяемое из соотношения

d2 =(x-x0)2 + (y-y0)2 + (z-z0)2,

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

чем тест со сферической оболочкой.

Вычисления пересечений для параметрических поверхностей более сложны. Анализ проводится для элементов поверхности. Если луч пересекает сферическую оболочку элемента поверхности, то этот кусок разбивается на подэлементы. Затем луч проверяется на пересечение со сферическими оболочками подэлементов. Если луч пересекается со сферической оболочкой какого-нибудь подэлемента, то последний разбивается также на подэлементы. Процесс завершается, если ни одна из сферических оболочек не пересечена или если достигнут заранее определенный их минимальный размер. Эти сферические оболочки минимального размера и являются искомыми пересечениями луча и элемента поверхности.

4.2.2. Алгоритмы закрашивания видимых поверхностей

Рассмотрим сначала модели освещения поверхностей. Световая энергия, падающая на поверхность, может быть поглощена, отражена или пропущена. Частично она поглощается и превращается в тепловую энергию, а частично отражается или пропускается. Объект можно увидеть, только если он отражает или пропускает свет; если же объект поглощает весь падающий свет, то он будет невидим, и в этом случае его называют абсолютно черным телом. Количество поглощенной, отраженной или пропущенной энергии зависит от длины волны света. При освещении белым светом, в котором интенсивность всех длин волн снижена примерно одинаково, объект выглядит серым. Если поглощается почти весь свет, то объект кажется черным, а если только небольшая его часть — белым. Если поглощаются лишь определенные длины волн, то у света, исходящего от объекта, изменяется распределение энергии и объект выглядит цветным. Цвет объекта определяется поглощаемыми длинами волн. Свойства отраженного све-

357

4. Методы, алгоритмы и форматы файлов компьютерной графики

та зависят от строения, направления и формы источника света, от ориентации и свойств поверхности. Это учитывается в различных моделях освещения.

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

/=*»•,

где / — итоговая интенсивность света; kt — коэффициент встроенной интенсивности объекта.

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

Предположим, что есть рассеянный, ненаправленный источник света — продукт множественных отражений света от многих поверхностей, существующих в среде. Такой свет называется рассеянным светом. Если принять, что рассеянный свет освещает одинаково все поверхности во всех направлениях, то уравнение для интенсивности освещения принимает следующий вид:

где 1а — интенсивность рассеянного света, постоянная для всех объектов; ка — коэффициент рассеяния (количество рассеянного света, отраженного от поверхности объекта).

Коэффициент рассеяния — свойство поверхности материала, он не соответствует непосредственно никакому физическому свойству реальных материалов и служит только для целей визуализации объектов, которые иначе нельзя показать.

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

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

358

Рис. 4.65. Диффузное отражение света

4.2. Методы и алгоритмы трехмерной графики и геометрии

Свет точечного источника диффузно отражается от идеальной поверхности по закону косинусов Ламберта: интенсивность отраженного света пропорциональна косинусу угла между направлением света и нормалью к поверхности, т. е.

/ = / ^ cos(6); 0 < е < к / 2 ,

где / — интенсивность отраженного света; /; — интенсивность точечного источника в направлении L; kd — коэффициент диффузного отражения; 9 — угол между направлением света L и нормалью к

поверхности п (рис. 4.65), 0<9<л/2 . Если 8>л:/2, то источник света расположен за объектом. Коэффициент диффузного отражения kd зависит от материала и длины волны света, но в простых моделях освещения обычно считается постоянным.

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

I = Iaka+I,kdcos(Q); 0<6<7t/2.

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

J — J к

-; 0<9<7С/2,

1 ~1аКа

d + K

где К — произвольная константа.

 

359

Рис. 4.66. Зеркальное отражение

4. Методы, алгоритмы и форматы файлов компьютерной графики

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

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

Зеркальное отражение света является направленным. Угол отражения 0 от идеальной отражающей поверхности (зеркала) равен углу падения 9, в любом другом положении наблюдатель не видит зеркально отраженный свет. Это означает, что вектор наблюдения 5 (рис. 4.66) совпадает с вектором отражения R и угол а равен нулю. Если поверхность не идеальна, то количество света, достигающее наблюдателя, зависит от пространственного распределения зеркального отраженного света. У гладких поверхностей распределение узкое или сфокусированное, у шероховатых — более широкое.

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

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

/, =/,00(9,1)cos"(а),

где Is — интенсивность зеркально отраженного света; со(9, X) — кривая отражения, представляющая отношение зеркально отраженного света к падающему как функцию угла падения 6 и длины волны X; п — степень, аппроксимирующая пространственное распределение зеркально отраженного света.

На рис. 4.67 показана функция cos" (a) при 0 < а < л / 2 для различных п: большие значения п дают сфокусированные пространственные распределения характеристик металлов и других блестящих поверхностей, а малые — более широкие распределения для неметаллических поверхностей, например бумаги.

360

4.2. Методы и алгоритмы трехмерной графики и геометрии

Коэффициент зеркального

отражения

 

 

зависит от угла падения, однако даже при

 

 

перпендикулярном падении зеркально от-

 

 

ражается только часть света, а остальное

 

 

либо поглощается, либо отражается диф-

 

 

фузно.

Эти

соотношения определяются

 

 

свойствами вещества и длиной волны. Ко-

 

 

эффициент отражения для некоторых не-

"л 2

я/2

металлов может составлять всего 4 %, в то

Рис. 4.67. Пространственное распре-

время как для металлических материалов —

деление зеркального отражения

более

80 %.

Функция (6(0, X)

довольно

 

 

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

' = /„*„+•

d + K

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

Если имеется несколько источников света, то их эффекты суммируются. В этом случае модель интенсивности освещения имеет вид

7=1

где т — число источников света.

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

Закраска с постоянной интенсивностью. Самая простая модель закрашивания для многоугольника — закраска с постоянной интенсивностью, известная также как фасетное закрашивание, или равномерное затенение. Этот подход рассчитывает модель освещения один раз для любой точки каждого многоугольника так, что рассчитанное значение интенсивности используется для закрашивания всего многоугольника. Данный подход справедлив при следующих допущениях:

361

4.Методы, алгоритмы и форматы файлов компьютерной графики

источник освещения находится в бесконечности, так что угол между нормалью к поверхности N и направлением источника света L является постоянным во всех точках грани многоугольника;

наблюдатель находится в бесконечности, так что угол между нормалью к поверхности N и направлением взгляда V является постоянным во всех точках грани многоугольника;

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

делить единственное значение для каждого из значений L и V. Например, эти значения могут быть рассчитаны для центра многоугольника или для первой вершины многоугольника. Конечно, закраска с постоянной интенсивностью в этом случае будет не совсем правильная.

Интерполированное закрашивание. Как альтернативу оценке освещенности в каждой точке многоугольника можно использовать интерполированное закрашивание, при котором информация закрашивания многоугольника линейно интерполируется относительно значений, определенных для его вершин. Это выполнять особенно просто для алгоритма построчного сканирования изображения, который уже интерполирует значение z конечных точек промежутка сканирования.

Данный метод хорошо подходит для многогранников, но многие из поверхностей на практике криволинейны, поэтому он дает не совсем правильные результаты.

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

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

362

4. Методы, алгоритмы и форматы файлов компьютерной графики

закрашивании по методу Гуро. В каждом пикселе по строке сканирования интерполированная нормаль и новое значение интенсивности пиксела выполняется, используя любую желаемую модель освещения. На рис. 4.70 изображены две крайние нормали ребра многоугольника Л^о и iVi и нормали, интерполированные по ним до и после нормализации.

4.2.3. Детальное отображение поверхностей

Описанные выше методы отображают гладкие, однородные поверхности. Рассмотрим методы, разработанные для детального моделирования поверхностей — текстурирование, взаимные отражения от поверхностей (рейтресинг и радиосити).

Наложение текстуры. Для отображения фактуры поверхностей явное моделирование многоугольниками или другими геометрическими примитивами неприменимо. Существует альтернативный подход, известный как отображение шаблона или наложение текстуры; изображение называют картой текстуры, а ее индивидуальные элементы — элементами текстуры. Прямоугольная карта текстуры постоянно хранится в ее собственном (s, t) координатном пространстве. Программируемая текстура может быть определена специальной подпрограммой.

Как показано на рис. 4.71, наложение текстуры может быть получено за два шага. Сначала на поверхность отображается четыре угла пиксела. Для бикубического куска поверхности это отображение, естественно, определяет набор точек на координатном пространстве поверхности {и, v). Затем точки угла пиксела в координатном пространстве этой поверхности отображаются в координатное пространство текстуры (s, t). Четыре (s, t) точки в карте текстуры определяют четырехугольник, приближающий более сложную форму, которую пиксел может фактически отобразить из-за искривления поверхности. Значение для пиксела вычисляют, учитывая все элементы текстуры, расположенные в пределах четырехугольника. При этом необходимо учитывать каждую долю элемента текстуры, лежащего в пределах четырехугольника.

Карта текстуры

Поверхность объекта

Четыре угла пиксела

 

 

на экране

Рис. 4.71. Отображение текстуры от пиксела до поверхности и до карты текстуры

364