камальдинова. Мультимедиа технологии
Скачать 6.03 Mb.
|
Стадия геометрических преобразований. Стадия геометрических преобразований состоит из четырех этапов. На первом этапе необходимо описать объект. Объекты могут иметь разнообразную форму, описанную каким-либо математическим способом. Проще всего иметь дело с многогранниками, у которых каждая грань представляет собой часть плоскости, ограниченной полигоном. Описание такого тела относительно несложно – оно состоит из упорядоченного списка вершин. Современные методы компьютерной графики основаны на представлении объекта в виде набора плоских многоугольников (Практически всегда эти многоугольники разбиваются на простейшие треугольники. На то есть много причин – удобство работы, ограниченные возможности оборудования, но главная – большинству алгоритмов закраски изображения нужно, чтобы полигоны были плоскими, т.е. чтобы все их 222 вершины лежали в одной плоскости. А для треугольников это требование выполняется автоматически). Генерация треугольников. Объект задается вершинами, определяющими ключевые точки, и полигонами, которые образованы линиями, соединяющими вершины. Такая модель объекта называется проволочной. К сожалению, картинка из одних лишь вершин (и даже вершин, соединенных ребрами) удовлетворит далеко не всех пользователей. Поэтому на стадии рендеринга производится удаление невидимых линий. Переход из одной прямолинейной координатной системы в трехмерном пространстве к другой описывается в общем случае следующим образом: , , 3 2 1 * 3 2 1 * 3 2 1 * z y x z z y x y z a y a x a x или в матричном виде: 1 0 0 0 4 3 2 1 4 3 2 1 4 3 2 1 a a a a M Рассмотрим матрицы, соответствующие следующим базовым геометрическим преобразованиям: 1. Повороты Относительно OX на угол φ 1 0 0 0 0 0 0 0 0 0 0 1 Cos Sin Sin Cos Относительно OY на угол ψ 1 0 0 0 0 0 0 0 1 0 0 0 Cos Sin Sin Cos Относительно OZ на угол χ 223 1 0 0 0 0 1 0 0 0 0 0 0 Cos Sin Sin Cos Относительно OZ на угол χ 2. Растяжение (сжатие) 1 0 0 0 0 0 0 0 0 0 0 0 0 D Если 1 , , – растяжение, Если 1 , , 0 – сжатие. 3. Отражение (зеркалирование) относительно плоскости XOY 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Z M относительно плоскости YOZ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 X M относительно плоскости ZOX 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Y M 4. Перенос (сдвиг, перемещение) на вектор ) , , ( 1 0 0 0 1 0 0 0 1 0 0 0 1 M 1 0 0 0 1 0 0 0 1 0 0 0 1 v M 224 Стадия геометрических преобразований требует выполнения большого объема вычислительных операций, включая операции с плавающей точкой. Многие существующие приложения для обработки трехмерной графики перекладывают расчеты по геометрии сцены на центральный процессор. Рассмотрим пример 1. Дана точка А с координатами (5,6,11) Матрица смещения 1 0 0 0 4 1 0 0 3 0 1 0 2 0 0 1 M Необходимо найти А ’ 1 15 9 7 1 11 6 5 1 0 0 0 4 1 0 0 3 0 1 0 2 0 0 1 A M A , ) 15 , 9 , 7 ( A Рассмотрим пример 2. Дана точка B с координатами (8,2,-6) Матрица поворота 1 0 0 0 0 ) 45 ( ) 45 ( 0 0 ) 45 ( ) 45 ( 0 0 0 0 1 Cos Sin Sin Cos M Необходимо найти B ’ 1 8284 2 6569 5 8 1 6 2 8 1 0 0 0 0 707 0 707 0 0 0 707 0 707 0 0 0 0 0 1 B M B , ) 828 2 , 657 5 , 8 ( B 225 На третьем этапе выбираются модели освещения и вычисляется освещенность объектов. Модель освещения описывает тип используемых источников света и затем, когда определены свойства освещаемого объекта, формируется эффект освещения. Общепринятые модели освещения включают рассеянный свет, направленный и точечный источники света. Отражающие свойства материала в сочетании с моделью освещения задают цвет объекта 10.2 Освещение При создании реалистичных изображений необходимо закрашивать поверхности. Модель с плоским закрашиванием заключается в равномерном однородном закрашивании каждого треугольника одним цветом (обычная заливка). В результате объект предстает как множество плоских граней. Закраска поверхности зависит от освещения. Свет, падающий на поверхность от источника света, может быть поглощен, отражен или пропущен. Свет, отраженный от поверхности, может быть диффузным и зеркальным. Свойства отраженного света зависят от формы и направления источника света, а также от ориентации поверхности и ее свойств. Для нескольких точечных источников используют эмпирическую формулу косинусов Ламберта ) ( 1 j P S j d m j l a a i i Cos k Cos k k d I k I I Первый член в сумме отвечает за фоновое освещение. Оно одинаково для всех точек поверхности. (k a – коэффициент светового отражения, показывающий, какая часть энергии отражается объектом (чем коэффициент меньше, тем объект темнее). Первый сомножитель во второй сумме отвечает за диффузное отражение. (I 1 – интенсивность точечного источника; d – расстояние от объекта до источника освещения; k – произвольная постоянная (для большей 226 естественности); k d - коэффициент диффузного отражения (k d – const, [0-1], θ- угол между направлением на источник света и нормалью к поверхности.). Второй сомножитель отвечает за зеркальное отражение (k s – экспериментальная постоянная, α – угол между отраженным лучом и вектором наблюдения, p – степень, аппроксимирующая пространственное распределение света). Для расчетов, формула слишком сложна, и ее так или иначе упрощают или сводят расчет для всей поверхности к расчету по небольшому набору точек и интерполяции цвета поверхности на их основе. В процедурах закрашивания по Гуро и по Фонгу цвет интерполируется относительно границ треугольника, что приводит к более реалистичной и непрерывной закраске объекта. Закраска методом Гуро. Наиболее простым является метод Гуро, который основывается на определении освещенности грани в ее вершинах с последующей билинейной интерполяцией найденных величин на всю грань. Метод Гуро обеспечивает непрерывное изменение интенсивности при переходе от одной грани к другой без разрывов и скачков. Рис. 10.2 Слева – однотонная закраска, справа – закраска Гуро Закраска методом Фонга. В этом методе интерполируются значения вектора внешней нормали, которое затем используется для вычисления интенсивности пиксела. Поэтому закраска Фонга требует заметно большего объема вычислений. Но изображение получается более близким к 227 реалистичному. Схема интерполяции, аналогична интерполяции в закраске Гуро. Закраска Фонга требует заметно большего объема вычислений. Но изображение получается более близким к реалистичному. Рис. 10.3 Слева – однотонная закраска, в центре – закраска Гуро, справа – закраска Фонга Трассировка лучей Одним из недостатков традиционного подхода при формировании трехмерных изображений является весьма приближенная модель освещения. Упрощенная модель принципиально не позволяет получить многих эффектов, необходимых для реалистичного с точки зрения освещения изображения сцены. В первую очередь — так называемого вторичного освещения, когда некоторые затененные части сцены слегка освещены отраженным светом. Преломления и отражения лучей света, распространение света в среде и другие световые эффекты тоже не рассчитываются. Одним из наиболее распространенных и наглядных методов построения реалистичных изображений является метод трассировки лучей (RayTracing, рэйтрейсинг), позволяющий строить фотореалистичные изображения сложных сцен с учетом таких эффектов как отражение и преломление. Каким путем возникает реальное изображение. Выпустим из каждого источника света пучок лучей во все стороны и мысленно проследим за ним. 228 При попадании луча на границу объекта выпускаем из точки попадания отраженный и преломленный лучи и отслеживаем их и все порожденные ими лучи. Описанный процесс называется прямой трассировкой лучей. В результате можно получить изображение сцены, однако, требуются огромные вычислительные затраты. Основным недостатком такого способа является то, что большая часть рассматриваемых лучей не попадает в глаз. Метод прямой трассировки фотонов полностью универсален благодаря приближенной к реальности модели освещения. Поэтому чаще используется модификация метода, называемая обратной трассировкой лучей. Суть его в том, что лучи света рассчитываются и трассируются в обратном направлении — как бы из глаза наблюдателя. Рассмотрим только те лучи, которые попадают в глаз. Для этого проследим путь, который мог бы пройти луч света. Будем идти вдоль этого луча от глаза до точки ближайшего пересечения с каким-либо объектом сцены. Цвет соответствующей точки будет определяться долей световой энергии, попадающей в эту точку и покидающей ее в направлении глаза. Представьте экран, через каждый пиксел которого в направлении от наблюдателя проводится луч и трассируется до пересечения с объектом сцены. Далее рассчитывается отраженный луч (в направлении на источник света), чтобы учесть световую энергию, которая может быть принесена в направлении наблюдателя. Отраженный луч, то есть, на самом деле, луч, который отразился и попал в глаз наблюдателя, анализируется аналогично. И далее рекурсивным образом. Так можно рассчитывать вторичное освещение, отражение и преломление света. Глубина рекурсии характеризует качество аппроксимации освещения – чем больше отраженных лучей проанализировано, тем выше качество и дольше процесс вычислений. Обратную трассировку лучей можно использовать для реалистичной компьютерной визуализации. Она нашла широкое применение в пакетах 229 трехмерного компьютерного моделирования, таких как Discreet 3ds max, Lightwave и т.п. Причем в этом случае расчет производится силами только центрального процессора компьютера (или нескольких процессоров в многопроцессорных системах), без привлечения трехмерных OpenGL – возможностей графических ускорителей. Метод трассировки лучей более ориентирован на физическое моделирование, но благодаря высокой реалистичности используется в профессиональных задачах – спецэффектах в кино, телевизионных роликах, мультфильмах, при моделировании проектируемых объектов (автомобили, интерьеры, здания). 10.3 Рендеринг Рендеринг – это процесс преобразования объекта или сцены, созданных в приложении трехмерной графики, для вывода на дисплей, который представляет собой двухмерную плоскость. На стадии рендеринга по описанию треугольников генерируются пиксели изображения. В отличие от механизма геометрических преобразований в процессе рендеринга объем операций с плавающей точкой не столь велик и в основном состоит из простых операций над пикселями. Стадия рендеринга состоит из четырех этапов. Первый этап заключается в удалении невидимых линий. Трехмерная сцена составлена из множества объектов со взаимным расположением по глубине в зависимости от точки визирования. Объекты и сцены можно вращать и наблюдать с разных позиций, в том числе спереди, сбоку, сзади, сверху и снизу. Позиция объекта меняется в зависимости от положения и направленности наблюдателя. Например, при виде спереди объект может быть видим полностью, а с положения сзади - заслоняться другим объектом. 230 Метод z-буфера Один из самых простых методов. В настоящее время один из самых популярных. Легко реализуется аппаратно. Сопоставим каждому пикселу (x,y) картинной плоскости, кроме цвета, его расстояние до картинной плоскости вдоль направления проектирования z(x,y). (глубина). Вначале в z-буфер заносятся максимально возможные значения z, а значения цвета соответствует фону. Затем для каждой грани она переводится в растровое представление на картинной плоскости и для каждого пиксела этой грани находится его глубина. В случае, если эта глубина меньше значения глубины, хранящейся в z-буфере, пиксел рисуется (заполняется цвет) и его глубина заносится в буфер. Построчное сканирование с z-буфером Окно визуализации имеет высоту в одну сканируемую строку и ширину во весь экран. Пример: 1 х 1024 х 24 бита буфер кадра (цвета), 1 х 1024 х double z-буфер. Для каждой сканирующей строки буфер кадра инициализируется фоновым значением интенсивности, а z-буфер минимальным значением z координаты. Определяется пересечение сканирующей строки с двумерной проекцией каждого многоугольника сцены. Глубина каждого элемента плоскости вдоль отрезка, образующегося при пересечении, сравнивается с глубиной в соответствующем элементе z- буфера. Конечно, этот алгоритм не оптимален. Существует много модификаций этого алгоритма. Для сокращения операций заводятся дополнительные массивы (например: массив по y, в котором указываются многогранники имеющие пересечение со строкой при этом значении y, и т.п.). Другим процессом, выполняемым на первом этапе рендеринга, является обработка альфа-буфера и смешение текстур. Эта процедура 231 заключается в смешении двух пикселей в сцене для получения одного составляющего пикселя. Коэффициент альфа-канала определяет вклад каждого пикселя при формировании составляющего. Значения коэффициентов альфа-составляющей могут быть попиксельно записаны в область памяти, называемую альфа-буфером. Примером использования смешения текстур является сцена, изображающая голубое небо с просвечивающими белыми облаками. Смешение позволяет голубому небу проступать сквозь белые облака за счет смешения значений двух пикселей - облака и неба - в единый пиксель. Моделирование текстуры Для придания более естественного вида сцене необходимо менять параметры поверхности в зависимости от положения точек на ней. Существуют разные способы моделирования текстуры, но практически все они подразделяются на два основных класса: проективные текстуры; процедурные методы. Представим себе, что необходимо задать определенную текстуру (например: мрамор) какому-либо объекту. Возможно два пути: 1. Взять изображение реальной мраморной поверхности и отобразить (спроектировать) его каким-либо образом на поверхность объекта. 2. Построить некоторую функцию C(x,y,z), определяющую для каждой точки пространства цвет, чтобы объект имел мраморный вид. Первый способ наиболее прост, однако требует большого объема памяти для хранения используемых изображений, не обладает гибкостью, очень сложно подобрать способ проектирования для объектов сложной формы. Поэтому в практических задачах, как правило, используется лишь небольшое количество стандартных вариантов проектирования: плоское, цилиндрическое и сферическое. 232 Второй путь не требует больших затрат памяти и одинаково хорошо работает с объектами любой (сколь угодно сложной формы). Основным недостатком является сложность подбора соответствующей функции. Рассмотрим первый, в настоящее время наиболее используемый способ. Если объект представлен в виде набора треугольников, для каждой вершины указываются некоторые ее плоские текстурные координаты в двухмерном изображении-текстуре. Если нужно посчитать цвет конкретной точки полигона, то мы смотрим на ее расположение относительно трех остальных точек треугольника и ищем аналогичную по расположению относительно «текстурных» вершин точку в текстуре. Ее цвет и будет цветом нашей точки. К сожалению, в этом случае для каждой точки экрана, попавшей в треугольник сцены, нужно найти текстурные координаты (а это не слишком быстрый процесс) и провести так называемую выборку из текстуры – вычислить цвет текстуры в полученной точке. Последняя задача не так проста, как кажется: чаще всего расчетная точка получается не целочисленной и попадает «между пикселами» изображения. В итоге расчеты получаются гораздо более трудоемкими, нежели «прямолинейное» геометрическое преобразование. Кроме того, текстуры зачастую являются очень большими изображениями и в кэш-память процессора не помещаются, вынуждая его непрерывно обращаться к не столь быстрой оперативной памяти. Вычисление цвета точки, попавшей «между» известными точками текстуры, называется фильтрацией. Если используется простейший способ – выбрать ближайшую к расчетной точку текстуры, – фильтрация не нужна. Если считается взвешенное среднее арифметическое четырех ближайших «соседей» точки, это билинейная фильтрация. Самый «продвинутый» способ фильтрации – анизотропная (неоднородная по разным направлениям), в которой учитываются и «физические размеры» пиксела, то есть считается не просто проекция центра 233 пиксела экрана на текстуру, а пиксела целиком. Чем выше «кратность» анизотропной фильтрации, тем проекция точнее. Использование простых способов фильтрации приводит к тому, что текстуры в определенных ситуациях «размываются», теряют четкость. И напротив, чем качественнее фильтрация, тем более четко прорисовываются объекты. А вот трилинейная фильтрация – это другое. Для оптимизации текстурной выборки, как правило, применяется техника мип-текстурирования – когда для близкорасположенных объектов используется большая и подробная текстура, а для удаленных – ее упрощенные копии. Это хорошо заметно на гоночных симуляторах – четкая полоса дорожной разметки по мере удаления от гонщика расплывается и в конце концов исчезает. Чтобы не было видно резких скачков от одного мип-уровня к другому, на переходах («не близко и не далеко») ускоритель считает линейную комбинацию цветов, вычисленных по «ближним» и по «дальним» текстурам, – это и называют трилинейной. Рис. 10.4 |