Продолжение, начало в "КВ" №№39, 41
GeForce 3
Самое главное качественное отличие GeForce 3 от видеокарт nVidia предыдущих поколений GeForce 256 и GeForce 3 GTA - введение программируемости графического процессора. Это позволяет перейти от использования ограниченного набора возможностей, "намертво" вшитых в видеокарту разработчиками (вроде аппаратного T&L, dot3 bumpmapping или кубической карты окружения), к неограниченному количеству самых разнообразных спецэффектов. То, что теперь можно запрограммировать для интерактивного отображения видеокартой, ранее было доступно лишь при расчетах офлайновыми рендер-движками, такими, как Renderman или скан-лайн рендер 3d studio max. В том, что это не выдержка из пресс-релиза, а "грубая проза жизни", можно убедиться хотя бы на примере изображений, приведенных на рисунке 1.
Рис. 1. Эти
изображения рассчитаны на GeForce 3 со скоростью 25 кадров в секунду |
Это скриншоты 21-дюймового экрана, на который выводились рассчитываемые GeForce 3 в режиме реального времени кадры анимационного фильма "Final Fantasy: The Spirits within". Хотя разница между экраном в 21 дюйм и экраном кинотеатра существенна ("размер имеет значение" :-), все-таки имеется достаточно оснований утверждать о достижимости на картах nVIDIA кинематографических эффектов в режиме реального времени.
А теперь давайте поближе познакомимся с новыми возможностями столь замечательной видеокарты и теми технологическими новациями, которые заложены в ее архитектуру.
Прежде всего, общая производительность GF3 выше, чем у GF2, приблизительно в 2-5 раз.
Аппаратная часть:
- частота GPU базовой модели 200 МГц;
- частота памяти DDR SDRAM/SGRAM 230 (460) МГц объемом до 128 Мб;
- четыре пиксельных конвейера с двумя текстурными блоками на каждом и возможность смешивания до четырех текстур за счет накопления - запоминания результатов смешивания первых двух текстур (требуется два такта); максимальный размер одной текстуры увеличен до 4096х4096 точек в 32-битном цвете;
- производительность аппаратного T&L составляет 76 миллиардов операций с плавающей запятой в секунду. Кэширование вершин, механизм хранения и обработки списков вершин только в локальной памяти, без использования системной. Максимальный размер списка вершин увеличен с 65 535 (у GF2) до 16 777 215.
nFiniteFX - кинематографические эффекты в режиме реального времени
- аппаратные программируемые вершинные шейдеры (VertexShaders) DX8, версия 1.1;
- аппаратные программируемые пиксельные шейдеры (PixelShaders) DX8, версия 1.1;
- полная аппаратная поддержка DirectX 8.0 и OpenGL 1.2;
- поддержка 64- и 128-битного представления цвета.
Новые встроенные аппаратные программы:
- аппаратные объемные текстуры;
- аппаратные тени и самозатенение;
- до двух матриц на вершину для ее анимации;
- аппаратная поддержка систем частиц.
LightSpeedMemory - аппаратные средства экономии полосы пропускания видеопамяти
Одна из самых животрепещущих проблем производительности современных видеокарт - пропускная способность AGP-шины и скорость обмена данными с графической памятью (fill rate). Именно эти два фактора существенно ограничивают производительность видеокарты, заставляя простаивать блоки графического конвейера в ожидании данных. При разработке GF3 nVIDIA применила целый комплекс новых технологий, призванных атаковать эту проблему с самых разных направлений. У нас в списке: аппаратная тесселяция математически описываемых поверхностей, кросс-бар архитектура контроллеров памяти, аппаратное сжатие без потерь с соотношением 4:1 данных буфера глубины (compressed Z), Z-occlusing culling и oqqlusion query, LOD - управление детализацией отображения в зависимости от удаленности объектов от камеры или видового окна.
Аппаратная тесселяция позволяет хранить в памяти не треугольники, составляющие поверхность, а математические коэффициенты-параметры, число которых значительно меньше.
Кросс-бар (перекрестная) архитектура контроллера видеопамяти призвана повысить эффективность операций доступа к данным, хранящимся в видеопамяти. Реализована она четырьмя независимыми контроллерами памяти, способными взаимодействовать друг с другом и с графическим процессором. Пропускная способность шины экономится как за счет того, что по ней могут пересылаться не только большие пакеты в 256 бит, но и более мелкие, что имеет место при обработке небольших треугольников всего из нескольких пикселов, так и за счет дополнения до полного пакета в 256 бит другими данными.
Z-occlusing culling - механизм раннего определения видимости пикселов и удаления из дальнейшей обработки пикселов, определенных этим механизмом как невидимые (скрытые). Данные об этом пикселе не записываются во фрейм-буфер. Поэтому координаты и глубина пиксела, интерполированные блоком растеризации, используются для определения видимости пиксела, а проходят дальше в пиксельный шейдер только видимые пикселы. Это должно привести не только к экономии полосы пропускания, но и к уменьшению общего времени расчетов конечного цвета пиксела, т. е. к ускорению выполнения пиксельного шейдера в целом.
Еще один механизм экономии - "occlusion query" - делает запросы от приложения к графическому процессору на предмет расчета видимости заданных прямоугольных областей сцены. Если регион является скрытым, все данные о нем и о том, что находится за ним, исключаются из расчетов на самом раннем этапе - вообще не передаются на отображение. В совокупности, оба последних механизма в состоянии вчетверо увеличить пропускную способность шины видеопамяти. Еще одна приятная особенность работы этих механизмов - отсутствие необходимости предварительной сортировки объектов по степени удаленности от камеры. То есть он работает одинаково эффективно как с сортировкой, так и без нее.
Программируемость или nFiniteFX
Как уже говорилось, самое главное новшество GeForce 3 - введение программируемости графического процессора. Программированию поддаются два ключевых блока графического конвейера - вершинный и пиксельный. Как известно, вершинный блок конвейера отвечает за обработку данных вершин трехмерного объекта (пример - T&L), а пиксельный - за обработку данных каждого пиксела. Начиная с GF3, графический конвейер видеокарты выглядит следующим образом:
1. Вершинные шейдеры (ВШ) - совокупность из аппаратного вычислительного устройства (АЛУ), регистров для хранения вершинных данных, памяти для хранения инструкций программы и самой программы, управляющей их работой. В качестве управляющей программы может выступать микрокод, вшитый в видеокарту, или внешняя программа, созданная разработчиками различных прикладных приложений (игр, пакетов CAD, моделирования и анимации и т.д.)
Для программирования используется ассемблер-подобный язык, для вершинного программирования доступны всего 17 инструкций, а общая длина программы ограничена 128 шагами, отсутствуют циклы и ветвления. Регистры могут быть следующих типов: 96 неизменных констант, определяемых программой, 16 входных регистров обрабатываемых данных, 8 перезаписываемых регистров, значения которых можно менять в процессе расчетов.
Вершинный шейдер GF3 полностью совместим со спецификацией вершинного шейдера версии 1.1 DirectX 8 и OpenGL 1.2. Математически ВШ представляет собой расширение инструкций обработки трансформаций и освещения, другими словами, сохраняет свою специфическую "заточенность" и эффективность.
Рассчитывать с помощью программируемых вершинных шейдеров следует эффекты, допускающие интерполяцию на уровень пикселов без потери качества. Список таких визуальных эффектов весьма широк, возможно, неограничен. Упомянем лишь анимацию в реальном времени персонажей, в том числе анимацию кожи и мимики; атмосферные эффекты в зависимости от данных вершин - туман, меняющийся с высотой, рефракция света водной поверхностью; процедурные деформации статических поверхностей, например, рельеф; морфинг форм объектов, размытие в движении, эффекты освещения - например, двухсторонняя поверхность или линзовые эффекты, и многое другое. Но наибольший эффект от использования программных вершинных шейдеров можно получить, если они сочетаются с пиксельными шейдерами.
2. Пиксельный шейдер (ПШ) - 8-ступенчатый комбинационный конвейер, регистры для хранения пиксельных данных и программа, управляющая их работой. Программируемые пиксельные шейдеры дополняют программируемые вершинные шейдеры, позволяя разрабатывать и применять спецэффекты на попиксельном уровне.
Пиксельный АЛУ представляет собой комбинационный конвейер из 8 этапов смешивания цветов пиксела (8 текстурных стадий), выполняемых за один такт. Для их программирования предусмотрены 26 ассемблер-подобных операций низкого уровня, но эффективная длина конкретной программы не должна превышать восьми шагов, т.е. длины конвейера. Пиксельные данные могут быть следующих типов - восемь констант, два цвета, 2 перезаписываемых регистра, в которых накапливаются результаты обработки данных и 4 текстурных регистра.
Можно сразу отметить два важных отличия пиксельных шейдеров от вершинных. Во-первых, они гораздо короче - 8 против 128, что обусловлено гораздо большим объемом обрабатываемой пиксельным шейдером информации. Во-вторых, программирование ПШ сводится к настройке параметров смешивания 8-ступенчатого комбинационного конвейера, тогда как работа и программирование ВШ сходны с обычным процессором.
Несмотря на столь спартанские возможности, сочетание программируемых ВШ и ПШ является мощным и гибким инструментом, а накладываемые ограничения являются компромиссом между требуемой высокой производительностью и фотореализмом эффектов.
Новые встроенные функции - буфер
теней и трехмерные текстуры
Механизм теней GF3 основывается на построении карты освещенных в сцене объектов. Эта карта после построения хранится в аппаратном буфере теней и доступна посредством того же механизма, что и обычные текстуры. Построение карты именно освещенных объектов, а не затенененных, может показаться необычным, однако такой подход имеет то преимущество, что освещенных пикселов в сцене обычно гораздо меньше, чем неосвещенных. Для работы теневого буфера предусмотрены специальные аппаратные функции, способные выделять под карту освещения часть графической памяти, рендерить в эту память саму карту и читать по мере необходимости данные из нее.
Построение карты теней состоит в рендере сцены с точки зрения источника света и расчете Z-величины каждого отрендеренного пиксела. В буфере теней записываются только те пикселы, которые не закрыты другими - с наименьшим значением Z-величины. Использование готовой карты состоит в следующем. Пикселы трансформируются в локальную координатную систему источника света и фильтруются по Z-значениям пикселов буфера теней, находящихся поблизости (XY). Если значение Z рассматриваемого пиксела близко или равно значению Z соответствующего пиксела из буфера теней, значит, он освещен, если больше - затенен. В результате фильтрации также определяется степень затененности (256 уровней) данного пиксела и затем результаты вычислений передаются на пиксельный шейдер для последующей обработки.
Еще одна новая (и, на мой взгляд, довольно экзотическая) аппаратная возможность - трехмерная карта, представляющая собой именно то, что следует из ее названия - объемная текстура в трех измерениях.
Подразумевается, что это процедурная карта, поскольку аналоги в природе найти трудно (и как ее оцифровать - рентгеном, что ли?). Применяться такая карта может, например, при анимации взрыва или расчетах прозрачных объемов (воды, тумана, стекла и т.п.)
В заключение обзора новых возможностей GF3 необходимо упомянуть об общей сбалансированности видеокарты. Такая сбалансированность достигается прежде всего за счет кэширования данных. GPU GF3 содержит около 57 миллионов транзисторов, значительная часть которых используется для кэширования в локальной памяти видеокарты различных данных - геометрии, текстур, буфера глубины и буфера кадра. Далее, до GF2 включительно все данные после обработки видеокартой и отображения их на экране терялись. Архитектура GeForce3 предоставляет возможность передачи данных, рассчитанных графическим процессором, назад, в приложение. Яркий пример такой передачи - запрос приложения на расчет видимости видеокартой различных областей сцены (occlusion query), упомянутый выше. Таким образом, в лице GeForce 3 мы имеем не только качественно новый продукт с программируемой RISC-архитектурой, но и довольно сбалансированное инженерное решение.
GeForce 4 (NV25)
По сравнению с GF3, не содержит качественно новых возможностей, все изменения носят количественный характер. С GeForce всегда было так - одна линейка привносит качественно новые технологии, следующая за ней количественно их улучшает. Так было с парой GF256 - GF2 GTA, та же ситуация и с парой GF3 - GF4.
На базе чипсета GF4 nVIDIA разработаны несколько типов видеокарт: GF4 Ti 4600/ GF4 Ti 4200/GF4 MX 400, различающиеся рабочими частотами GPU и видеопамяти. Везде далее будут обсуждаться возможности топовой карты GF4 Ti 4600 как наиболее интересный случай.
Итак, для этой карты частота графического процессора составляет 300 МГц, частота видеопамяти типа DDR - 650 МГц. Производительность геометрической обработки вершин существенно повышена за счет введения дополнительного второго конвейера обработки вершин. Теперь блок вершинных шейдеров одновременно обрабатывает не одну, а две вершины, что приводит к увеличению производительности в 2-3 раза, по сравнению с GF3, и составляет 75-100 миллионов треугольников в секунду, или 136 миллионов вершин в секунду, или 1.23 триллиона операций в секунду. Если говорить о наглядных примерах, то этой производительности вполне достаточно для отображения в реальном времени динамики таких сложных систем, как волосы и мех. Пиксельные шейдеры также подверглись доработке, в частности, расширена их функциональность на аппаратном уровне, что сделало пиксельные шейдеры совместимыми со спецификацией 1.3 DirectX 8 и OpenGL 1.3.
Доработаны средства экономии памяти и пропускной способности шины: эффективность механизма отсечения перекрытых пикселов увеличена почти на 25%, добавлен кэш вершин в локальной памяти и пиксельный кэш для пакетной записи в буфер, усовершенствован механизм сжатия данных Z-буфера, разработан новый метод быстрой Z-очистки. Эффективность кросс-бар архитектуры повышена за счет новой политики приоритетов, а благодаря механизму предсказания GF4 может выполнять предварительную зарядку банков памяти, что устраняет задержки чтения данных.
Во всех моделях видеокарт GF4 устанавливаются два независимых RAMDAC на 350 МГц, что позволяет подключать к ним два монитора. А в драйвере видеокарты появилась новая утилита nVIEW для настройки рабочего интерфейса мультимониторной конфигурации. Кроме того, в младших моделях видеокарт (MX 400) встроен аппаратный mpeg.
Зачем все это?
Собственно, все написанное мною здесь и ранее о технологиях современных видеокарт преследовало цель выяснить, чем они, эти технологии, могут быть полезны при работе с конкретными приложениями. Оставим игры. Нас интересуют прежде всего пакеты трехмерного моделирования и анимации вроде 3d studio max, Maya или Lightwave. Опираясь на все вышеизложенное, можно сделать вывод, что извлечь практическую пользу из современных интерактивных видеотехнологий можно при решении следующих задач.
Прежде всего очень полезна высокая производительность при отображении сложных каркасных моделей в видовых окнах. Разрабатывая сложную модель, важно иметь возможность рассматривать и анализировать ее со всех сторон и в различных масштабах. Наиболее типичные операции этого этапа - вращения, трансляции и масштабирование в видовых окнах, и здесь блок аппаратных трансформаций может и должен проявить себя в полной мере.
Вторая задача, где вся мощь современных 3D-ускорителей будет очень полезна - отображение в видовых окнах в режиме smooth&highlite для точной настройки и шлифовки свойств геометрии поверхности, а также для постановки света в сцене. Здесь уже важна производительность не только блока трансформаций, но и блока аппаратных расчетов освещения, а также точность отображения в видовых окнах взаимодействия света и поверхности разрабатываемого объекта.
Третья задача - отображение объекта все в том же видовом окне с наложенными текстурами. Думаю, здесь очень полезны будут аппаратные пиксельные шейдеры, которые, как известно, отображаются в режиме реального времени и выглядят одинаково как в видовом окне, так и при финальном рендеринге. Аппаратные шейдеры получают все большую поддержку со стороны разработчиков 3D ПО. Некоторые средства для работы с ними уже есть и в Maya 4.5, и в 3d studo max 5. Но "переплюнул" всех Softimage - недавно вышедшая новенькая третья версия этого известного пакета понимает без посредников аппаратные шейдеры, написанные на Cg вплоть до drag'n'drop и тонкой их настройки внутри рабочей среды Softimage.
Четвертая задача пока относится к области фантастики - и все же. Представьте себе, что финальный рендер любой сцены выполняется в режиме реального времени - все эти рейтресинги, радиосити, каустики... Не нужно больше каждый раз жать на кнопку "render" и ожидать результата минутами, часами, сутками - все мгновенно отображается на экране. Не можете представить? Я тоже.
И все же, программируемость GPU и аппаратные программируемые шейдеры реального времени позволяют переложить если не все, то хотя бы значительную часть рендер-задач с плеч процессора на видеокарту. Дело здесь только за разработчиками прикладных программ - как они воспользуются появившимися в их распоряжении возможностями. Будем надеяться на... нет, не на прогресс, а на конкуренцию. А реальные примеры того, что из всего этого можно получить, см. в начале статьи (скриншоты Final Fantasy).
Игорь СИВАКОВ,
Igsiv@tut.by