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

617_Zabelin_L.JU._Osnovy_komp'juternoj_grafiki_

.pdf
Скачиваний:
41
Добавлен:
12.11.2022
Размер:
8.13 Mб
Скачать

14.Модели закраски

14.1.Общие сведения

Существует несколько основных способов закраски многоугольников, например однотонная закраска, закраска с интерполяцией интенсивности и закраска с интерполяцией векторов нормали [23].

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

Вметоде закраски с интерполяцией интенсивности (метод Гуро) нормали

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

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

14.2. Метод Гуро (закраска с интерполяцией интенсивности)

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

тов [24].

Метод Гуро основывается на идее закрашивания каждой плоской грани не одним цветом, а плавно изменяющимися оттенками, вычисляемыми путем интерполяции цветов примыкающих граней. Закрашивание граней по методу Гуро осуществляется в четыре этапа:

91

1.Вычисляются нормали к каждой грани.

2.Определяются нормали в вершинах. Нормаль в вершине определяется усреднением нормалей примыкающих граней.

Рисунок 14.2.1. – Нормали каждой грани

3.На основе нормалей в вершинах вычисляются значения интенсивностей в вершинах согласно выбранной модели отражения света.

4.Закрашиваются полигоны граней цветом, соответствующим линейной интерполяции значений интенсивности в вершинах.

Вектор нормали в вершине равен:

Na

 

N1 N

2

N3

(14.2.1.)

3

 

 

 

 

 

 

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

Рисунок 14.2.2. – Заполнения грани горизонталями в экранныхкоординатах

Интерполированная интенсивность I в точке (X,Y) определяется исходя из пропорции

I I1

 

 

I2 I1

 

=> I I1

(I2

I1 )( X X1 )

(14.2.2.)

X X

 

X 2 X

 

 

 

 

1

1

 

X

2 X1

 

 

 

 

 

 

 

 

92

 

 

 

 

Значения интенсивностей I1 и I2 на концах горизонтального отрезка пред-

ставляют собой интерполяцию интенсивности в вершинах:

 

 

I1 Ib

 

Ic Ib

,

I2 Ib

 

Ia Ib

,

(14.2.3.)

 

Y Yb

Yc Yb

 

Ya Yb

 

 

 

Y Yb

 

 

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

14.3.Недостатки метода Гуро

Спомощью метода Гуро можно изображать только матовые поверхности, не имеющие зеркальных бликов (т.к. блик будет размазываться по поверхности

искроется). Действительно, в случае, когда блик расположен внутри грани и не доходит до вершин, зеркальная составляющая в вершинах равна нулю и, следовательно, блик не появится при интерполяции.

У метода Гуро есть еще один недостаток. Дело в том, что возникает классический оптический эффект (Mach banding): на границах четырехугольников человеческий глаз усиливает переходы и границы воспринимаются как светлые линии (это происходит из-за разрыва производной).

Желание устранить эти недостатки приводит нас к методу Фонга.

14.4.Метод Фонга (закраска с интерполяцией нормали)

Аналогичен методу Гуро, но при использовании метода Фонга для определения цвета в каждой точке интерполируются не интенсивности отраженного света, а векторы нормалей [24].

Определяются нормали к граням.

По нормалям к граням определяются нормали в вершинах. В каждой точке закрашиваемой грани определяется интерполированный вектор нормали.

По направлению векторов нормали определяется цвет точек грани в соответствии с выбранной моделью отражения света.

Рассмотрим, как можно получить вектор нормали в каждой точке грани.

Для интерполяции будем оперировать векторами Na' , Nb' и Nc' , исходящими из центра координат плоскости проецирования и параллельными соответствующим нормалям Na , Nb и Nc в вершинах a, b и c.

93

 

 

 

 

Рисунок 14.4.1. – Вектор нормали в каждой точке грани

Сначала найдем N1' и N2'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X

 

 

 

X

 

 

 

( X

 

 

X

 

 

)(Y Y ) /(Y Y )

 

 

 

 

 

 

 

N1

 

 

 

Nb

 

 

 

 

Nc

 

 

 

Nb

 

 

b

c

 

b

 

 

 

 

N1' YN1

 

YNb (YNc YNb )(Y Yb ) /(Yc Yb )

 

 

,

 

(14.4.1.)

 

Z

 

 

 

 

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N1

Nb

(Z

Nc

Z

Nb

)(Y Y ) /(Y Y )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

c

b

 

 

 

 

 

 

X

 

 

 

X

 

 

( X

 

 

X

 

 

 

)(Y Y ) /(Y Y )

 

 

 

 

 

 

 

N 2

 

 

 

Nb

 

 

 

Na

 

 

 

 

Nb

 

b

a

 

b

 

 

 

 

N2' YN 2

 

YNb

(YNa YNb )(Y Yb ) /(Ya Yb )

 

 

 

 

(14.4.2.)

 

Z

 

 

 

 

Z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N 2

Nb

 

(Z

Na

Z

Nb

)(Y Y ) /(Y Y )

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

a

b

 

 

 

 

 

где X Na ,YNa , ZNa , X Nb ,YNb , ZNb , X Nc ,YNc , ZNc

– координаты векторов Na' , Nb'

и Nc' . Теперь найдем координаты вектора N ' .

 

 

 

 

 

 

 

 

X

N

 

X

N1

 

( X

N 2

X

N1

)( X X

) /( X

 

X

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

2

 

 

1

 

 

N ' YN

YN1 (YN 2 YN1 )( X X1 ) /( X 2 X1 )

 

 

(14.4.3.)

 

 

 

 

 

 

 

 

 

 

(ZN 2 ZN1 )( X X1 ) /( X 2 X1 )

 

 

 

 

 

 

 

 

 

 

ZN

 

ZN1

 

 

Вектор

N '

 

параллелен вектору N для нормали в точке (X,Y), поэтому его можно

 

 

использовать для расчета отражения света та же, как и вектор нормали N.

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

94

14.5. Недостатки метода Фонга

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

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

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

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

по N1 и N3 без учета N2, в то время как при закраске граней 2 и 3 N2 учитывается. Это может привести к нежелательным визуальным эффектам.

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

Общие черты и отличия методов Гуро и Фонга

Их можно показать на примере цилиндрической поверхности, аппроксимированной многогранником. Пусть источник света находится позади нас. Проанализируем закрашивания боковых граней цилиндра (рисунок 14.5.1).

Рисунок 14.5.1. – Закрашивание боковых граней цилиндра

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

95

точки передней грани имеют одинаковый цвет, что, очевидно, неправильно. Метод Фонга дает правильное закрашивание. Если интерполировать векторы нормалей передней грани, то по центру будут интерполированные нормали, параллельные лучам света. По методу Фонга центр передней грани будет светлее, чем края.

Методы Гуро и Фонга хороши тем, что они просты и с их помощью можно получить довольно хорошую закраску, но поверхности получаются неинтересными и какими-то безжизненными. Текстуры помогут нам избежать этого.

14.6. Текстурирование

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

(u, v) F(x, y, z) ,

(14.6.1.)

где u, v – координаты текстуры, а x, y, z – координаты текстурируемого объекта.

В качестве функции проецирования могут использоваться стандартные функции отображения: цилиндрическая и сферическая.

Рассмотрим цилиндрическое отображение: имея параметрическое задание цилиндрической поверхности ( , z) , легко получить функцию проецирования для координат текстуры. Произвольная точка кривой поверхности цилиндра

радиуса r и высоты h задается следующим образом: (r cos , r sin , hz) ,

0 2 , 0 z 1, (u, v) ( / 2 , z),u, v 0,1

(14.6.2.)

Функция проецирования для этого варианта представлена на рисунке

14.6.1.

Отображение на сферу более проблематично. Проецирование плоскости на сферическую поверхность приводит к полному разрушению рисунка на полюсах. Рассмотрим в качестве примера наложение текстуры на часть сферы. Она параметризована следующим образом: (r cos sin , r sin sin , r cos ) , где

0 / 2 , / 4 / 2 .

Тогда мы можем получить координаты текстуры из соотношения:

96

(u, v)

 

,

( / 2)

.

(14.6.3.)

/ 2

( / 4)

 

 

 

 

Рисунок 14.6.1. – Функция проецирования

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

· На первом шаге двумерная область текстуры отображается на простую трехмерную промежуточную поверхность, например, цилиндрическую:

·

T (u,v) T '(xi, yi, zi)

Этот этап называется S-mapping. · На втором шаге полученная

поверхность объекта (O-mapping):

·

(14.6.4.)

трехмерная текстура проецируется на

T '(xi, yi, zi) O(x, y, z) .

(14.6.5.)

Комбинация этих операций позволяет текстурировать объекты «естественным» способом. В качестве промежуточной поверхности предлагается исрользовать произвольно ориентированную плоскость, кубическую, цилиндрическую или сферическую поверхности, выбор одной из которых зависит, прежде всего, от геометрической формы поверхности текстурируемого объекта. Существует также несколько вариантов операции O-mapping. Соответствие между координатами могут быть получены следующим образом:

При пересечении отраженного от поверхности объекта луча и промежуточной поверхности T’.

97

При пересечении нормали к поверхности в точке (x, y, z) c T’.

При пересечении линии, проходящей через (x, y, z) и центр тяжести объекта, с T’.

При пересечении линии, идущей из (x, y, z) к T’ , ориентация которой задается нормалью к T’ в точке (xi, yi, zi).

Рисунок 14.6.2. – Примеры соответствий между координатами

14.7. Пирамидальное фильтрование (Mip-mapping)

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

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

Пусть исходное изображение имеет размер 2n на 2n. Построим по нему последовательность изображений, являющихся копиями данного и имеющими размеры 2n-1, 2n-2 и т. д. Размер последнего изображения будет 1 на 1 пиксель. В результате получим пирамиду (mip-map), состоящую из (n+1) уровня, где на нижнем (0-м) уровне находится исходное изображение. Вся пирамида занимает объем памяти, необходимый для размещения 22n-1 пикселей.

98

Рисунок 14.7.1. – Способ усреднения пикселей

Доступ к пирамиде осуществляется с помощью трех координат: u, v, d, где u и v – координаты текстуры, а d (compression) – мера компрессии текстуры, и может быть рассмотрена как вертикальная координата пирамиды.

Рисунок 12.7.2. – Определение доступа к пирамиде посредством трех координат

Изображение k-того уровня строится из изображения (k-1)-ого уровня следующим образом: цвет пикселя определяется билинейной интерполяцией цветов соответствующих 4-ех пикселей изображения предшествующего уровня.

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

15.1.методы трассировки

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

99

что в их основе лежат простые и ясные понятия, отражающие наш опыт восприятия окружающего мира [22].

Итак, полагаем, что окружающие нас объекты обладают по отношению к свету такими свойствами:

излучают;

отражают и поглощают;

пропускают сквозь себя.

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

Рисунок 15.1.1. – Распространение излучения равномерно во все стороны(солнце) и конусом (прожектор)

Свойство отражения (поглощения) можно описать характеристиками диффузного рассеивания и зеркального отражения.

Рисунок 15.1.2. – Свойства отражения

Прозрачность можно описать ослаблением интенсивности и преломлением. Распределение световой энергии по возможным направлениям световых

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

100