Обзор GeForce 3

Автор: manager Суббота, Март 29th, 2008 Нет комментариев

Рубрика: Hardware

Компания NVIDIA в течение последних двух лет превратилась в мирового лидера на рынке 3D-ускорителей для потребительского рынка. Шестимесячный цикл разработки и выпуска новых продуктов вынуждал конкурентов постоянно находиться в положении догоняющего.

Развитие графических чипов шло путем наращивания тактовых частот и увеличения количества конвейеров, то есть, NVIDIA увеличивала производительность своих решений, не вводя каких-либо новых технологий. Поэтому к осени 2000 года стало ясно, что этот путь ведет в тупик.

Тому подтверждением стал успех RADEON от ATI. Более слабому чипу, если измерять в категориях величин тактовых частот и числа конвейеров, реализация некоторых идей тайловой архитектуры позволила добиться производительности, сравнимой с современными чипами NVIDIA.

А тайловый Kyro от PowerVR/STM, не блистая высокими тактовыми частотами, продемонстрировал несвойственную такому, в привычных представлениях, слабому чипу производительность в играх.

И вот, появился GeForce3 – гордость NVIDIA, в процессе разработки которого специалисты NVIDIA наряду с остальными нововведениями впервые сделали небольшой шаг в сторону тайловой архитектуры, с одной лишь целью – избавиться от недостатков существующей архитектуры.
Характеристики чипа NVIDIA GeForce 3.
Технология изготовления: 0.15 микрон;
57 млн. транзисторов;
Рабочая частота: 200 МГц;
4 пиксельных конвейера;
8 текстурных модулей – по 2 текстурных модуля на конвейер;
Наложение до 4 текстур на пиксель за один проход (в 2 такта, по 2 текстуры за такт);
Поддержка до 128 Мб 128-битной DDR памяти;
Организация доступа к памяти «Lightspeed», кэширование данных;
Аппаратный блок T&L с технологией nFinite FX;
Тесселяция, или “измельчение” треугольников, из которых состоят объекты, на основе построения сплайнов;
Полное соответствие спецификациям DirectX8.0, в том числе полная поддержка Pixel Shaders и Vertex Shaders версии 1.1;
Полная поддержка OpenGL1.2;
Поддержка компрессии текстур S3TC и DirectX DXT1-DXT5;
Поддержка объемных текстур;
Поддержка кубических карт среды;
Поддержка наложения рельефности методами DotProduct3 и Environment Map Bump Mapping (EMBM);
Поддержка анизотропной фильтрации по 8, 16 и 32 сэмплам с возможностью ее форсирования в в DirectX и OpenGL;
Полноэкранное сглаживание методами мультисэмплинга и Quincunx;
Применение сжатия Z-буфера, HSR — удаление невидимых поверхностей на основе раннего Z-теста.Из приведенных спецификаций нового графического чипа видно, что GeForce3 обладает рядом усовершенствований и нововведений по сравнению с чипами предыдущего поколения — GeForce2, GeForce2 Pro, GeForce2 Ultra.
Подробней расскажем о преимуществах нового графического чипа.
Технология nFinite FX, пиксельные и вершинные шейдеры.
Название nFinite FX говорит о том, что теперь разработчикам предоставлены неисчерпаемые возможности по созданию графических спецэффектов и реалистичных сцен.
Технология nFiniteFX представляет из себя совокупность аппаратных возможностей ядра GeForce3 и средств гибкого управления геометрическим процессором GeForce3 – пиксельных и вершинных шейдеров.
Шейдеры представляют собой программы, и если описать их в двух словах, то пиксельные шейдеры – это программы, управляющие TMU, в частности, позволяющие по шагам управлять процессом наложения текстур и вычисления цвета пикселей, а вершинные шейдеры – это программы, с помощью которых разработчик может запрограммировать блок T&L на выполнение геометрических вычисления и преобразований.
Структура ядра GeForce3 стала более гибкой по сравнению с GeForce2. Например, реализация пиксельных шейдеров у GeForce2 (NSR, Nvidia Shader Rasterizer) не соответствует спецификациям шейдеров Microsoft DirectX8.
У GeForce2 для определения цвета пиксела могли быть скомбинированы лишь 2 текстуры. Однако, для применения сложных эффектов, например reflective bump mapping, требующих «сообщения» (т.н. «зависимые» текстуры) между различными текстурными модулями и возможности комбинирования большего количества текстур необходимых средств не было, соответственно, разработчики становились в жесткие рамки NSR, обусловленные архитектурными недостатками GeForce2.Реализация пиксельных шейдеров в GeForce3 от этих недостатков свободна.
Архитектура пиксельных шейдеров GeForce3То есть блок комбинирования может адресовать аж до 8 зависимых текстур (dependent textures), имея возможность «сообщения» между конвейерами. Программа — пиксельный шейдер при этом не интерпретируется ядром GeForce3, а переводится в набор параметров для этапов текстурирования текстурных модулей. Число этих этапов — текстурных стадий и определяет длину программы пиксельного шейдера. GeForce3 имеет 8 текстурных стадий, то есть может выполнить до 8 различных операций с текстурами и промежуточными результатами для получения цвета пиксела. К сожалению, сейчас пока нет игр, которые в полной мере используют возможности пиксельных шейдеров.
Механизм пиксельных шейдеров тесно связан с вершинными или вертексными шейдерами (vertex shaders). Каждая вершина определяется как минимум тремя параметрами: координатами x, y и z, определяющими точку в пространстве. Естественно, что в большинстве случаев у вершины также могут быть заданы такие детали как цвет, альфа-канал, координаты для текстурирования и характеристики освещения. Вершинные шейдеры позволяют гибко управлять ядром T&L и представляют собой программы, которые при выполнении интерпретируются геометрическим процессором чипа GeForce3. К примеру, если задать начальные и конечные наборы данных для вершины, при помощи вертексных шейдеров возможно автоматически получить расчет освещенности, прозрачности и текстурных координат в каждой промежуточной точке траектории. Естественно, это не единственное применение вершинных шейдеров, например, с помощью них можно легко добиться эффектов объемного освещения и объемного тумана, всевозможных деформаций объектов, и вообще, применение вершинных шейдеров ограничивается только фантазией разработчиков и максимальной длиной программы вершинного шейдера. Максимальная длина программы — вертексного шейдера, который может интерпретировать GeForce3, составляет 128 команд, что позволяет задавать самые сложные преобразования. Результаты этих преобразований используются впоследствии как исходные данные для пиксельных шейдеров при отрисовке изображения. Таким образом, пиксельные и вершинные шейдеры тесно взаимосвязаны. Важно то, что кроме возможности создания новых и простоты программирования распространенных спецэффектов, применение вершинных шейдеров позволяет дополнительно разгрузить процессор, например, “рутинные” однотипные геометрические преобразования для множества объектов можно переложить на плечи ядра GeForce3, используя всего один шейдер.
Сейчас нет игр, которые в полной мере использовали бы возможности GeForce3, в частности вершинные и пиксельные шейдеры. Поэтому приходится приводить скриншоты 3Dmark2001 и Aquanox, недавно объявленной игры, специально оптимизированной под GeForce3 и использующей Pixel Shaders v1.1 и Vertex Shaders v1.0.
Здесь вершинные шейдеры используются, вероятно, для получения эффекта бурого слоя воды над самым дном, движения частиц планктона, теней, а также, совместно с пиксельными шейдерами формируются пляшущие световые ячейки (результат преломления солнечного света на поверхности) на всех объектах.
И если пиксельные шейдеры в том случае, когда видеокарта их не поддерживает, эмулировать не получается, потому что обычные видеокарты могут производить только, скажем так, комбинации текстур, в то время, как спецификация пиксельных шейдеров подразумевает возможность сохранения промежуточных результатов и сообщения между конвейерами, то вершинные шейдеры можно эмулировать, переложив часть работы по расчету геометрии сцены на процессор. Естественно, это может привести к падению производительности, в чем мы убедимся, когда будем измерять скорость работы GeForce3 и видеокарт предыдущего поколения в Aquanox.
Cглаживание методами мультисэмплинга и Quincunx.

Обычное изображение в 3D-играх, получаемое на экране без использования полноэкранного сглаживания, обладает недостатком в виде ломаных линий на границах треугольников:
GeForce2 производит сглаживание ломаных линий на границах полигонов посредством суперсэмплинга.
В двух словах опишу эту методику:Сначала изображение строится в отдельном буфере, причем разрешение этого буфера увеличено относительно экранного разрешения — для суперсэмплинга методом «2х1″, или, по другому, «2х», сцена строится в буфере, в 2 раза увеличенном по горизонтали.При сглаживании “2х2” , или “4х”, увеличенный буфер для построения сцены в 2 раза шире и в 2 раза выше, чем размеры необходимого изображения. Затем цвета каждых двух соседних сэмплов из этого буфера, в случае сглаживания по 2 сэмплам, или четырех, в случае сглаживания по 4 сэмплам, смешиваются, а полученное значение цвета присваивается пикселу в буфере экрана.
В GeForce3 NVIDIA отказалась от устранения алиасинга или «ступенек» методом простого суперсэмплинга, решив улучшить качество получаемого при сглаживании изображения и в тоже время снизить потери производительности при использовании полноэкранного сглаживания.
В двух словах, GeForce3 производит сглаживание только там, где это, необходимо , то есть на границах треугольников.
Изображение, так же, как у GeForce2, строится в увеличенном буфере. Этот буфер точно так же, как в случае с GeForce2, увеличен в 2 раза по горизонтали, для сглаживания по 2 сэмплам, или в 2 раза по горизонтали и вертикали, для сглаживания по 4 сэмплам.
Но в процессе построения изображения в этом буфере GeForce3 действует по-другому.
Рассмотрим на примере случай сглаживания по 4 сэмплам.
У GeForce2 эти четыре сэмпла, находящиеся в увеличенном буфере, должны будут при смешивании, определить цвет пикселя в буфере кадра.
Как действует GeForce3? При получении каждого треугольника от геометрического движка, растеризационный блок закрашивает его, при этом для каждого блока размером 2х2 сэмпла, проверяется, уместился ли этот блок в пределы текстурируемого в данный момент треугольника. Если этот блок 2х2 сэмпла уместился в треугольник целиком, то GeForce3 рассчитывает только одно значение цвета, интерполируя текстуры для точки, находящейся в центре этого блока, и заливает этот блок целиком этим цветом. А когда не все сэмплы блока 2х2 умещаются в треугольник, то есть блок попадает на границу треугольника, то те сэмплы блока, которые принадлежат текстурируемому в данный момент треугольнику, отрисовываются в увеличенном буфере в обычном порядке. Оставшиеся, не принадлежащие этому треугольнику сэмплы блока будут всё равно оттекстурированы при обработке следующих треугольников. После построения сцены в увеличенном буфере путем усреднения цветов сэмплов по блокам 2х2, производится построение буфера экрана.
Описанный процесс растеризации увеличенного буфера приводит к тому, что в результате текстуры, находящиеся в пределах треугольников, не «размазываются», а цвета пикселей, лежащих в близости от границ треугольников, являются результатом смешения цветов четырех сэмплов из увеличенного буфера. То есть, такая методика сглаживания по сути производит обычный суперсэмплинг, но только на границах треугольников, не «размазывая» текстуры, но сглаживая характерные «ступеньки».
При этом из-за того, что теперь требуется рассчитывать почти в 4 раза меньше сэмплов, уменьшается количество необходимых для построения увеличенного изображения операций, то есть экономится время, необходимое для построения изображения, и достигается повышение качества изображения за счет того, что «размытия» изображения в пределах треугольников нет.
Точно так же действует сглаживание 2х, но в этом случае GeForce3 использует блоки размером 2х1, то есть состоящие из двух сэмплов.
Также GeForce3 позволяет осуществлять сглаживание сцены с помощью технологии Quincunx.
Запатентованная технология Quincunx, по заявлениям NVIDIA, позволяет получить качество изображения, сравнимое с получаемым при использовании 4х сглаживания, при скорости 2х сглаживания. При этом для получения цвета пикселя используются 5 сэмплов, расположенных особым образом.
Антиалиасингом GeForce3 можно управлять в драйвере.
Посмотрим, какое качество изображения получается при использовании сглаживания по двум и четырем сэмплам на GeForce2, в сравнении с тем, что получается при сглаживании по 2 сэмплам, 4-м сэмплам и Quincunx на GeForce3. Для демонстрации возьмем к примеру Homeworld : Cataclysm. К сожалению, как раз в Homeworld : Cataclysm при включении любых режимов антиалиасинга на GeForce3 я наблюдал очень неприятные артефакты в меню.
Мне кажется, это не аппаратная проблема, а недоработки драйверов, потому что в том же Quake3 или Unreal Tournament никаких нареканий на качество работы полноэкранного сглаживания на GeForce3 у меня не не возникло.
Чтобы определить, к каким потерям скорости приводит использование полноэкранного сглаживания на GeForce3, можно взять, например, Quake III Arena. Для сравнения, помимо ATI RADEON DDR и Creative GeForce2 Ultra, я еще использовал плату ASUS V7700 с 64 Мб памяти на базе NVIDIA GeForce2 Pro, установив частоту работы его ядра в 200 МГц, а память разогнав до 230(460DDR) МГц, то есть установив его частоты равными частотам плат на GeForce3.
Благодаря оптимизированным методам мультисэмплинга ядру GeForce3 для реализации сглаживания требуется гораздо меньше сэмплов, а следовательно и вычислений и данных из памяти. Поэтому только GeForce3 может обеспечить приемлемую играбельность в 1024х768 и даже более высоких разрешениях при использовании полноэкранного сглаживания, при этом обеспечивая прекрасное качество изображения. Производительность GeForce2 Pro и GeForce2 Ultra при включении полноэкранного сглаживания ограничивается пропускной способностью памяти.
Столь высокий результат GeForce3 в режиме 1600х1200х32 при форсировании сглаживания 4х объясняется тем, что в этом режиме сглаживание 4х в Quake3 по причине нехватки видеопамяти просто не включилось.
Анизотропная фильтрация.
GeForce3 может использовать анизотропную фильтрацию, используя выборку по 8, 16 и 32 сэмплам. К сожалению, в драйвере 11.01 нет возможности включить анизотропную фильтрацию через панель управления, но это можно сделать в реестре. Для включения анизотропной фильтрации в OpenGL необходимо в разделе [\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
Class\Display000\NVidia\OpenGL] реестра установить переменную DefaultLogAniso в значение 1 для выборки 8 сэмплов, 2 для выборки 16 сэмплов, и 3 – для 32 сэмплов.
При этом вместо билинейной фильтрации форсируется, то есть принудительно используется анизотропная фильтрация. Какое изображение получается при использовании анизотропной фильтрации и при сочетании ее с трилинейной фильтрацией, я покажу на примере Quake3 Билинейная фильтрация
Трилинейная фильтрация
Анизотропная фильтрация по 8 сэмплам
Анизотропная фильтрация по 8 сэмплам
+ трилинейная фильтрация
Анизотропная фильтрация по 16 сэмплам
Анизотропная фильтрация по 16 сэмплам
+ трилинейная фильтрация
Анизотропная фильтрация по 32 сэмплам
Анизотропная фильтрация по 32 сэмплам
+ трилинейная фильтрация
Естественно, использование анизотропной фильтрации требует больших вычислительных ресурсов чипа и увеличивает нагрузку на шину памяти, поэтому при ее включении наблюдается падение скорости. Измерение падения скорости при использовании анизотропной и трилинейной фильтрации я провел на примере Quake3 Arena.
Форсирование анизотропной фильтрации приводит к серьезному падению производительности в Quake3 Arena, причем при увеличении количества используемых текстурных сэмплов потери скорости увеличиваются. Например, при использовании анизотропной фильтрации с 32 сэмплами, в низких разрешениях, где производительность ограничена процессором и нагрузка на шину памяти не столь велика, потери скорости малы, но в режимах 1280х1024 и 1600х1200 производительность падает ощутимо.
Трилинейная фильтрация тоже требует затрат, но для наложения полноценной трилинейной фильтрации требуется дополнительно задействовать всего лишь один текстурный модуль, поэтому потери при включении трилинейной фильтрации невелики.
Драйвер 11.01 позволяет форсировать анизотропную фильтрацию и в Direct3D, но можно использовать только фильтрацию по 8 сэмплам. Для этого необходимо в разделе [\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
Class\Display000\NVidia\Direct3D] реестра установить переменную FORCEANISOTROPICLEVEL в значение 1. Оценить качество анизотропной фильтрации в Direct 3D можно описать на примере Unreal Tournament :
Билинейная фильтрация
Трилинейная фильтрация
Анизотропная фильтрация по 8 сэмплам
Анизотропная фильтрация по 8 сэмплам
+ трилинейная фильтрация
Рельефное текстурирование методами EMBM, DotProduct3.
К сожалению, рельефное текстурирование методом EMBM долгое время было доступно картам Matrox Millenium G400/G450, потом оно появилось в RADEON, и вот, наконец, и NVIDIA реализовала EMBM в GeForce3. EMBM – наложение рельефа картой среды позволяет получить эффект рельефной поверхности, причем никакими комбинациями текстур подобного эффекта добиться нельзя:

EMBM в 3Dmark 2001Рельефное текстурирование методом DotProduct3 поддерживают только последние поколения игровых видеокарт: линейка NVIDIA GeForce2, GeForce3 и все модификации ATI RADEON, поэтому оно еще не получила широкого распространения в играх. Пример применения DotProduct3 в 3Dmark2001.
Dot3 в 3DMark 2001Неровности и рельефность, по крайней мере для меня выглядят более естественно, чем в случае с EMBM.

RTPatches – аппаратная тесселяция гладких поверхностей.
GeForce3 умеет производить аппаратную тесселяцию, или разбиение гладких поверхностей. В двух словах – для описания объекта, скажем, некоторой поверхности, ядру передается набор контрольных точек (вершин). По ним GeForce3 строит математическое описание этой кривой поверхности, а далее, так как поверхность задана математически, на основе математического описания поверхности строит «сетку» из полигонов, причем количество полигонов может быть любым, а «сетка» — сколь угодно плотной или разреженной. Таким образом, для построения поверхностей ядру передается не огромный массив вершин, а всего лишь несколько контрольных точек, что позволяет освободить шину AGP от передачи огромного количества данных. К сожалению, такой способ описания объектов еще не обкатан в играх, да и его применение может быть сопряжено с некоторыми трудностями, например, задача нахождения точек или кривых пересечения двух таких поверхностей нетривиальна. А как раз ее решение может понадобиться, например, в том случае, когда обрабатывается движение игрока, геометрическая модель которого описана кривыми поверхностями, и стоит задача: не дать ему проходить сквозь стены : )
HSR, компрессия Z-буфера.

HSR – Hidden Surfaces Removal – удаление невидимых поверхностей до их рендеринга, задача этой технологии состоит в том, чтобы избавить ускоритель от отрисовки тех объектов, которые впоследствии всё равно будут закрыты объектами, лежащими в кадре и расположенными ближе к зрителю.

GeForce3, вероятно, использует метод, который является вариацией принципа иерархического Z-буфера. Z-буфер разбивается на прямоугольные блоки, на основе которых строится «Z-буфер низкого разрешения», причем из каждого блока Z-буфера выбирается самое «далекое» значение и записывается в соответствующую ячейку буфера «низкого разрешения». Перед текстурированием поступающих на конвейер полигонов делаются проверки на принадлежность их блокам, и если, например, полигон целиком помещается внутри одного из блоков, а «глубина» ближайшей вершины полигона больше, чем значение, хранящееся в соответствующей ячейке «буфера низкого разрешения», то, очевидно этот полигон закрыт предыдущими и его не надо текстурировать. Может быть, реализована и такая оптимизация: в случае, когда некоторый блок целиком лежит внутри треугольника, достаточно проверить значение глубины для этого треугольника в угловых точках блока. Если самое «ближнее» значение больше, чем значение в ячейке буфера «низкого разрешения», то часть треугольника, принадлежащая этому блоку, скрыта и не подлежит текстурированию.

Если после выполнения всех проверок выясняется, что полигон или его часть подлежит выводу на экран, в процессе текстурирования значения Z для каждого пикселя записываются в Z-буфер, что гарантирует актуальность данных в Z-буфере к моменту поступления следующего треугольника на обработку. Эта часть, вероятно, тоже оптимизирована, ведь можно записывать в «Z-буфер низкого разрешения» только максимальную из «глубин» вершин треугольника, или, в том случае, когда треугольник целиком накрывает блок, из глубин угловых точек соответствующего блока.

Так или иначе, этот метод позволяет уменьшить количество операций сравнения и разгрузить часть полосы пропускания памяти за счет уменьшения числа обращений к Z-буферу. Но HSR не всегда дает гарантированный выигрыш в производительности. Во первых, показатель Overdraw, то есть степень и количество «перекрытий» объектов в сценах может быть разным, во вторых, если полигоны в сцене сортируются в порядке приближения к наблюдателю, то есть ядру в первую очередь передаются дальние полигоны, а потом более ближние, то при отрисовке какого-либо полигона он всегда будет самым ближним, и будет выводиться целиком, то есть HSR не сработает. Идеальный вариант – такая сортировка полигонов, чтобы самые ближние полигоны передавались ядру в первую очередь, тогда последующие полигоны имеют все шансы быть закрытыми предыдущими и в таком случае появляется возможность их не текстурировать.

Наряду с HSR применяется компрессия Z-буфера без потерь, что позволяет дополнительно уменьшить количество передаваемых данных, относящихся к Z-буферу.

Для того, чтобы оценить, насколько эти технологии помогают разгрузить шину памяти и, соответственно, поднять производительность, я использовал тест VillageMark, в котором сцена обладает очень большим значением OverDraw. Для сравнения, помимо ATI RADEON DDR и Creative GeForce2 Ultra, я еще использовал плату ASUS V7700 с 64 Мб памяти на базе NVIDIA GeForce2 Pro, установив частоту работы его ядра в 200 МГц, а память разогнав до 260МГц, то есть установив его частоты равными частотам плат на GeForce3.

В 16-битных режимах впереди GeForce2 Ultra благодаря высоким частотам ядра и памяти, но в 32-битных режимах GeForce3 становится лидером. Технология HSR позволила обогнать не только GeForce2 Pro, работающий на равных с GeForce3 частотах, но и GeForce2 Ultra. Причем, падения скорости при переходе от 16-битных к 32-битным режимам у GeForce3 нет. RADEON DDR позади всех в 16-битных режимах, но в 32 битах, особенно в высоких разрешениях, его HyperZ позволяет приблизиться к GeForce2Pro и GeForce2 Ultra. GeForce3, обладающая схожими технологиями удаления невидимых поверхностей и оптимизации Z-буфера ему оказалась не по зубам, потому что работает она на более высоких частотах и имеет в 2 раза больше конвейеров. Ниже я еще я вернусь к обсуждению HSR, при анализе результатов измерения скорости в Quake3.
Lightspeed Memory Architecture.

В официальных документах от NVIDIA говорится о том, что у GeForce3 что 256-битный (128бит DDR) контроллер памяти «расщеплен» на 4 контроллера шириной 64 бита, и это позволяет уменьшить количество «холостой работы» контроллера в случае, когда отрисовываются, например, настолько мелкие треугольники, что их образ на экране состоит всего из 1-2 пикселей, и для их отрисовки необходимо взять из локальной видеопамяти всего лишь, скажем 64 бита данных. Тогда один 64-битный контроллер осуществит выборку данных для рендеринга этого треугольника, не затрагивая 3 остальных, то есть, по шине шириной в 256 бит не будут передаваться короткие «огрызки». Однако нам такая архитектура представляется сомнительной, куда проще использовать кэширование текстур и Z-буфера, что наверняка и было применено в GeForce3. Но тем не менее, такая структура контроллера памяти объявлена, и, вполне может быть, так, что, например, каждый из четырех конвейеров GeForce3 имеет свой отдельный контроллер памяти.

Источник: http://www.izcity.com/

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты