- Щоб додати коментар, увійдіть
Аппаратная визуализация
Графические процессоры (ГП) постоянно совершенствуются, а вместе с ними расширяются возможности для ускорения визуализации с помощью графического, а не центрального процессора. Самое значительное усовершенствование технологии графических процессоров непосредственно связано с ускорением визуализации на нескольких разных уровнях и повсеместно наблюдается в виде усиленной аппаратной поддержки в ряде средств визуализации и основных приложений. Подобная интеграция чаще всего связана с просмотром и применением аппаратных шейдеров для таких аппаратных платформ, как игровые механизмы, а не с ускорением программной визуализации. Примером такой интеграции может служить расширенная поддержка разработки и применения шейдеров, работающих в реальном масштабе времени, во всех упоминаемых основных приложениях. Так, в XSI допускается просмотр, правка и выявление неисправностей шейдеров, работающих в реальном масштабе времени с поддержкой Cg (Cg означает С-подобный язык программирования для графики), OpenGL и DirectX, совершенно независимо от любого программного средства визуализации.
Такие термины, как Cg, DirectX и OpenGL, могут быть не совсем знакомы художникам, не работающим с машинной графикой, предназначенной для воспроизведения в реальном масштабе времени, поскольку это совершенно иная область. Главное отличие аппаратной визуализации от программной заключается в самом подходе к визуализации. При аппаратной визуализации выполняется поочередная обработка многоугольников без обращения к информации, хранящейся в базе данных сцены. Основное назначение графического процессора состоит в том, чтобы как можно быстрее заполнить буфер кадров, обеспечив тем самым визуализацию в реальном масштабе времени. А назначение аппаратной визуализации — как можно быстрее пропустить вершины через графический процессор на стадиях обработки вершин и фрагментов (подробнее об этом далее в разделе "Программируемые графические процессоры и деревья шейдеров") и заполнить буфер кадров с учетом заданного разрешения, как это, например, происходит в играх реального времени. При программной визуализации разрешение не играет существенной роли, и теоретически обработка может выполняться с любым разрешением в течение данного промежутка времени при надлежащей подготовке к визуализации даже если требуется визуализировать сначала отдельные участки сцены, а затем объединить их на стадии компоновки. Еще одно отличие заключается в том, что программа может анализировать каждый пиксель на уровне субпикселей, обеспечивая улучшенное сглаживание и интерполяцию шейдера. Следовательно, существенное отличие обоих методов заключается в подходе к самой визуализации: если программный метод позволяет точнее формировать визуализируемое изображение поочередными выборками независимо от разрешения, то аппаратный метод с самого начала учитывает разрешение, совершенно не принимая во внимание саму сцену и как можно быстрее заполняя пиксели, исходя из заданного разрешения. Одним из недостатков аппаратной визуализации для развлекательных приложений является ее зависимость от разрешения: визуализация не может быть выполнена с разрешением, превышающим возможности системной видеоплаты.
В связи с тем что аппаратная визуализация практически малопригодна для большинства пользователей основных приложений с встроенной поддержкой mental ray (и это станет ясно из дальнейшего), в последующих разделах этот метод рассматривается лишь в самых общих чертах.
Графический процессор, язык Сд и технологии OpenGL и Direct3D
В прошлом все расчеты трехмерной графики выполнялись центральным процессором, включая преобразование вершин в пиксели и растрирование трехмерной графики. Аппаратные средства лишь отображали содержимое буфера кадров после того, как значения каждого пикселя были полностью рассчитаны центральным процессором. В настоящее время центральный процессор по-прежнему используется при программной визуализации, но его вычислительные возможности намного обширнее, чем в прошлом. Одна из причин, по которым центральный процессор по-прежнему используется при визуализации, заключается в его программируемости. Несмотря на существенное повышение быстродействия аппаратных средств, они до сих пор не поддерживают программируемость и функциональность шейдеров на таком же уровне, как и алгоритмы трассировки лучей и сложные шейдеры. В связи с тем, что аппаратные средства обрабатывают вершины по очереди, заполняя буфер кадров, это, очевидно, не позволяет в полной мере поддерживать усовершенствованные алгоритмы, требующие рассматривать и другие геометрические объекты на сцене, что характерно для освещения отраженным светом или других развитых свойств трассировки лучей. Но независимо от того, выполняется трассировка лучей или нет, самое главное, что аппаратные средства выполняют обработку на уровне пикселей, тогда как программные средства способны производить расчеты затенения на уровне субпикселей, а следовательно, для затенения программный метод по-прежнему более предпочтителен, чем аппаратный.,/p>
Преимущества графического процессора
Графические процессоры предназначены для того, чтобы максимально ускорить и повысить гибкость преобразований вершин, после которых следует сборка примитивов и растрирование, в результате чего образуются вершины, освещенные, затененные и помещенные в конкретном пространстве пикселей, а все неиспользуемые вершины удаляются. Способность графического процессора решать подобные задачи в реальном масштабе времени дает ему некоторые преимущества над центральным процессором. В действительности, графический процессор способен обрабатывать сотни миллионов многоугольников в секунду. В итоге центральный процессор освобождается от этих обязанностей, а система в целом работает более эффективно, распределяя задачи между центральным и графическим процессорами. Очевидно, что преимущества современных графических процессоров могут быть использованы во время визуализации без потери качества. Именно этой цели и служит ускорение средствами OpenGL, обеспечивающее заметное повышение производительности системы. Это означает, что графическому процессору поручается задача преобразования вершин, с которой он чаще всего справляется намного быстрее, чем центральный процессор. В свою очередь, центральному процессору поручается задача обработки шейдеров, чтобы обеспечить требуемое качество, поскольку возможности графического процессора в отношении обработки шейдеров на данный момент весьма ограничены.
Связь с графическим процессором
Для связи с графическим процессором приходится использовать один из двух распространенных интерфейсов API: OpenGL и Direct3D. Технология OpenGL была разработана для систем на базе Unix компанией Silicon Graphics в начале 1990-х годов в качестве средства, предоставляющего программный интерфейс для сопряжения с графическим процессором. А технология Direct3D была разработана компанией Microsoft и является составной частью мультимедийной среды DirectX. Технология Direct3D также предоставляет интерфейс для обмена данными трехмерной графики с графическим процессором. В настоящее время технология OpenGL стала уже межплатформенным стандартом и поддерживается в операционных системах Windows, Mac OS, Unix и Linux, а следовательно, она наиболее доступна. В то же время технология Direct3D доступна только в системах Windows и, скорее всего, останется составной частью мультимедийной среды Microsoft DirectX.
Эти интерфейсы API предполагают получить скомпилированные программы шейдеров, которые затем передаются в виде инструкций графическому процессору для последующей обработки. Такое применение скомпилированных шейдеров называется статической компиляцией. Шейдеры, специально написанные для DirectX или OpenGL, компилируются программистом, а затем передаются API с помощью одного из этих интерфейсов. Следовательно, при использовании этих интерфейсов для аппаратной визуализации в mental ray необходимо также предоставить (в зависимости от конкретной системы) ряд предварительно скомпилированных шейдеров, поддерживающих Dircct3D или OpenGL, например, библиотеку migl_base.dll шейдеров mental ray, в которой содержатся базовые шейдеры OpenGL.
Аппаратные шейдеры mental ray
Если активизирована аппаратная визуализация, то mental ray автоматически находит аппаратные шейдеры, носящие те же названия, что и программные шейдеры, применяемые в сцене. Отличие в их названиях заключается в том, что аппаратные шейдеры обозначаются особым префиксом или суффиксом, помогающим различить их как шейдеры аппаратного типа. Шейдеры Cg могут предоставляться в виде исходного кода без предварительной компиляции (как будет показано в следующем подразделе), a mental ray находит такие шейдеры в файлах с расширением .cg по указанному пути. В названиях этих шейдеров присутствует имя программного шейдера, дополняемое суффиксом, как, например, mib_illum_phong_v.cg или mib_illum_phong_f.cg, что означает два разных типа аппаратных шейдеры: шейдеры вершин (_v.cg) и фрагментов (_f.cg), и в данном примере прослеживается связь с базовым шейдером mib_illum_phong. При поиске скомпилированного шейдеры OpenGL или Direct3D (или библиотеки шейдеров) mental ray предполагает обнаружить префикс, подобный migl_base.dll, т.е. библиотеку аппаратных шейдеров, эквивалентную библиотеке базовых шейдеров base.dll. Ниже приведены префиксы для разных библиотек шейдеров.
| ПРЕФИКС | ТИП ШЕЙДЕРА |
| micg_ | шейдеры Cg |
| migl_ | шейдеры OpenGL |
| misl_ | шейдеры Direct3D |
Программные средства Cg, OpenGL 2.0 и HLSL
Язык программирования уровня Cg, используемый для написания шейдеров, обеспечивает динамическую компиляцию шейдеров при выполнении визуализации. Шейдеры Cg могут применяться вместе с интерфейсом API на любой платформе независимо от аппаратных средств, при условии что в системе поддерживается компилятор Cg или же шейдер Cg уже скомпилирован. Следовательно, шейдеры Cg не привязаны к конкретному оборудованию и могут работать с видеоплатами NVIDIA, ATI и других производителей. Достаточно ввести код шейдеры на С-подобном языке Cg, чтобы он был затем динамически скомпилирован во время выполнения визуализации и передан графическому процессору через интерфейс API соответствующей платформы. Таким образом, программирование шейдеров на языке Cg является альтернативой интерфейсам шейдеров низкого уровня, используемым вместе с OpenGL и Direct3D.
Язык программирования Cg был разработан компанией NVIDIA в тесном сотрудничестве с корпорацией Microsoft в качестве удобного средства сопряжения с графическим процессором через Direct3D или OpenGL. А в результате совместной разработки NVIDIA и Microsoft появился еще один язык программирования
высокого уровня, предназначенный для написания шейдеров (HLSL) в среде DirectX 9.0 и эквивалентный Cg. Оба языка Cg и HLSL могут попеременно использоваться вместе с Direct3D в системах Windows. Аналогично, OpenGL 2.0 является расширением базовой поддержки OpenGL для более гибкого и надежного программирования шейдеров, выходящего за рамки возможностей простейшего, непрограммируемого шейдеры при аппаратной визуализации.
Для пользователей mental ray имеет значение, прежде всего, тот факт, что, применяя шейдеры Cg, они могут описывать (аналогично шейдерам Phenomenon) деревья шейдеров, которые компилируются во время визуализации, при условии что система может связываться с выполняемой программой, поддерживающей динамическую компиляцию кода Cg. Ведь всякий раз, когда выполняется визуализация, компилятор сначала компилирует код Cg для графической системы конкретной платформы (DirectX или OpenGL) с учетом возможностей графического процессора. Следовательно, язык Cg обеспечивает общее основание и гибкость доступа к любой среде, сокращая в то же время цикл трудоемкой разработки.
Преимущества языка Cg
Связь всех упомянутых выше технологий с графическим процессором прослеживается в том, что все шейдеры, определяющие внешний вид визуализируемой трехмерной графики, обрабатываются графическим процессором. Следовательно, программа на языке Cg, сопрягаемая с графическим процессором через интерфейс OpenGL или Direct3D, выполняет в графическом процессоре затенение каждой вершины или фрагмента (подробнее об этом — далее в разделе "Программируемые графические процессоры и деревья шейдеров") до тех пор, пока не завершится расчет (это делается повторно, если требуется). Что же касается mental ray, то в данном случае достаточно предоставить исходный код Cg нескольких базовых составляющих шейдеров, которые объединяются в сложное дерево шейдеров, а затем скомпилировать этот код во время визуализации. Работа таких составных шейдеров основывается на программируемости графического процессора для неоднократного выполнения нескольких математических операций затенения за несколько "проходов" при расчетах на языке Cg, эквивалентных тем, что производятся шейдерами Phenomenon. На рис. 2.12 представлен метод визуализации с использованием шейдеров Cg вместо эквивалентных шейдеров OuenGL или Direct3D.
Программируемые графические процессоры и деревья шейдеров
Аппаратные шейдеры прошли долгий путь развития от поддержки простейших базовых шейдеров до поддержки целых деревьев шейдеров. Теперь деревья шейдеров составляют основу любого приличного приложения трехмерной графики и анимации. Граф шейдеров составляется путем связывания нескольких различных элементов в форме дерева, образуя сложный эффект затенения. Для поддержки деревьев шейдеров требуются программируемые графические процессоры третьего или более старшего поколения. Это означает, что графический процессор должен уметь интерпретировать и выполнять инструкции, предоставляемые шейдерам для математических расчетов цвета. Программируемый графический процессор может принимать такие инструкции по интерфейсу 3D API (OpenGL и Direct3D) от предварительно скомпилированных шейдеров Cg, GLSL или HLSL. И несмотря на то что шейдеры Cg (и только они) могут передаваться не скомпилированными, к тому моменту, когда они достигнут графического процессора, они уже будут скомпилированы динамическим компилятором Cg.
В прошлом операции над вершинами и фрагментами не программировались. Они выполнялись строго аппаратно, т.е. на уровне графического процессора, где они могли решать конкретные задачи, характерные для простейших базовых шейдеров, но не для деревьев шейдеров или программируемых процедур, определяемых пользователем (этот вопрос подробнее рассматривается в следующем разделе).
Благодаря техническому прогрессу появилась возможность для программируемой обработки вершин и фрагментов, а следовательно, и для указания математических операций, предназначаемых для выполнения графическим процессором. В свою очередь, это открыло путь для применения программируемых деревьев шейдеров, которые могут быстро обрабатываться графическим процессором и соответствуют шейдерам Phenomenon низкого уровня (см. главу 1).

Рис. 2.12. Порядок аппаратной визуализации с использованием шейдеров Cg, OpenGL или Direct3D
Деревья шейдеров могут обрабатываться с помощью инструкций скомпилированных шейдерных фрагментов, использующих возросшие возможности современных видеоплат выполнять на приличном уровне элементарные шейдерные операции. Таким образом, помимо ускоренного отображения трехмерной графики, аппаратная визуализация теперь позволяет полностью сформировать изображение, опираясь на аппаратные возможности графического процессора.
Стадии преобразования вершин и фрагментов
При аппаратной конвейерной обработке сначала решаются такие задачи, как преобразование, предварительное освещение и расположение вершин на экране. После этого следует стадия сборки примитивов, на которой из вершин образуется геометрическая форма, и, наконец, составляются фрагменты для выполнения. В ходе преобразования вершин определяется видимость объектов и их расположение в буфере кадров. Фрагменты, по существу, представляют собой шейдерные операции, выполняемые на уровне отдельных пикселей для обработки цвета, текстур и окончательного вывода каждого пикселя. С каждым многоугольником может быть связано несколько фрагментов, а поскольку в современных графических процессорах расширена поддержка программируемых инструкций, посылаемых шейдерами, то в mental ray обычно происходит передача на аппаратный уровень шейдерных фрагментов Cg, в которых указывается ряд математических операций над цветом, предназначенных для выполнения графическим процессором.
Таким образом, шейдеры вершин и фрагментов могут передаваться во время визуализации из mental ray в графический процессор через один из интерфейсов API, рассматривавшихся выше, а затем графический процессор может решить подряд несколько задач до тех пор, пока не будет окончательно определен цвет пикселя. Этот процесс аналогичен компоновке, поскольку цвет каждого пикселя определяется за несколько наслаивающихся друг на друга проходов. Шейдеры фрагментов могут инициировать ряд инструкций, которые очень быстро наслаивают несколько различных процессов обработки цвета каждого пикселя. Порядок выполнения этих процессов во время аппаратной визуализации приведен на рис. 2.13.
Рис. 2.13. Порядок выполнения операций в mental ray и графическом процессоре во время аппаратной визуализации
Аппаратная визуализация в mental ray
В настоящее время аппаратная визуализация практически пригодна только для пользователей автономного средства визуализации mental ray. (Несмотря на то что в Maya имеется возможность указать аппаратную визуализацию, для этого по-прежнему требуются поддерживающие шейдеры, а также специальная настройка аппаратной поддержки визуализации.) Следовательно, аппаратная визуализация в настоящий момент не может рассматриваться как "готовое" решение. Но поскольку она выполняется заметно быстрее, то по справочному руководству для mental ray вы можете самостоятельно изучить возможности осуществления аппаратной визуализации, исходя из выбранного вами приложения и имеющихся аппаратных средств вашего компьютера. В этом разделе рассматриваются некоторые принципы реализации аппаратной визуализации в mental ray.
Основополагающим принципом аппаратной визуализации является наслоение. Это процесс поочередной визуализации элементов в зависимости от текущей шейдерной задачи. Подобным методом организуется оптимальная последовательность операций визуализации, исходя из "наилучшего" порядка их выполнения. При аппаратном наслоении используются многие источники данных для оценки каждой задачи, которая может возникнуть в результате расчетов затенения, предварительной визуализации таких карт, как, например, карты теней, или же решения конкретной задачи программной визуализации. Выполнение обычно начинается с решения программных задач, для которых может потребоваться формирование карты проецирования фотонов или карты теней, а затем переходит к аппаратным стадиям. Текстурные карты или карты освещения, как правило, передаются графическому процессору, когда они требуются шейдеру фрагмента.
Аппаратные средства особенно хорошо справляются с файлами изображений (в пределах доступной на видеоплате памяти), но совершенно беспомощны перед усовершенствованными алгоритмами, например, трассировки лучей, поэтому данные, получаемые с помощью таких алгоритмов, должны быть скомпилированы в текстурные карты, чтобы выгодно использовать преимущества аппаратной визуализации. В текстурные карты могут быть включены различные эффекты, реализуемые картами освещения отраженным светом, картами теней, шейдерами окружения с отражениями без трассировки лучей и любыми другими картами отображения цвета, а во время аппаратной визуализации такие карты могут быть использованы для учета их цветов при расчетах цвета в шейдерах конкретного фрагмента. Данный процесс может быть разделен на две основные стадии при аппаратной визуализации в mental ray: файлы изображений карт могут быть предварительно сформированы, предоставлены пользователем на диске и считаны либо динамически сформированы во время визуализации, а это, по существу, означает наслоение программной визуализации (с построчной разверткой или трассировкой лучей) на аппаратную визуализацию, что в конечном итоге приводит к переносу программных вычислений на стадию аппаратной визуализации. Преимущество такого подхода заключается, в частности, в том, что от аппаратной визуализации можно всегда вернуться, если требуется, к программной визуализации в качестве перестраховки для всех решаемых задач визуализации. Но в то же время это может сделать аппаратную визуализацию бесполезной. В этой связи следует заметить, что на mental ray ложится вся ответственность за наслоение и решение этих задач на уровне графического процессора, исходя из предоставляемых ресурсов и независимо от их происхождения.
Следовательно, при аппаратной визуализации будут использованы все имеющиеся ресурсы для инициирования любых требующихся программных задач, а затем и аппаратных задач (причем сколько угодно раз) и, наконец, для передачи значений цвета в буфер кадров. Этот процесс может протекать очень быстро, существенно сокращая продолжительность визуализации. Несмотря на всю привлекательность такого сокращения, не следует забывать и об ограничениях, присущих аппаратной визуализации как в целом, так и на уровне конкретного оборудования.
Аппаратная визуализация: возможности, ограничения, реализация
В последующих подразделах рассматриваются некоторые вопросы архитектурной реализации, возможности и ограничения аппаратной визуализации.
Реализация
Аппаратная визуализация предъявляет следующие требования к своей реализации в mental ray.
Возможности
В силу ограничений, присущих аппаратной визуализации, в mental ray предпринимается попытка расширить возможности такой визуализации обходными путями, чтобы повысить качество изображения.
Ограничения
Аппаратной визуализации присущ ряд ограничений, особенно в сравнении с таким средством визуализации высокого уровня, как mental ray.
Подготовка к аппаратной визуализации
Процесс подготовки к аппаратной визуализации в mental ray может оказаться не очень удобным для большинства пользователей, незнакомых с аппаратными шейдерами и соответствующими технологиями, и поэтому в этом разделе уделяется внимание некоторым опциям mental ray, имеющим отношение к аппаратной визуализации. Для того чтобы активизировать аппаратную визуализацию, воспользуйтесь следующими командами и опциями, введя их как в блоке опций внутри файла формата . mi, так и в командной строке.
-hardware [off|on|all] [cg|native|fast] [force]
Эти опции указывают на определенный порядок выполнения аппаратной визуализации, а также определяют возможность возврата от аппаратной визуализации к программной. В частности, можно ввести следующую команду.
-hardware all cg native fast force
Опции и команды аппаратной визуализации предписывают mental ray следующие действия.,/p>
Активизация аппаратной визуализации в Maya
Свойства аппаратной визуализации могут быть активизированы в блоке стандартных опций при экспорте файлов формата .mi в Maya. Эти опции доступны лишь в том случае, если mental ray выбирается в качестве текущего средства визуализации. Как только это будет сделано, для доступа к параметрам настройки аппаратной визуализации достаточно ввести следующую строку в редакторе сценариев.
select -r miDefaultOptions;
Открыв окно Attribute Editor, выберите вкладку Extra Attributes (Дополнительные атрибуты), где находятся параметры настройки аппаратной визуализации, эквивалентные рассмотренным выше опциям, доступным из командной строки, как показано на рис. 2.14. Кроме того, вы можете выбрать ноду miDefaultOptions (Стандартные опции mental ray) в окне Outliner (Иерархическая структура), если предварительно отключить атрибут DAG Objects Only (Объекты, представленные ориентированным ациклическим графом) в меню Display (Отображение).
Рис. 2.14. Параметры настройки аппаратной визуализации в mental ray, доступные в Maya
