Текстуры. Композиты Лекция 11 Алексей Игнатенко

реклама
Текстуры. Композиты
Лекция 11
Алексей Игнатенко
На прошлой лекции
Удаление невидимых поверхностей
• Удаление нелицевых граней
• Алгоритм художника
• Двоичное разбиение пространства
• Буфер глубины
Модели освещения и отражения
• Локальные и глобальные модели
• Диффузное и зеркальное отражение
• Модель освещенности Фонга
• Интерполяционная закраска (при растеризации)
• Поддержка в OpenGL
– glMaterial, glLight
На лекции
Текстурирование
•
•
•
•
Определение
Виды текстурирования
Отображение текстуры
Фильтрация текстуры
Композирование
•
•
•
•
•
Определение
Альфа-канал
Операции композирования
Ассоциативность
Примеры
Текстурирование
Текстурирование
Использование изображений для
моделирования (отражающих) свойств
поверхности
Отображение текстуры
(Texture mapping)
Способ сопоставления пикселя текстуры (текселя)
пикселю примитива
Фиксированное отображение
• Узор, определенный в 2D области, «наклеивается» на
объект как кусок обоев и, фактически становится
частью объектной базы данных. Т.е., когда объект
перемещается, текстурный узор перемещается вместе с
ним.
View-dependent mapping
Bump mapping
...
Задачи текстурирования
I
• Какой атрибут или параметр модулируется,
чтобы получить желаемый эффект?
II
• Как осуществляется отображение? Если
текстура определена в 2D области, а объект
существует в 3D пространстве, нам
необходимо определить отображение между
этими областями
Типы функций отражения
Диффузное отражение
• матовый пластик, дерево и т.п.
• модель Ламберта
Идеально зеркальное отражение
• зеркало
• модель отражения
Зеркальное отражение
• блики на объекте
• модели Фонга и Блинна
Зеркальное отражение
(модель Фонга)
Атрибуты (параметры)
Ir = ka*Ia + Ii (kd*(N.L) +
ks*(R.V)α)
отражение от поверхности
вектор нормали N
коэффициенты kd, ks, a
падающий свет Ii
геометрия
прозрачность
- surface color texture
- bump mapping
- specular mapping
- environment mapping
- displacement mapping
- transparency mapping
Цилиндр (1)
Цилиндр (2)
P - точка нанесения текстуры
Перевести P в параметрические координаты (s,t)
s - угловая координата в радианах от оси Х
t - координата высоты
Параметрическое уравнение
для цилиндра
Параметрическое уравнение
для сферы
Параметрическое уравнение
для тора
Другие поверхности
Параметрические (В-сплайн) поверхности
Полигональные поверхности
Неявно заданные поверхности
Бамп-мэппинг
Demo
Бамп-мэппинг (bump mapping)
• призван создавать впечатление "шершавых"
или бугристых поверхностей за счет
модуляции попиксельных нормалей к
поверхности
Место в графическом
процессе
для каждого многоугольника модели
{
спроецировать на картинную плоскость
для каждого пикселя проекции
{
вычислить цвет пикселя
вычислить глубину (z) пикселя
сравнить с хранимой в z-буфере
если ближе, вывести в буфер кадра
}
}
z-буфер
Фильтрация текстур
Фильтрация текстур
Метод ближайшего соседа
Билинейная фильтрация
Мип-мэппинг
Трилинейная фильтрация
Анизотропная фильтрация
Ближайший сосед и
билинейная фильтрация
Ближайший сосед
Билинейная
Ближайший сосед и
билинейная фильтрация(2)
s  2 u, t  2 v
n
m
 Выборка ближайшего текселя GL_NEAREST:
i  s , j  t 
   i, j
 Линейная комбинация 4-x соседних пикселей GL_LINEAR:
a  frac(s  1 / 2),   frac(t  1 / 2)
i0  s , j0  t , i1  i0  1, j1  j0  1
  (1  a )(1   ) 00  a (1   ) 10  (1  a ) 01  a11
Фильтрация текстур:
mip-mapping (1)
Фильтрация текстур:
мипмэппинг (2)
2
2
2
2

 s   t  
  s   t 
  max       ,      
y   y  
 x   x 




0    1 увеличение текстуры
  1 масштаб 1:1
  1 уменьшение текстуры
  log 2 
  0 увеличение текстуры
  0 масштаб 1:1
  0 уменьшение текстуры в 2 раз
Фильтрация текстур:
мипмэппинг (3)
256x256, 0
64x64, 2
16x16, 4
 Трилинейная фильтрация GL_LINEAR_MIPMAP_LINEAR
0  d  1    d , d  целое
a  frac( )
  a d 1  (1  a ) d
Анизотропная фильтрация
Экран

15
  a i x y , ( xi , yi )  
i 0
i i
Сравнение методов
фильтрации
Ближайший сосед
Трилинейная
Билинейная
Анизотропная
Поддержка в OpenGL
Стандарт OpenGL поддерживает диффузные
текстуры и зеркальные текстуры
(environment mapping)
С помощью использования дополнительных
расширений можно организовать бампмэппинг и др.
Текстурная координата – атрибут вершины
Текущая текстура – атрибут состояния
Композирование
Композирование:
Определение
Compositing n. : The combining of two or more
separately prepared images into one, usually through
pixel-by-pixel transparency (or alpha) computation, and
sometimes with z comparison. Also, composit v.t. : to
perform compositing; adj. : being composited; n. : the
result of compositing.
Смешение, Монтаж : Объединение двух или более
независимо подготовленных изображений в одно
изображение, обычно с помощью попиксельного
вычисления полупрозрачности (альфа-канал),
иногда с учетом глубины (z-координаты)
Пример 1
Пример 2
Простейший вариант
композитинга
Фон
Передний план
Фигуры переднего
плана перекрывают
фон
Что происходит при
растеризации?
Проблемный пиксель
Наложение красного и
синего треугольников.
Каким будет цвет
пиксела на границе?
Композитная операция
Фон
Для каждого пикселя
изображение определяем
площадь, занимаемую
растеризованной фигурой
Часть площади
обозначается как a
Bnew = (1-a)Bold+aF
Bnew = Bold+a(F- Bold)
Пиксель
1a
a
Передний план
Альфа-канал
Для выполнения композирования RGB
изображений дополняется альфа-каналом
RGB -> RGBA
Использование альфаканала
Варианты использования альфа-канала
•
•
•
•
Площадь покрытия пикселя
Прозрачность
Затемнение
...
Ассоциативность
Bnew = (1-a)Bold+aF
Bnewnew = (1-)Bnew+ G
Формула позволяет получать изображение БЕЗ альфа-канала
• Фигуры накладываются на фон
Что если мы хотим получить композиции двух изображений с
альфа-каналом?
( B & F ) & G  B & ( F & G)
Ассоциативность (2)
Bnewnew = (1-)Bnew+G
(B&F)&G = B&(F&G)
H = F & G, H – RGB g
(1-)((1-a)B+aF)+G = (1-g)B+gH
Ассоциативность (3)
(1-a)(1-)B+(a(1-)F+G) = (1-g)B+gH
(1a)(1)  1g

g  aa
H  a(1/g)F(/g)G
g  aa
H  a(1/g)F(/g)G
Пример 1
Композируем G поверх матового изображения F
(a = 1)
g  aa
H  a(1/g)F(/g)G =>
g1
H  (1)F()G
Т.е. получили обычную операцию композирования
Пример 2
Композируем полностью матовое изображение
G (  1) поверх F
g  aa
H  a(1/g)F(/g)G =>
g1
HG
Результирующее изображение не зависит от
a
Композирование и буфер
кадра. Пример.
Последовательность операций:
• Загрузить непрозрачный фон в буфер кадра (a = 1 во
всех точках)
• Графический конвейер создает рисует фигуру поверх
фона. Пиксели внутри фигуры имеют a = 1. Пиксели
на границах могут иметь
a <> 1
• Аналогично для других фигур. Объекты могут частично
перекрываться.
Программа визуализации не должна знать, что
находится под растеризованной фигурой. Операция
композирования все обрабатывает корректно
Композирование и буфер
кадра. Пример 2.
Последовательность операций:
• Загрузить прозрачный фон в буфер кадра
(a = 0 во всех точках)
• Рисовать фигуры аналогично примеру 1
В результирующем изображении пиксели с a
= 0 не были «задеты» ни разу
Композирование и буфер
кадра. Пример 3.
Последовательность операций:
• Загрузить прозрачный фон в буфер кадра
(a = 0 во всех точках)
• Рисовать результирующее изображение из
примера 2 поверх фона
Только пиксели с a <> 0 будут изменять фон
Поддержка в OpenGL
OpenGL поддерживает различные
композитные операции. Альфа-канал для
изображения примитива может задаваться
через RGBA-цвет вершин или RGBA-цвет
текстур
Пример:
glEnable(GL_ENABLE);
glDisable(GL_DISABLE);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
Итоги
Текстурирование
• Использование изображений для моделирования
(отражающих) свойств поверхности
• Виды текстурирования
– bump mapping, specular mapping, environment mapping,
displacement mapping, transparency mapping
• Отображение текстуры
• Фильтрация текстуры
– Метод ближайшего соседа, Билинейная фильтрация,
Мип-мэппинг, Трилинейная фильтрация, Анизотропная
фильтрация
Композирование
• Объединение двух или более независимо
подготовленных изображений в одно изображение,
обычно с помощью попиксельного вычисления
полупрозрачности
Скачать