Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Шесть этапов работы 3D-конвейера

Поиск

Большинство приложений трехмерной графики, в том числе игр, при построении объемных сцен придерживаются определенной последо­вательности действий, в совокупности составляющей ЗD-конвейер. Итогом работы ЗD-конвейера является отрисовка (рендеринг) резуль­тирующего изображения на дисплее компьютера. Группу операции, выполняющих обособленные промежуточные действия, принято назы­вать этапом, или стадией ЗD-конвейера. Описываемая ниже после­довательность операций отнюдь не является жестко заданной, а ско­рее общепринятой в современных графических подсистемах. При конкретной реализации на программном и аппаратном уровнях могут появляться существенные отличия, однако смысловое содержание блоков практически не меняется. Итак, на сегодняшний день процесс визуализации трехмерной сцены на экране компьютера выглядит в общих чертах следующим образом.
Первый этап. Здесь определяется состояние объектов, принимающих участие в сцене, которую необходимо отобразить. На первый взгляд к самой графике этот этап отношения не имеет. На самом деле он явля­ется определяющим, ибо состояние объектов и их взаимное положе­ние формируют логику последующих действий программы. Напри­мер, если вашего персонажа в игре уже «убили», какой смысл вообще выводить трехмерную сцену? С каждым объектом в сцене связана соответствующая текущему моменту геометрическая модель. То есть объект один (например, некий монстр), но с ним сопоставляются раз­ные геометрические модели в зависимости от состояния — жив, ранен убит, трансформировался в другой объект и т. д. Практически все опе­рации на первом этапе выполняет центральный процессор. Резуль­таты его работы пересылаются в графический чипсет посредством драйвера.
Второй этап. Происходит декомпозиция (разделение на примитивы) геометрических моделей. Внешний вид объекта формируется с помо­щью набора определенных примитивов. Чаще всего в роли примитива выступает треугольник как простейшая плоская фигура, однозначно располагаемая в трехмерном пространстве. Все прочие элементы состоят из таких треугольников. Таким образом, можно утверждать, что по большей части термины «полигон» и «треугольник» примени­тельно к игровой SD-графике суть синонимы.
Современные графические процессоры умеют выполнять дополни­тельные операции, например тесселяцию (Tesselation), то есть разде­ление исходных треугольников на более мелкие. Некоторые графи­ческие чипсеты могут аппаратно обрабатывать геометрические модели, построенные на основе параметрических поверхностей (меха­низм RT-Patches). Часть графических процессоров умеет превращать плоские треугольники в трехмерные поверхности путем «выдавли­вания» в третье измерение (механизм N-Patches).
Итоговый результат операций второго этапа пересылается в блок трансформаций и освещения (Transform&Lighting, T&L) геометри­ческого процессора.
Третий этап. В блоке T&L на аппаратном уровне к вершинам треуголь­ников применяют различные эффекты преобразований и освещенно­сти. Содержание операций блоковT&L новейших графических чип­сетов можно динамически изменять посредством вершинных шейдеров (Vertex Shaders) — специальных микропрограмм, включаемых в код игры. То есть сегодня персональный компьютер в дополнение к центральному процессору получил полноценный программируемый графический процессор. По завершении операций трансформации и расчета освещенности параметры вершин нормализуются и приводятся к целочисленному виду.
Четвертый этап. На данном этапе происходит так называемая уста­новка примитивов (Triangle Setup). Графический процессор пока ничего не знает о свойствах треугольников, поскольку обрабатывал вершины по отдельности. Теперь необходимо «собрать» вершины в треуголь­ники и преобразовать результаты в координаты и цвет каждого пик­села, а также отсечь невидимые области.
В ходе «сборки» определяется видимость объектов с позиции камеры. Полигоны, находящиеся ближе к камере, могут загородить более уда­ленные полигоны. Для хранения информации о степени удаленности объекта от плоскости проецирования используют специальный буфер глубины (Z-буфер). Современные графические процессоры применяют различные механизмы отсечения невидимых полигонов на ранних эта­пах ЗВ-конвейера с тем, чтобы избежать излишних операций. Дан­ные буфера глубины обрабатываются специализированными блоками графического процессора. В конечном счете, на выходе блока геомет­рических преобразований получают проекцию трехмерной сцены на плоскость визуализации. Координаты и исходный цвет видимых пик­селов передаются в текстурный конвейер (Texture Pipeline).
Пятый этап. Графический чипсет может иметь несколько параллель­ных текстурных конвейеров. В каждом из них происходит наложение текстур различного типа, в том числе и тех, которые сами не отобра­жаются (например, карты высот), а служат для модификации других текстур. На этом этапе в современных чипсетах возможно исполне­ние пиксельных шейдеров (Pixel Shaders) — специальных микропрог­рамм, определяющих порядок смешивания текстур, полученных на выходе из каждого конвейера. Здесь также учитывается информация (полученная на этапе установки примитивов) о принадлежности пик­села к определенному треугольнику. В целом указанные операции составляют суть процесса визуализации (рендеринга).
Шестой этап. На заключительном этапе работы ЗD-конвейера к полу­ченному в текстурном блоке плоскому изображению применяют опе­рации устранения дефектов (например, часто используют билиней­ные, анизотропные и другие фильтры). Операции конечной обработки применяют какой-либо эффект (например, туман) к целиком сформи­рованному изображению. Перед выводом в буфер кадра в последний раз проверяется видимость пикселов, и наконец изображение появ­ляется на экране.

Низкоуровневые графические API

Шейдеры, шейдерные языки

Ше́йдер (англ. Shader; схема затемнения, программа построения теней) — это программа для одной из ступеней графического конвейера, используемая втрёхмерной графике для определения окончательных параметров объекта или изображения. Она может включать в себя произвольной сложности описание поглощения и рассеяния света, наложения текстуры, отражение и преломление, затемнение, смещение поверхности и эффекты пост-обработки.

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

Чтобы понять, что такое шейдер, разберемся для начала, как видео карта рисует примитивы (треугольники, полигоны и др.) На вход поступают данные о каждой вершине примитива. Например, положение вершины в пространстве, нормаль и текстурные координаты. Эти данные называются вершинными атрибутами (vertex attributes). GPU на их основе вычисляет выходные значения: положение вершины в экранных координатах, цвет вершины, рассчитанный в зависимости от освещения и т.д. До выхода видео карт GeForce 3 и Radeon 8500 этот процесс был неуправляемым. Если вас, например, не устраивали те формулы, по которым считается освещение в OpenGL, и вы хотели применить свои, то ничего нельзя было поделать. Приходилось либо довольствоваться тем, что умеет GPU, либо выполнять расчеты для каждой вершины на процессоре, что намного медленнее. Решением этой проблемы стали вертексные программы (в Direct3D они называются вертексные шейдеры). Вертексная программа - это программа, написанная на специальном языке низкого уровня, которая выполняется на GPU и преобразует входные вертексные атрибуты в выходные, которые поступают на вход пиксельного шейдера. Важной особенностью вертексных и пиксельных программ является то, что все инструкции работают с векторами. Например, чтобы посчитать скалярное произведение, надо выполнить всего лишь одну инструкцию, а не 5 (2 сложения и 3 умножения), как на CPU. Благодаря этому можно выполнить массу операций небольшим числом инструкций. Например, умножение матрицы на вектор - всего 4 инструкции. А если инструкций мало, то скорость выполнения такой программы довольно высокая.
Значения, вычисленные в вертексном шейдере, интерполируются по треугольнику. На видео картах, не поддерживающих пиксельные шейдеры, для каждого пикселя определяется его цвет и цвет текстуры (или нескольких текстур) в данной точке. Потом эти цвета умножаются или складываются, в зависимости от параметров выполненной ранее функции glTexEnv(), и результат записывается в буфер кадра. Если же видео карта поддерживает пиксельные шейдеры, то все намного интереснее. Интерполированные по треугольнику значения поступают на вход некоторой программы, называемой пиксельным шейдером. Это программа, состоящая из ряда арифметических и других инструкций, рассчитывает цвет пикселя, который записывается в буфер кадра. По сравнения с вертексными программами, скорость выполнения пиксельных шейдеров намного выше. Можно почти моментально выполнять штук 10 векторных инструкций для каждого пикселя! На CPU такое сделать просто невозможно.
Пиксельные и вертексные шейдеры позволяют на аппаратном уровне создавать потрясающие эффекты: освещение на пиксельном уровне, bump mapping, отражение и преломление, волны на воде, скелетная анимация персонажей, тени и многое другое!

Шейдерные языки

Впервые использованные в системе RenderMan компании Pixar, шейдеры получали всё большее распространение со снижением цен на компьютеры. Основное преимущество от использования шейдеров — их гибкость, упрощающая и удешевляющая цикл разработки программы, и при том повышающая сложность и реалистичность визуализируемых сцен.

Шейдерные языки обычно содержат специальные типы данных, такие как матрицы, семплеры, векторы, а также набор встроенных переменных и констант для удобной интеграции со стандартной функциональностью 3D API. Поскольку компьютерная графика имеет множество сфер приложения, для удовлетворения различных потребностей рынка было создано большое количество шейдерных языков.

Профессиональный рендеринг

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

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

Шейдерный язык RenderMan

Шейдерный язык RenderMan, описанный в Спецификации интерфейса RenderMan, является фактическим стандартом для профессионального рендеринга. APIRenderMan, разработанный Робом Куком, используется во всех работах студии Pixar. Он также является первым из реализованных шейдерных языков.

Шейдерный язык Gelato

NVIDIA Gelato представляет собой оригинальную гибридную систему рендеринга изображений и анимации трехмерных сцен и объектов, использующую для расчетов центральные процессоры и аппаратные возможности профессиональных видеокарт серии Quadro FX.

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

Open Shading Language

Open Shading Language (OSL) - представляет собой небольшой, но богатый язык для программируемых шейдеров в развитых рендерах и других приложениях, идеально подходит для описывающих материалов, света, перемещения и получения изображения.

OSL - был разработан Sony Pictures Imageworks для использования в своем внутреннем рендере и используется для анимационных фильмов и визуальных эффектов.

OSL используется в пакете для создания трёхмерной компьютерной графики Blender.

 



Поделиться:


Последнее изменение этой страницы: 2016-04-21; просмотров: 1246; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.75.138 (0.007 с.)