Текстуры. Композиты Лекция 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 a11 Фильтрация текстур: 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) Пиксель 1a 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 (1a)(1) 1g g aa H a(1/g)F(/g)G g aa H a(1/g)F(/g)G Пример 1 Композируем G поверх матового изображения F (a = 1) g aa H a(1/g)F(/g)G => g1 H (1)F()G Т.е. получили обычную операцию композирования Пример 2 Композируем полностью матовое изображение G ( 1) поверх F g aa H a(1/g)F(/g)G => g1 HG Результирующее изображение не зависит от 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 • Отображение текстуры • Фильтрация текстуры – Метод ближайшего соседа, Билинейная фильтрация, Мип-мэппинг, Трилинейная фильтрация, Анизотропная фильтрация Композирование • Объединение двух или более независимо подготовленных изображений в одно изображение, обычно с помощью попиксельного вычисления полупрозрачности