
Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика
.pdf
2.2. Графическая подсистема ЭВМ
которое имеет RAMDAC с рабочей частотой 400 МГц. Чуть меньше (350 МГц) частота RAMDAC встроенного ускорителя чипсета nForce2 IGP компании nVidia. Эти значения полностью соответствуют требованиям к качественному воспроизведению 2О-графики с разрешением до 1920х 1440 точек.
Таким образом, качество и производительность в 2Б-приложениях у встроенных ускорителей и видеокарт практически идентичны. Этому в значительной мере способствовало внедрение новых типов оперативной памяти: DDR SDRAM и DDR2 SDRAM, поскольку встроенный ускоритель использует для своей работы часть ОП. При этом графический ускоритель даже в самых тяжелых условиях занимает около 10 % пропускной способности шины памяти, что практически незаметно при решении реальных задач.
Слабым местом встроенных ускорителей является работа со сложной 3Dграфикой. Встроенное графическое ядро неплохо справится с простыми трехмерными задачами, например воспроизведением объектов VRML в Интернете. Имея чипсет с современным графическим ядром, можно запустить и сложную трехмерную игру, но обеспечить комфортный игровой процесс вряд ли будет возможно. Очевидно, что не следует решать на встроенном ускорителе задачи моделирования и рендеринга в 3D-Studio MAX. Встроенные графические ускорители обычно уступают типовым видеокартам в функциональности. Как правило, видеокарты оснащают выходом TV-out, цифровым интерфейсом DVI, выходом на второй монитор, а встроенное графическое ядро часто лишено таких функциональных элементов.
Встроенные графические ускорители современного уровня пока редки (Intel GMA 950, ATI RadeonXpress 200). Они могут работать с 20-графикой без всяких конфликтов. Для трехмерных игр последнего поколения и сложных ЗО-прило- жений необходимо устанавливать отдельную видеокарту. Функциональность встроенных ускорителей пока уступает типовым видеокартам. Области применения систем со встроенными графическими ускорителями: офисный компьютер, Интернет-станция, домашний мультимедийный компьютер с пониженными требованиями к комфортности игр, инженерные и научные расчеты, допечатная подготовка и другие приложения с невысокими требованиями к ЗО-графике.
Программные интерфейсы видеоадаптеров. Основой современных видеоадаптеров являются графические процессоры, которые производят разные фирмы, имеют различные архитектуру и системы команд. Для эффективного использования возможностей видеоадаптера необходимо наличие программного интерфейса между его программным обеспечением и системными и прикладными программами. Однако при широкой номенклатуре графических процессоров невозможно написать программу, которая бы одинаково эффективно работала с любой системой команд графического процессора. Поэтому для разработчиков программного обеспечения и создателей графических процессоров необходимо наличие специальных программных средств, обеспечивающих преобразование запросов программ, написанных в командах ЦП, в последовательность команд графического процессора и программную реализацию аппаратных средств, отсутствующих в графическом процессоре.
125

2. Технические средства компьютерной графики
Основу современных средств интерфейса прикладного программирования API составляют специализированные прикладные программные библиотеки. Использование API позволяет разработчикам программ делать их универсальными, независимыми от низкоуровневых команд конкретного графического процессора. В настоящее время подавляющее большинство прикладных программ, работающих с трехмерными объектами, опираются на одну из двух типовых библиотек — OpenGL или DirectX.
OpenGL. Это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов для разработчиков CAD-систем и научных приложений, кроме того, он широко используется и в других областях компьютерной графики, например в компьютерных играх. Еще в 1982 г. в Стенфордском университете была разработана концепция графической машины, на основе которой фирма Silicon Graphics в своей рабочей станции Silicon IRIS реализовала конвейер рендеринга. Таким образом была разработана графическая библиотека IRIS GL. На основе библиотеки IRIS GL в 1992 г. был разработан и утвержден графический стандарт OpenGL. Разработчиками OpenGL являются крупнейшие фирмы-разработчики как оборудования, так и программного обеспечения: Silicon Graphics, Inc., Microsoft, IBM Corporation, Sun Microsystems, Inc., Digital Equipment Corporation (DEC), Evans & Sutherland, Hewlett-Packard Corporation, Intel Corporation и Intergraph Corporation.
OpenGL на русский язык переводится как открытая графическая библиотека (Open Graphics Library), т. е. OpenGL — открытый и мобильный стандарт. Программы, написанные с помощью OpenGL, можно переносить практически на любые платформы, получая при этом одинаковый результат, будь то графическая станция или суперкомпьютер. Базовый набор OpenGL включает в себя около 150 различных команд, с помощью которых реализуют основные функции: определение объектов, указание их местоположения в трехмерном пространстве, установку других параметров (поворот, масштаб), изменение свойств объектов (цвет, текстура, материал), положение наблюдателя.
Несмотря на то что библиотека OpenGL предоставляет все основные возможности для моделирования и воспроизведения трехмерных сцен, некоторые из функций, которые требуются при работе с графикой, отсутствуют в стандартной библиотеке OpenGL. Поэтому для OpenGL были созданы так называемые вспомогательные библиотеки. Одна из вспомогательных библиотек под названием GLAUX была разработана фирмой Microsoft для ОС Windows.
Программы, написанные с помощью OpenGL, можно успешно перенести на такие платформы, как Unix, Linux, SunOS, IRIX, Windows, MacOS и многие другие. OpenGL развивается с помощью создания так называемых расширений — специальных модификаций базовой версии OpenGL, которые добавляют новые возможности и/или расширяют старые. Когда накапливается достаточно таких изменений, консорциум OpenGL выпускает спецификацию новой версии. Последней версией спецификации является версия 2.0.
126

2.2. Графическая подсистема ЭВМ
DirectX. В 1995 г. компания Microsoft представила первую версию библиотеки DirectX (тогда она называлась Game SDK). В 2004 г. вышла девятая версия DirectX 9.0, а следом — модифицированная версия DirectX 9.0c. DirectX — корпоративный стандарт, все права на который принадлежат компании Microsoft. И только Microsoft определяет, что включать в очередную версию API, а какие предложения игнорировать. Более того, DirectX предназначен только для платформ Intel под управлением ОС Windows. В литературе иногда программы и видеоадаптеры разделяют на поколения согласно поддерживаемым версиям DirectX.
Стандарт DirectX включает в себя модули поддержки:
•программирования двухмерной графики (модуль DirectDraw);
•создания трехмерной графики (модуль Direct3D);
•работы со звуками и музыкой (модули DirectSound и DirectMusic);
•поддержки устройств ввода (модуль Directlnput);
•разработки сетевых игр (модуль DirectPlay).
Таким образом, DirectX представляет собой набор из нескольких сравнительно независимых API, позволяющих разработчикам игр и других интерактивных приложений получать доступ к специфическим функциям аппаратного обеспечения без необходимости написания аппаратно-зависимого программного кода. Стандарт DirectX основан на наборе интерфейсов Component Object Model (компонентная модель объектов), а объекты СОМ могут описываться практически любыми языками программирования, например C/C++, Delphi и даже Basic. Популярность DirectX объясняется тем, что его использование обеспечивает потребности разработчиков игр и аппаратных средств: от создания трехмерной графики и пользовательского интерфейса ввода до поддержки сетевых виртуальных миров.
В начале 2007 г. выпущена новая ОС Microsoft Vista (старое название Longhorn). В отличие от Windows XP и Windows 2000, основанных на разных версиях одного ядра и имевших практически идентичную драйверную модель, Vista предлагает существенные изменения не только в интерфейсной части и API, но и в самом сердце системы, в ядре, архитектуре памяти и управлении ресурсами. Новая ОС будет поддерживать два типа драйверов (две драйверные модели), одну, оставленную для совместимости со старыми драйверами, — модель ХР/2000 и вторую — новые драйверы, специально разработанные для Vista и последующих версий этой OS. Эта новая модель (стандарт на драйверы и их взаимодействие с ядром OS и API) называется LDM (Longhorn Driver Model), важнейшей и наиболее интересной ее частью является отвечающая за всю графику LDDM (Longhorn Display Driver Model), т. е. модель дисплейного драйвера Vista. Все принципиально новые графические возможности будут реализовываться с помощью новых LDDM драйверов. Драйверы, построенные по старой модели, могут обеспечить только базовый, уже доступный в ХР уровень аппаратной графической поддержки.
Новая драйверная модель предусматривает два уровня — базовый и продвинутый. Базовые драйверы могут быть написаны и для текущего аппаратного обеспечения, не требуя от аппаратуры каких либо функций, специально рассчи-
127

2. Технические средства компьютерной графики
тайных на новые возможности Vista. Эти драйверы будут обеспечивать все минимально необходимое для работы нового API — DX10 и новой драйверной модели, но не всегда оптимально с точки зрения производительности или удобства реализации. Продвинутые драйверы требуют специальной поддержки аппаратными средствами некоторых функций, в первую очередь связанных с управлением ресурсами, виртуальной памятью и конкурентными потоками заданий от приложений к устройствам, т. е. аппаратные средства должны разрабатываться с учетом спецификаций LDM и понимать некоторые специальные системные структуры данных. Тогда новые функции ядра и драйверной модели Vista будут выполняться наиболее быстрым, надежным и эффективным способом.
2.2.2. Технологии ЗБ-графики
ЗБ-конвейер. Современные графические процессоры для ПК работают с так называемой полигональной графической моделью, в которой любой трехмерный объект представляется как набор плоских многоугольников, рано или поздно разбивающихся на простейшие треугольники. Это связано с тем, что большинство алгоритмов закраски изображений требует, чтобы полигоны были плоскими, т. е. чтобы все их вершины лежали в одной плоскости, а треугольник — плоская фигура по определению. Объект задается вершинами, определяющими ключевые точки, и полигонами, которые образованы линиями, соединяющими вершины. Цвет полигонов формируется по специальным алгоритмам закраски, как правило, с наложением заранее нарисованных плоских изображений — текстур. Задача графического процессора сводится к тому, чтобы построить и закрасить как можно больше полигонов за единицу времени. В профессиональных ЗЭ-ускорителях иногда используется более совершенный способ затенения (рендеринга) трехмерных сцен — методом обратной трассировки лучей (Ray Tracing), требующим гораздо больших вычислительных ресурсов.
Для отображения треугольников используется метод так называемых однородных координат, опирающийся на матрицы преобразования и проецирования. Расчет положения любой точки трехмерной сцены на плоскости сводится к умножению вектора исходных координат на эти матрицы. Современный ЦП за секунду просчитывает координаты нескольких десятков миллионов вершин. Таким образом, затраты времени на расчет геометрии сцены не составляют для современного ЦП существенных значений. Проблемы начинаются при закраске полигонов с учетом освещенности и наложения текстур. Для сокращения числа закрашиваемых треугольников необходимо также решить проблему удаления невидимых поверхностей, т. е. разделить все полигоны на видимые, закрашиваемые и невидимые. Существуют чисто геометрические подходы к ее решению (например, тайловый подход, tiling), но чаще всего решение этой проблемы совмещают с закраской (техника буфера глубины, Z-buffer).
Z-buffer — часть графической памяти, в которой хранится относительная глубина каждого пиксела (значения Z). Z-buffer определяет, какая из многих пе-
128

2.2. Графическая подсистема ЭВМ
рекрывающихся точек наиболее близка к плоскости наблюдения. Так же, как большее число битов на пиксел для цвета в буфере кадра соответствует большему количеству цветов, доступных в системе изображения, так и количество бит на пиксел в Z-буфере соответствует большему числу элементов. Обычно Z-буфер имеет не менее 16 бит на пиксел для представления информации о глубине.
Реалистичность изображения в трехмерной сцене во многом определяется качеством текстур — заранее нарисованных изображений, накладываемых на полигоны. Двухмерные изображения текстур хранятся в памяти компьютера или графического адаптера в одном из пиксельных форматов. Текстуры могут храниться в сжатом виде на дисках компьютера, перед использованием разворачиваются в памяти и могут занимать объем в десятки раз больше первоначального размера. Для каждой вершины указываются ее координаты в плоскости изображения двухмерной текстуры (используются также одномерные и трехмерные текстуры). При расчете цвета конкретной точки полигона учитывается ее расположение относительно вершин треугольника, и точке присваивается цвет, аналогичный цвету соответствующей точки текстуры. Для этого каждой точке экрана, попавшей в треугольник, нужно найти соответствие в текстурных координатах (это достаточно сложный процесс) и провести так называемую выборку из текстуры — вычислить цвет текстуры в полученной точке. Эта задача достаточно сложна, поскольку часто расчетная точка попадает между пикселами изображения текстуры. Поэтому расчеты получаются очень трудоемкими, особенно с учетом наложения нескольких текстур. К тому же текстуры в современных играх часто представлены изображениями высокого разрешения. В итоге достаточно мощный ЦП даже при низком экранном разрешении способен обработать не более десятка кадров в секунду. Поэтому ускорители трехмерной графики в первую очередь были созданы для аппаратного ускорения закраски изображений.
Вычисление цвета точки, попавшей между известными точками текстуры, называется фильтрацией. Если используется простейший способ — выбрать точку текстуры, ближайшую к расчетной, — то реализуется поточечная фильтрация. Если вычисляется взвешенное среднее арифметическое значение для четырех ближайших соседних точек — это билинейная фильтрация. Используется также трилинейная фильтрация, когда значение цвета точки вычисляется по восьми соседним точкам. Самым совершенным способом фильтрации является анизотропная (неоднородная по разным направлениям), в которой учитываются и «физические размеры» пиксела, т. е. считается не просто проекция центра пиксела экрана на текстуру, а пиксела целиком. Чем выше кратность анизотропной фильтрации, тем проекция точнее. Использование простых способов фильтрации приводит к тому, что текстуры в определенных ситуациях размываются, теряют четкость. И, напротив, чем качественнее фильтрация, тем более четко прорисовываются объекты.
Объекты в сцене даже с наложенными текстурами выглядят неестественно, если не учитывается их освещенность и различные оптические эффекты. Первые
129

2. Технические средства компьютерной графики
видеоадаптеры не могли рассчитывать освещенность объектов. Специальные программные модули, используя ЦП, предварительно рассчитывали освещенность элементов сцены на основе одного из методов затенения, или рендеринга, специально разработанных для визуализации трехмерных сцен (см. разд. 4.2). В результате создавались карты освещенности (light maps), которые отображались как соответствующие текстуры на изображении трехмерной сцены. Качество изображения в этом случае было достаточно высоким, однако только для неподвижных объектов и при статических источниках освещения, что не годится для современных игр, отличающихся высокой динамикой. Чтобы снизить нагрузку на ЦП в видеоадаптеры (по мере роста производительности и сложности), было включено устройство геометрических вычислений — так называемый блок Transform & Lightning (T&L). Однако требования к реалистичности сцены непрерывно росли, а метод интерполяции по всему полигону был не в состоянии правдоподобно передать фактуру поверхности. Кроме того, большинство трехмерных объектов строилось из малого числа полигонов с целью экономии вычислительных ресурсов, и поэтому качество изображения было низким вследствие прямолинейности образующих полигоны линий и плоских граней.
Эту проблему решили, применив метод расчета освещенности с учетом вектора нормали к поверхности, т. е. вектора, перпендикулярного к поверхности в данной точке. Задав еще одну текстуру специального вида (карту нормалей) и модифицировав алгоритм расчета цвета точки, можно радикально улучшить внешний вид моделей. Подобный метод называют Bump Mapping (отображение выпуклостей или шероховатостей). Существует несколько общих типов Bump Mapping: Emboss Bump Mapping, Dot3 Bump Mapping, Environment Mapped Bump Mapping (EMBM) и True, Reflective Bump Mapping. Самая эффективная методика из перечисленных использует Dot3 Bump Mapping. Для полноценной реализации Bump Mapping требует программирования пиксельных конвейеров — перехода от интерполяции и выборки из текстур к вычислениям по формулам определения цвета каждого пиксела объекта (а не только вершин). Так впервые появились пиксельные шейдеры — последовательности кодов графического процессора, позволяющие программировать его пиксельные конвейеры. Шейдеры заметно повысили реалистичность объектов.
Шейдеры. Шейдером в широком смысле называется программа для визуального определения поверхности объекта. Это может быть описание освещения, текстурирования, постобработки и т. п. Программируемые шейдеры были впервые представлены в RenderMan компании Pixar, там определены несколько типов шейдеров: light source shaders, surface shaders, displacement shaders, volume shaders, imager shaders. Эти шейдеры чаще всего программно выполняются ЦП и не имеют полной аппаратной реализации. Затем шейдеры были адаптированы для графических приложений реального времени. Шейдеры для первых графических адаптеров писались на так называемом assembly shader language, который близок к ассемблеру для ЦП, но не привязан к конкретному GPU. Его низкий уровень доставляет определенные сложности для понимания кода и программи-
130

2.2. Графическая подсистема ЭВМ
рования. В настоящее время используются специальные языки программирования высокого уровня для создания шейдеров. Компания nVidia давно предлагает С-компилятор шейдеров — Cg, a Microsoft включила в состав DirectX 9.0с стандартный язык — High-Level Shader Language (HLSL).
В целом шейдеры добавили к графическому конвейеру множество новых возможностей по трансформации и освещению вершин и индивидуальной обработке пикселов, необходимых для разработчиков конкретных приложений. И все-таки, возможности аппаратных шейдеров до сих пор не раскрыты полностью и, повидимому, с ростом их функциональностей в каждом новом поколении графических ускорителей скоро будет достигнут уровень тех самых шейдеров RenderMan, которые когда-то казались недостижимыми для игровых видеоускорителей. Пока в шейдерных моделях реального времени (в определении DirectX 9 API), поддерживаемых на сегодняшний день видеоадаптерами, определено лишь два типа шейдеров: Vertex Shader (вершинный шейдер) и Pixel Shader (пиксельный шейдер). В API DirectX 10 для ОС Vista к ним добавлен Geometry Shader (геометрический шейдер).
Вершинные шейдеры — программы, исполняемые видеопроцессорами, которые производят математические операции с вершинами полигонов, относящихся к полигональной модели ЗО-объекта, иначе говоря, они предоставляют возможность выполнять программируемые алгоритмы по изменению параметров вершин и их освещению (естественное развитие блока T&L). Каждая вершина определяется набором атрибутов: координаты, цвет, нормаль, текстурные координаты и т. п. В процессе работы вершинные шейдеры в зависимости от алгоритмов изменяют эти данные, например вычисляя и записывая новые координаты и/или цвет, т. е. входными данными вершинного шейдера является информация об одной вершине геометрической модели, обрабатываемой в данный момент. Обычно это пространственные координаты, нормаль, компоненты цвета и текстурные координаты. Результаты выполнения шейдера служат входными для дальнейшей части конвейера, затем растеризатор делает линейную интерполяцию входных данных для поверхности треугольника и для каждого пиксела исполняет соответствующий пиксельный шейдер.
До появления современных видеопроцессоров программисты либо использовали собственные программы и алгоритмы, изменяющие параметры вершин, которые исполнялись ЦП (программный T&L), либо фиксированные алгоритмы в видеопроцессорах с аппаратной реализацией трансформации и освещения (аппаратный T&L). Первая же шейдерная модель DirectX означала большой шаг вперед от фиксированных функций по трансформации и освещению вершин к полностью программируемым алгоритмам. В современных видеопроцессорах с вершинами при помощи вершинных шейдеров можно делать очень много сложных геометрических преобразований. Особое внимание вершинным шейдерам уделяется при использовании профессиональных видеокарт.
Возможности шейдеров росли от версии к версии. Начиная с версии 3.0, (включены в API DirectX 9c) шейдеры почти не ограничивают методы программирования, позволяя использовать в вычислениях текстуры и задавать уникаль-
131

2. Технические средства компьютерной графики
ные свойства вершин, т. е. вершинный блок графического процессора сейчас мало чем уступает по функциональности ЦП.
Пиксельные шейдеры — программы расчета значений цвета и яркости отдельных пикселов. Задачи вершинных шейдеров при необходимости можно решать на ЦП. С геометрическими расчетами мощный процессор справится без проблем. Но при выполнении пиксельного шейдера даже сверхмощный CPU задумается надолго, поскольку здесь происходит интенсивный обмен с памятью и сложные расчеты с использованием арифметики с плавающей точкой. Пиксельные шейдеры — это программы, выполняемые после растеризации для каждого пиксела изображения. Они производят выборку из текстур и/или математические операции над цветом и значением глубины (Z-buffer) пикселов. Все инструкции пиксельного шейдера выполняются попиксельно после того, как операции с трансформированием и освещением геометрии завершены. Пиксельный шейдер в итоге своей работы выдает конечное значение цвета пиксела и Z-значение для последующего этапа графического конвейера, блендинга. Наиболее простой пример пиксельного шейдера — мультитекстурирование, являющееся смешением нескольких текстур (diffuse и lightmap, например), и наложение результата вычислений на фрагмент.
До появления видеопроцессоров с аппаратной поддержкой пиксельных шейдеров у разработчиков были лишь возможности по обычному мультитекстурированию и альфа-блендингу, что существенно ограничивало возможности по многим визуальным эффектам и не позволяло делать многое из того, что сейчас доступно. И если с геометрией еще что-то можно было сделать программно, то с пикселами — нет. Ранние версии DirectX (до 7.0 включительно) были ориентированы на повершинные расчеты и предлагали крайне ограниченную функциональность попиксельных расчетов. Пиксельные шейдеры сделали возможным расчет освещения любых поверхностей попиксельно, используя заданные разработчиками материалы. Пиксельные шейдеры версии 1.1 (в понимании DirectX) уже могли не только делать мультитекстурирование, но и многое другое. Однако большинство игр, использующих шейдеры версии SM1, просто использовали традиционное мультитекстурирование на большинстве поверхностей, выполняя более сложные пиксельные шейдеры лишь на части поверхностей, для создания разнообразных спецэффектов (общеизвестно, что вода до сих пор является наиболее частым примером использования пиксельных шейдеров в играх). Обработкой пиксельных шейдеров практически всегда занимаются пиксельные конвейеры графического процессора. Использование пиксельных шейдеров позволило реализовать расчет освещенности объектов методом Фонга, обеспечивающим достаточно высокую реалистичность. С появлением шейдеров версии SM3 и поддерживающих их видеопроцессоров возможности пиксельных шейдеров возросли уже до того, чтобы с их помощью делать даже трассировку лучей (raytracing), пусть и с некоторыми ограничениями.
Технологии наложения и обработки текстур. Современные приложения трехмерной графики позволяют создавать для различных программ изображения
132

2.2. Графическая подсистема ЭВМ
объектов с высокой степенью реалистичности. Большую роль в процессе получения изображений с высоким уровнем реалистичности играет наложение текстур на трехмерные модели объектов. Посредством наложения текстур отображаются не только свойства поверхности объекта, но и учитываются различные оптические эффекты, позволяющие значительно повысить реалистичность изображения.
Texture Mapping (наложение текстур). Традиционно термином «texture mapping» в трехмерном моделировании называют процесс наложения изображения текстуры на объект (текстура как бы натягивается на объект) для придания ему соответствующего внешнего вида. Наложение текстур без каких-либо эффектов отличается простотой реализации, обработка не требует значительных вычислительных мощностей, возможно использование и отображение практически любых изображений.
MIP mapping (MIP-текстурирование). Multum in Parvo (с лат. — много в одном) — метод улучшения качества текстурных изображений при помощи текстур с разным разрешением для различных объектов одного и того же изображения в зависимости от их размера и глубины. Таким образом, в памяти хранятся несколько копий изображения текстуры в различных разрешениях. В результате этого изображение остается качественным при приближении к объекту и при удалении от него. При использовании этого метода формируется изображение высокого разрешения для близко расположенных объектов и изображение низкого разрешения при удалении объектов. MIP mapping снижает мерцание и «зашумленность» изображения, возникающие при texture mapping, повышает эффективность использования текстур.
Суть MIP-текстурирования заключается в предварительном или динамическом создании набора текстур с различным разрешением и уровнем детализации на основе базовой текстуры максимального разрешения. Цвет каждого текселя (элемент текстуры — определенный пиксел в текстуре) текстуры с более низкой детализацией выбирается путем аппроксимации цвета четырех ближайших текселей текстуры предыдущего (более высокого) уровня детализации. При построении трехмерной сцены определяется удаленность полигона от картинной плоскости и соответственно этому значению накладывается текстура с заданным разрешением. В настоящее время для выбора конкретного уровня детализации используют в основном динамический расчет.
Расчет уровня MIP можно вести либо для полигона в целом (по усредненному значению для трех вершин), либо для каждого пиксела. Последний метод дает более качественный результат и позволяет избежать некоторых дефектов изображения, но потребляет много вычислительных ресурсов. Кроме того, в зависимости от вычисленного уровня к текстурам применяют различные фильтры, например для сглаживания ребер.
Procedural Textures (процедурные текстуры). Эти текстуры создаются на основе аналитической математической модели. Такие текстуры не занимают в видеопамяти места, они генерируются пиксельным шейдером «на лету», каждый
133

2. Технические средства компьютерной графики
их элемент (тексель) получается в результате исполнения соответствующих команд шейдера. Наиболее часто встречающиеся процедурные текстуры: разные виды шума (например, fractal noise), дерево, вода, лава, дым, мрамор, огонь, т. е. те, которые сравнительно просто можно описать математически. Процедурные текстуры также позволяют использовать анимированные текстуры при помощи всего лишь небольшой модификации математических формул. Например, изображения облаков, созданные подобным образом, выглядят вполне правдоподобно и в динамике, и в статике.
Преимущества процедурных текстур также включают в себя неограниченный уровень детализации каждой текстуры. При этом не нужна пикселизация, текстура всегда генерируется под необходимый для ее отображения размер. Большой интерес представляет анимированный Normal Mapping, с его помощью можно сделать волны на воде без применения предварительно просчитанных анимированных текстур. Еще одно достоинство таких текстур состоит в том, что чем больше их применяется в продукте, тем меньше работы для художников (правда, больше для программистов) над созданием обычных текстур.
Bump Mapping/Specular Bump Mapping (бамп мэппинг). Это техника моделирования неровностей или микрорельефа на плоской поверхности без больших вычислительных затрат и изменения геометрии. Для каждого пиксела поверхности выполняется вычисление освещенности, исходя из значений в специальной карте нормалей, называемой normal map. Это обычно 8-битная черно-белая текстура и значения цвета текстуры не накладываются как обычные текстуры, а используются для описания неровности поверхности. Значение цвета каждого текселя определяет высоту соответствующей точки рельефа, большие значения означают большую высоту над исходной поверхностью, или наоборот.
Степень освещенности точки зависит от угла падения лучей света. Чем меньше угол между нормалью и лучом света, тем больше освещенность точки поверхности, т. е. если взять ровную поверхность, то нормали в каждой ее точке будут одинаковыми и освещенность также будет одинаковой. Если поверхность неровная, то нормали в каждой точке будут разными и освещенность будет различная — в одной точке она будет больше, в другой меньше. Отсюда и принцип bump mapping — для моделирования неровностей в разных точках полигона задаются нормали к поверхности, которые учитываются при попиксельном вычислении освещенности. В результате получается более натуральное изображение поверхности, bump mapping придает поверхности большую детализацию, такую, как неровности на кирпиче, поры на коже и на других поверхностях без увеличения геометрической сложности модели, так как расчеты ведутся на пиксельном уровне. Причем при изменении положения источника света корректно изменяется и освещенность этих неровностей.
Конечно, расчет освещенности в вершинах намного проще с точки зрения вычислений, но слишком нереалистично это выглядит, особенно при малом числе полигонов в геометрии. Интерполяция цвета для каждого пиксела не может воспроизвести большие, чем рассчитанные значения для вершин, т. е. пикселы в
134