Ликбез 3D
(для "продвинутых" пользователей)

Содержание:

Основные понятия

Разрешающая способность (resolution) - то количество точек по горизонтали и по вертикали, а также число цветов, которое видеоадаптер в состоянии отобразить. В последнее время сюда включают также частоту кадров (частоту обновления экрана). От разрешающей способности напрямую зависит качество изображения.

Пиксел (pixel) - элемент изображения, точка на экране. Не путать с текселом.

Рендеринг (rendering) - здесь: процесс генерации "плоского" двухмерного изображения на экране монитора (или другого устройства) на базе трехмерной векторной модели. Процесс рендеринга повторяется для каждого нового кадра, десятки раз в секунду.

Двойная буферизация (double buffering) - технология, обеспечивающая плавную смену кадров. Ее суть состоит в том, что в то время, когда идет показ предыдущего кадра, в памяти компьютера (или видеокарты) уже может генерироваться следующий. Без двойной буферизации практически невозможно добиться высокого качества трехмерной анимации. Возможность использования двойной буферизации зависит от выбранного видеорежима, и объема свободной памяти.

Проекция (projection) - система математических выражений, с помощью которых трехмерная модель проецируется на экран компьютера (в общем случае). Самые распространенные - перспективная и ортогональная проекции.

Z-буфер (Z-buffer) - алгоритм удаления невидимых точек, линий и поверхностей. Главный параметр - разрядность. На дешевых видеокартах она равна 16 битам, то есть приходится выбирать между качеством изображения и дальностью обзора; реально же оба показателя невысоки. Более дорогие модели предлагают 24 и 32 бита, что избавит Вас от многих проблем.

Материал (material) - набор параметров, на базе которых рассчитывается уравнение освещения (lighting equation). В их число входят:

  • Цвет неосвещённой поверхности (ambient) - цвет той части, которая целиком находится в тени

  • Рассеянная составляющая (diffuse) - цвет освещённой источником части объекта.

  • Отражённая составляющая (specular) - цвет, отражённый поверхностью

  • Самосвечение (emission) - эффект самосвечения объекта.

  • Отражательная способность (shininess) - фактически, степень "зеркальности" материала. В уравнение входит как степень.

О свещение (lighting) - вычисление значений цвета в вершинах (точках) треугольника в зависимости от параметров материала и источника света.

Модель освещения (lighting model) - существует две основные модели освещения, Gouraud и Phong.

  • В первой (Гуро) цвета вычисляются в вершинах треугольника, а затем интерполируются внутри него. Этот быстрый метод подходит для большинства приложений, особенно если объекты небольшие и сильно удалены от источника света, но даёт крайне низкое качество в отдельных случаях. Пример: если прожектор излучает свет узким конусом, то, по идее, должна быть освещена только та часть треугольника, которая попадает в конус. В модели же Фонга цвет будет интерполирован между вершинами, что будет выглядеть уж совсем нереалистично.

  • Во второй (Фонг) интерполируются не цвета, а векторы нормалей, и цвета вычисляются отдельно для каждой точки поверхности (уравнение освещённости рассчитывается практически для каждого пиксела). Качество изображения гораздо выше, чем в модели Гуро, можно получить весьма реалистичные блестящие поверхности, однако существенно больше и требования к скорости системы.

На сегодняшний день в OpenGL для освещения используется модель Gouraud. Однако новые расширения OpenGL позволяют не только включать режим Фонга (там это называется "освещение фрагментов", fragment lighting), но и комбинировать обе модели освещения.

Модель тонирования (shade model) - метод, в соответствии с которым закрашиватся поверхности на экране. Наиболее старый - проволочный (wireframe), когда линиями вычерчиваются только рёбра объекта. На следующей ступени эволюции стоит сплошной (flat), то есть вычерчиваются грани объекта, но каждая заполняется одним сплошным цветом.   Самым современным является сглаженный (smooth), создающий плавные цветовые переходы вдоль поверхности. Все три метода применяются:

  • проволочные модели исключительно быстры в работе, содержат необходимый минимум информации об объекте, и потому удобны в инженерных задачах (CAD / CAM)

  • сплошное (flat) тонирование в силу своей достаточно высокой скорости даже на компьютере без 3D-акселератора применялось в большинстве старых 3D-игр

  • сглаженное (smooth) тонирование обеспечивает самое высокое качество, однако требует много вычислительных ресурсов. Сегодня в большинстве приложений используется именно этот метод для достижения максимальной реалистичности.

Цвет в вершинах может быть или задан явно программой, в формате RGBA, или рассчитан, исходя из параметров назначеного материала и источников света.

Тексел (texel) - элемент изображения, точка в текстуре. Тексел редко совпадает с пикселом - обычно текстура масштабируется в сторону увеличения или уменьшения, то есть один тексел может или покрывать несколько пикселов, или, напротив, на одну точку на экране монитора попадает несколько соседних текселов из текстуры.

Наложение текстур (texture mapping) - на поверхность объекта может быть натянута некоторая картинка. Поскольку для ее хранения требуется значительное место, а для наложения - серьезные вычислительные ресурсы, желательно, чтобы операция выполнялась аппаратно. Такая возможность определяется используемым в видеокарте чипсетом, а также объемом видеопамяти. Поскольку может понадобиться как увеличение, так и уменьшение исходной картинки, используют линейную интерполяцию и MIP-mapping.

Наложение текстур используется совместно с тонированием (shading), при этом полученный на предыдущем этапе цвет может комбинироваться с картинкой-текстурой ­ смешиваться с ней, модулировать значение тексела и т.д.

Смешивание (blending). Режим, в котором новое значение цвета не замещает уже находящееся в буфере кадра (framebuffer) , а смешивается с ним по заранее заданной формуле. Смешивание используется во многих алгоритмах, от самых простых (обеспечение прозрачности воды и стёкол), до сложных - антиалиасинг, отражения, тени и рельеф поверхности (bump).

Дисплейные списки (display lists) - от обычного потока команд отличаются так же, как компилятор от интерпретатора. В идеальной случае драйвер видеокарты должен уметь преобразовывать команды OpenGL в "родной" для графического чипа вид, а храниться эта "программа" должна в локальной памяти карты. Оттуда микрокод может быть быстро выполнен графическим процессором.

Многопроходные алгоритмы (multi-pass rendering) - применяются для достижения сложных эффектов, которые не реализованы в видеокарте целиком. Примеры таких алгоритмов - отражения на блестящих поверхностях, . Многопроходность заключается в том, что рендеринг сцены идет несколько раз с несколько различными параметрами, и полученные результаты комбинируются между собой.

Рельефный эффект   (bump) - метод, придающий поверхности рельефный вид. Это значительно повышает реалистичность изображения. Примеры материалов, в которых обычно используется bump - дерево, апельсиновая кожура, камень - все, что имеет шершавую поверхность. В действительности это, конечно, рельефом не является, поскольку может имитировать лишь незначительные отклонения от плоскости, в пределах нескольких пикселов. Однако bump реализуется безо всякого усложнения геометрии модели, то есть его применение не приводит к существенному падению скорости.

Тесселяция (tesselation) - процесс разбиения многоугольников на треугольники. Дело в том, что большинство "железа" умеет аппаратно работать только с такими примитивами, у которых число вершин не более 4 (точки, линии, треугольники и четырёхугольники). OpenGL же допускает использование любых многоугольников. Таким образом, необходима тесселяция - разделение сложного примитива на несколько простых. Тесселяция, в основном, выполняется целиком за счёт центрального процессора, без участия 3D-акселератора.

Дополнительные возможности

Их наличие, в принципе, не обязательно, но весьма желательно. Некоторые из них заметно ускоряют работу, другие повышает качество изображения, третьи - позволяют создавать специальные эффекты. Формально все они поддерживаются еще в версии 1.0 OpenGL, но реальное их наличие все же определяется аппаратными возможностями и драйвером.

MIP-mapping . Снижает искажения текстуры при удаления наблюдателя от поверхности. Для этого сохраняются несколько версий исходной картинки c постепенно убывающим разрешением. Таким образом, у Вас всегда есть наготове та же картинка, но нужного в данный момент размера. MIP-mapping требует примерно в 1.33 раза больше памяти, чем исходный образ.

Канал прозрачности (alpha buffer) - при его наличии в видеопамяти хранятся не только компоненты цвета R, G, B, но и альфа-канал A. Значение коэффициента A используется в одном из вариантов анти-алиасинга; оно также может найти примениние в многопроходных алгоритмах.

Буфер накопления (accumulation buffer) - используется для различных сложных спецэффектов, таких как тени, отражения, и высококачественный анти-алиасинг. Существенно замедляет работу, тем более что на большинстве видеокарт реализован чисто программно, в системной памяти компьютера.

Трафарет (stencil) - позволяет производить рисование "по трафарету", то есть оставлять часть картинки неизменной. Применяется для создания большинства спецэффектов, иногда совместно с буфером накопления и смешиванием. К счастью, на большинстве современных 3D-акселераторов (исключая Voodoo) стенсил реализован полностью аппаратно.

Удаление задних/передних граней (face culling). Можно существенно повысить скорость, исключив из расчетов задние части поверхности. Так можно поступить, если объект непрозрачный, и его заднюю часть все равно не видно. Кроме того, отсечение граней используется в некоторых сложных многопроходных алгоритмах; например, одним из методов генерации теней от объектов для определения затеняемой области на экране.

Туман (fog). Самое частое применение - моделирование тумана для создания атмосферных эффектов. Приводит к незначительному снижению скорости. Fog бывает полигональный и пиксельный; последний обладает гораздо более высоким качеством, так как рассчитывается не в вершинах объекта, а для каждого пиксела.

Сглаживание (anti-aliasing) - технология, с помощью которой сглаживаются зазубренные края объектов или линии. Очень помогает в режимах низкого разрешения, но при этом требует или канал прозрачности в видеопамяти (alpha buffer), или сортировку графических примитивов "от дальнего к ближнему". Обычно достигается смешиванием цветов (blending) по краям линий и полигонов; более высокое качество может быть достигнуто в сочетании с буфером накопления.

В OpenGL доступны 3 вида антиалиасинга, отдельно для точек, линий и полигонов. Наиболее употребительный полигональный краевой антиалиасинг доступен не на всех видеокартах.

Размытие (dithering) заключается в смешивании цветов соседних пикселов на экране. Позволяет визуально расширить цветовой диапазон  в режимах, где реально число цветов невелико (обычно это относится к 256-цветным видеорежимам с палитрой, но улучшает качество и в HiColor - 15 или 16 бит / цвет).

Средства OpenGL 1.1

Растущие объемы данных, и высокие требования к скорости и качеству работы программ привели к расширению стандарта новыми функциями. Уже выпускается ряд изделий, производители которых заявляют о полной аппаратной поддержке OpenGL 1.1. Это, в частности, GLint MX (фирма ).

Текстурные объекты (texture objects) - пожалуй, наиболее существенное из всех новшеств. Если раньше для задания каждой новой текстуры требовалась ее передача по системной шине, то теперь достаточно один раз загрузить картинку в память, а затем обращаться к ней по присвоенному индексу. Это особенно важно при наличии на видеокарте большого объема памяти (8 Мб и выше). Кроме того, упрощают управление текстурной памятью.

Массивы вершин (vertex arrays) - традиционная OpenGL-программа передает устройству отдельно текстурные координаты U-V, направление нормали X-Y-Z, и собственно три координаты вершины. Таким образом, для передачи восьми параметров используются 3 функции. Можно было бы, конечно, передавать все эти данные в одной структуре, однако лучше дать возможность видеокарте самой выбирать информацию из памяти компьютера. Именно это и реализуется с помощью массивов вершин. При этом можно как создать отдельный массив для каждого типа информации, так и объединить все данные в один большой массив.

На существующей архитектуре метод позволяет кэш-памяти работать более рационально. А появление шины AGP, дающей устройству прямой и быстрый доступ к системной памяти,  позволит совершить очередной прорыв в плане ускорения трехмерной графики.

Индексированные текстуры (paletted textures) - в OpenGL 1.0 картинки-текстуры хранились в формате RGB, причем каждая компонента занимала от 1 до 4 байт. Это приводило к быстрому расходованию памяти, и усложняло использование 256-цветных изображений с палитрой. Для сравнения, картинка размером 256x256 в формате RGB занимает 192 Кб, а в индексированном виде - чуть больше 64 Кб. Мы получает выигрыш в скорости и размере, и при этом - почти без потерь в качестве ! При включенном dithering'е индексированные текстуры выглядят вполне прилично.

Расширение BGRA - позволяет без специального преобразования загружать в качестве текстур файлы, цвет в которых хранится в формате BGR или BGRA, то есть в обратном порядке. Такой метод хранения повсеместно используется в Windows (в частности, файлы .BMP), то есть расширение здорово упрощает разработку приложений для этой операционной системы.

Особо отметим, что как BGRA, так и индексированные текстуры пока имеют статус расширений, то есть их доступность, в принципе, не гарантируется, хотя на сегодняшний день они поддерживаются большинством драйверов.

Что появилось в OpenGL 1.2

По-первых, большинство полезных расширений OpenGL 1.1 вошло в стандарт. Это касается, в первую очередь, массивов вершин, текстурных объектов, и текстур с палитрой. Затем в растровую часть 3D-конвейера добавился набор расширений под общим названием "ARB imaging subset" - это, в основном, новые специальные функции альфа-смешивания и преобразования цветов. То есть существенно упростились различные многопроходные алгоритмы, такие как тени, отражения, рельеф поверхности (bump-эффект), и модель освещения Фонга (Phong shading). В отдельных реализациях Phong shading даже может выполняться аппаратно.

На правах расширений существуют мультитекстурирование и параметры точки (для моделирования систем частиц).



Главная страница