Оглавление Дополнительное чтение Учебник «Компьютерная графика» 
Закраска методом Гуро 
Прозрачность

Закраска Фонга

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

На рис. 26.1 сравниваются однотонная закраска (слева), закраска Гуро (в центре), Фонга (справа). Модель освещения для левого и среднего торов включает рассеянный свет и диффузное отражение, а для правого — также зеркальное отражение, благодаря которому появляются блики.

рис. 26.1

На рис. 26.2 сравниваются зеркальные блики при закраске Гуро и более реалистичной закраске Фонга.

рис. 26.2

Хотя метод Фонга устраняет большинство недостатков метода Гуро, он тоже основывается на линейной интерполяции. Поэтому в местах разрыва первой производной интенсивности заметен эффект полос Маха, хотя и не такой сильный, как при закраске Гуро. Однако, иногда этот эффект проявляется сильнее у метода Фонга, например для сфер. Кроме того, оба метода могут привести к ошибкам при изображении невыпуклых многоугольников, например, таких, как на рис. 26.3.

рис. 26.3

Первая сканирующая строка использует данные из вершин QRS, а вторая, лежащая ниже, берет также данные вершины P. Это может нарушить непрерывность закраски.

Также возникают трудности, когда любой из этих методов применяется при создании последовательности кинокадров. Например, закраска может значительно изменяться от кадра к кадру. Это происходит из-за того, что правило закраски зависит от поворотов, а обработка ведется в пространстве изображения. Поэтому, когда от кадра к кадру меняется ориентация объекта, его закраска (цвет) тоже изменяется, причем достаточно заметно. Было предложен метод закраски Гуро и Фонга, инвариантный относительно поворота.

Рассмотрим отличия трех методов закраски — однотонной, Гуро и Фонга — на примере.

Закраска. Рассмотрим участок поверхности, изображенный на рис. 26.4

рис. 26.4

Уравнения четырех плоскостей:
1: 2z - 4 = 0
2: -x + 1.732y + 7.5z – 17 = 0
3: -2.25x + 3.897y + 10z - 24.5 = 0
4: 5.5z – 11 = 0
где ось z — перпендикуляр к плоскости страницы, x направлена вправо, а y — вверх. Координаты точки B: (0.366, 1.366, 2).

Пусть вектор к точке наблюдения есть S(1, 1, 1) и единственный точечный источник расположен в бесконечности на положительной полуоси z, то есть вектор падающего света равен L(0, 0, 1). Модель освещения задана уравнением
I = Iaka + Il * [kd(n' * L') + ks(R' * S')n]/(d + K), где d = 0, K = 1, Ia = 1, Il = 10, n = 2, ks = 0.8, kd = ka = 0.15. Свет падает вдоль оси z, поэтому направление отраженного света можно найти методом Фонга.

Рассмотрим однотонную закраску. Точка P лежит в многоугольнике 3. Из уравнения плскости многоугольника 3 находим нормаль
n3' = n3/|n3| = -0.21i + 0.36j + 0.91k.

Угол между нормалью и вектором падающего света есть
n' * L' = (-0.21i + 0.36j + 0.91k)k = 0.91
откуда следует, что угол падения составляет примерно 24.2o.

Из уравнений для определения вектора отражения имеем:
Rz' = 2n'2z – 1 = (2)(0.91)2 – 1 = 0.66
Rx' = 2n'zn'x = (2)(0.91)(-0.21) = -0.38
Ry' = 2n'zn'y = (2)(0.91)(0.36) = 0.66
R' = -0.38i + 0.66j + 0.66k.

Единичный вектор наблюдения есть S' = S/|S| = 0.58i + 0.5j + 0.58k.

С помощью этого значения найдем угол между вектором отражения и вектором наблюдения:
R' * S' = (-0.38i + 0.66j + 0.66k) * (0.58i + 0.58j + 0.58k) = 0.55,
что приблизительно дает 57o.

Модель освещения для точки P дает
IP = Iaka + Il * [kd(n'L') + ks(R'S')n]/(d + K) = (1)(0.15) + (10/1)[(0.15)(0.91) + (0.8)(0.55)2] = 0.15 + 10(0.14 + 0.24) = 0.15 + 3.8 = 3.95.

Для закраски Гуро необходимы векторы нормали в A, B и C на рис. 26.4. Аппроксимируя их усреднением нормалей к окружающим плоскостям, получаем:
nA = n2 + n3 = -3.25i + 5.63j + 17.5k
nB = n1 + n2 + n3 + n4 = -3.25i + 5.63j + 25k
nC = n3 + n4 = -2.25i + 3.897j + 15.5k,
где n1, n2, n3, n4 выведены из уравнений соответствующих плоскостей. Единичные нормали
nA' = nA/|nA| = -0.17i + 0.3j + 0.94k
nB' = nB/|nB| = -0.12i + 0.22j + 0.97k
nC' = nC/|nC| = -0.14i + 0.24j + 0.96k.

Единичные векторы отражения:
RA' = -0.33i + 0.57j + 0.76k
RB' = -0.24i + 0.42j + 0.87k
RC' = -0.27i + 0.46j + 0.84k.

Интенсивности в A, B и C равны
IA = 0.15 + 10(0.14 + 0.27) = 4.25
IB = 0.15 + 10(0.15 + 0.30) = 4.65
IC = 0.15 + 10(0.14 + 0.29) = 4.45.

На заданной сканирующей строке имеем u = AQ/AB = 0.4 и w = BR/BC = 0.7. Интерполируя, находим интенсивность в Q и R:
IQ = uIA + (1 – u)IB = (0.4)(4.25) + (1 - 0.4)(4.65) = 4.49
IR = wIB + (1 - w)IC = (0.7)(4.65) + (1 - 0.7)(4.45) = 4.59.

Точка P на сканирующей строке расположена в t = QP/QR = 0.5. Интерполируя, определим интенсивность в Р:
IP = tIQ + (1 - t)IR = (0.5)(4.49) + (1 - 0.5)(4.59) = 4.54.

При закраске Фонга нормаль в P получается путем интерполяции нормалей в A, B, C. Затем эта нормаль используется для вычисления интенсивности P. Еденичные нормали в Q и R:
n'Q = un'A + (1 - u)n'B = (0.4)[-0.17 0.3 0.94] + (0.6)[-0.12 0.22 0.97] = [-0.14 0.25 0.96] = -0.14i + 0.25j + 0.96k
n'R = un'B + (1 - w)n'C = (0.7)[-0.12 0.22 0.97] + (0.3)[-0.14 0.24 0.96] = [-0.13 0.23 0.96] = -0.13i + 0.23j + 0.97k.

Интерполируя нормаль вдоль сканирующей строки, находим:
n'P = tn'Q + (1 - t)n'R = (0.5)[-0.14 0.25 0.96] + 0.5[-0.13 0.23 0.97] = [-0.14 0.24 0.97] = -0.14i + 0.24j + 0.97k.

Тогда еденичный вектор отражения в P есть:
R'P = -0.27i + 0.46j + 0.87k.

Интенсивность в P равна
IP = 0.15 + (10)(0.15 + 0.30) = 4.65.

Сравним различные методы закраски:
Однотонная: IP = 3.93
Гуро: IP = 4.54
Фонга: IP = 4.65.

Скачать Скачать Stratum-проект «Аппроксимация света на модели Фонга» [fong.spj, 19 Кб]
Закраска методом Гуро Прозрачность