Опубликован: 20.10.2007 | Уровень: специалист | Доступ: свободно
Лекция 9:

Закрашивание. Рендеринг полигональных моделей

< Лекция 8 || Лекция 9: 1234 || Лекция 10 >

Устранение ступенчатости (антиэлайзинг)

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

Распределение весов при увеличении разрешения в 4 раза

Рис. 9.9. Распределение весов при увеличении разрешения в 4 раза
Распределение весов при увеличении разрешения в 16 раз

Рис. 9.10. Распределение весов при увеличении разрешения в 16 раз

Для предотвращения сильных искажений в этом случае можно, во- первых, повышать разрешение растра, что позволяет отображать всё более мелкие детали объектов. Но у этого подхода есть свои чисто физические ограничения. Второй подход заключается в том, что растр рассчитывается с более высоким разрешением, а изображается с более низким - путем усреднения атрибутов пикселей первого более детального растра с определенными весами. Если веса одинаковы, то мы получаем равномерное усреднение, как показано на рис. 9.9. Лучших результатов можно достигнуть, если использовать разные веса у пикселей первого растра. На рис. 9.10 показано распределение весов при детализации пикселя экранного растра.

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

Рассмотрим применение этого метода на примере раскраски многоугольника. Ребро многоугольника строится с использованием алгоритма Брезенхема, описанного в "Растровое преобразование графических примитивов" . Здесь в этот алгоритм будут внесены изменения, включающие параметр максимального числа уровней интенсивностей. Определяя принадлежность пикселя многоугольнику, мы будем использовать в качестве ошибки e долю площади, принадлежащей идеальной фигуре (рис. 9.11).

Отсекаемая отрезком площадь пикселя

Рис. 9.11. Отсекаемая отрезком площадь пикселя

Рассмотрим опять случай, когда отрезок направлен в положительный квадрант координатной плоскости под углом, меньшим \pi/4. Идеальный отрезок при заданном значении целочисленной координаты i может пересекать один или два пикселя. В предыдущей версии алгоритма выбирался пиксель, центр которого располагался ближе к отрезку. Теперь интенсивность для обоих пикселей будет задаваться в зависимости от степени близости каждого из них. Инициализация пикселя будет использовать интенсивность в качестве параметра. Предполагается, что отрезок начинается с угла первого пикселя, исходя из чего и задается начальная интенсивность. Блок-схема алгоритма приведена на рис. 9.12.

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

C(\xi)=\int\limits_{-\infty}^{+\infty}K(\xi-t)f(t)dt. ( 9.9)

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

Рассмотрим в качестве свертываемой функции и ядра следующие функции:

f(x)=
\left\{
\begin{aligned}
& x \text{ при } 0\le x\le 1 \\
& 0 \text{ при } x<0 \text { и } x>1
\end{aligned}
\right. ,
\qquad
K(x)=
\left\{
\begin{aligned}
& 1 \text{ при } 0\le x\le 1 \\
& 0 \text{ при } x<0 \text { и } x>1
\end{aligned}
\right. .

Блок-схема модифицированного алгоритма Брезенхема

Рис. 9.12. Блок-схема модифицированного алгоритма Брезенхема

Тогда, в силу того, что подынтегральное выражение обращается в ноль при \xi-t<0 и при \xi-t>0, получаем

C(\xi)=\int\limits_{\xi-1}^{\xi}f(t)dt.

Учитывая вид функции f(x), получаем, что свертка будет отлична от нуля только на интервале 0<\xi<2. Значения свертки в некоторых точках приведены в таблице 9.1.

Таблица 9.1. Значения свертки в узлах
\xi 0 1/2 1 3/2 2
C(\xi) 0 1/8 1/2 3/8 0

Очевидно, что наша свертка дает площадь пересечения треугольника, образованного свертываемой функцией с квадратом, основание которого есть отрезок [\xi,xi+1] на оси OX.

Фигуры, соответствующие значениям свертки из таблицы 9.1

Рис. 9.13. Фигуры, соответствующие значениям свертки из таблицы 9.1

На рис. 9.13 приведен вид пересечения для всех пяти случаев из таблицы 9.1. Если сравнить эти результаты с рис. 9.11, то видно, что значения свертки при k\le 1 дают площадь той части пикселя, что находится внутри многоугольника (если считать y_i=0 ), а при k>1 - сумму площадей двух пересекаемых пикселей.

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

Сглаженные изображения

увеличить изображение
Рис. 9.14. Сглаженные изображения

Вопросы и упражнения

  1. Что такое эффект полос Маха?
  2. Чем отличается диффузное отражение от зеркального?
  3. От чего зависит интенсивность освещения точки поверхности при диффузном отражении?
  4. От чего зависит интенсивность освещения точки поверхности при зеркальном отражении?
  5. Какие параметры учитывает модель зеркального отражения, предложенная Фонгом?
  6. Меняется ли интенсивность освещения при плоском закрашивании грани?
  7. Какой параметр интерполируется при закрашивании методом Гуро?
  8. Какой параметр интерполируется при закрашивании методом Фонга?
  9. В чем состоит идея алгоритмов антиэлайзинга, основанных на уровне детализации растра?
  10. Какой параметр используется в алгоритме антиэлайзинга, учитывающем размеры пикселя?
< Лекция 8 || Лекция 9: 1234 || Лекция 10 >
Сабина Бахриддинова
Сабина Бахриддинова
Дмитрий Трефилов
Дмитрий Трефилов