GeForce 3 особенности архитектуры
Совершенно новый чип
Потому, что при разработке GeForce3 инженеры nVidia применили новый для себя подход. Ранее производительность улучшалась за счет "грубой силы": наращивалась вычислительная мощь, повышались частоты, удваивались конвейеры и вычислительные блоки, а архитектура в целом оставалась прежней. Возрастал только fillrate, то есть скорость заполнения пикселями трехмерной сцены. Поскольку технологии изготовления микросхем имеют определенный предел, видеокарты nVidia вскоре потеряли сбалансированность. Появился эффект недостаточной пропускной способности шины памяти, когда дальнейшее повышение производительности сдерживается низкой скоростью поступления данных.
Особенно это стало заметно после выхода видеокарт ATI Radeon. Они базировались на чипе Rage6C, у которого число 3D-конвейеров вдвое меньше, чем у GeForce2 (NV15). Однако Radeon отнюдь не вдвое отставал от соперника, а в некоторых случаях способен вплотную к нему приблизиться. А все потому, что инженеры ATI с самого начала ориентировались на улучшение баланса и нейтрализацию "узких мест" в архитектуре.
GeForce3 стал первой серьезной попыткой улучшения архитектуры для достижения лучшего баланса. Кроме того, в нем появились новые блоки, дающие разработчикам возможность задействовать множество ранее недоступных возможностей.
Наименование | GeForce 3 |
Ядро | NV20 |
Техпроцесс (мкм) | 0,15 |
Транзисторов (млн) | 60 |
Частота работы ядра | 200 |
Частота работы памяти (DDR) | 230 (460) |
Шина и тип памяти | DDR-128 bit |
ПСП (Гб/с) | 7,3 |
Пиксельных конвейеров | 4 |
TMU на конвейер | 2 |
Текстур за такт | 8 |
Текстур за проход | 4 |
Вершинных конвейеров | 1 |
Pixel Shaders | 1,1 |
Vertex Shaders | 1,1 |
Fill Rate (Mpix/s) | 800 |
Fill Rate (Mtex/s) | 1600 |
DirectX | 8.0 |
Anti-Aliasing (Max) | MS - 4x |
Анизотропная фильтрация (Max) | 8x |
Объем памяти | 64 / 128 MB |
Интерфейс | AGP 4x |
RAMDAC | 350 MHz |
GPU - это Graphics Processing Unit
Когда был объявлен GeForce256, nVidia утверждала, что это первый в мире графический процессор - GPU. Однако в отличие от центрального процессора - CPU, у него практически отсутствовала возможность настоящего программирования. Конечно, определенный набор операций он мог выполнять, но этот набор был жесткого задан разработчиками чипа, а не самими программистами. Операции аппаратного преобразования координат, освещения (блок T&L) и комбинирования текстур (блок NSR - растеризатор) не всегда подходили для тех задач, которые ставили перед собой разработчики игр. Поэтому полноценная поддержка T&L до сих пор встречается нечасто.
С выходом GeForce3 ситуация изменилась коренным образом. Технология nfiniteFX (от двух слов - Infinite и Effects) предусматривала наличие двух новых механизмов - Vertex Processor и Pixel Processor, каждый из которых позволял с помощью набора низкоуровневых команд создавать всевозможные спецэффекты, число которых (утверждала nVidia) бесконечно.
Vertex Processor работаел на этапе преобразования координат вершин треугольников (вертексов) в пригодную для последующей обработки форму. С помощью набора команд вертексного процессора разработчики могли создавать эффекты освещения, морфинга, анимации по ключевым кадрам и многое другое. Чтобы создать, например, одну фазу анимации, им достаточно было указать начальную и конечную координаты, а все остальное рассчитает GPU. Пример достаточно условный, но идея, я думаю, понятна.
Также впервые 3D-ускоритель мог работать не только с полигонами, но и с кривыми второго и более высокого порядка. Разработчику не нужно было заботиться о разбиении криволинейной поверхности на составляющие треугольники - это сделает Vertex Processor с заданной степенью точности.
Pixel Processor - дальнейшее развитие технологии NSR (nVidia Shading Rasterizer). Процесс наложения нескольких текстур (например, для получения освещения или объема) полностью программировался, позволяя комбинировать до восьми различных текстур с разных линий конвейера. Кроме того, пиксельный процессор мог работать с текстурами, задающими не только цвет, но и другие свойства поверхности: отражающую способность, например, или рельеф. Особенную пользу это приносил при имитации водной поверхности - GeForce3 мог моделировать воду в реальном времени, что и демонстрировалось на оптимизированных под него бенчмарках.
Все вышеперечисленные возможности реализовывались с помощью набора команд интерфейса DirectX 8, который специально разрабатывался для 3D-ускорителей нового поколения. Видеокарты, не имеющие полной аппаратной поддержки DirectX 8 (а это все, кроме GeForce3), могли реализовывать вертексные операции средствами процессора, а пиксельные операции им были недоступны. Интерфейс OpenGL тоже не остался в стороне: в его состав недавно были добавлены все необходимые расширения.
Молниеносная архитектура памяти
Таков перевод еще одной архитектурной новинки, впервые примененной в GeForce3. Lightspeed Memory Architecture (LMA) - набор технологий, призванных скомпенсировать невысокую (по технологическим причинам) производительность шины локальной видеопамяти. Основной недостаток существовавших до GF3 графических чипов nVidia - было отсутствие баланса между графическим ядром и подсистемой памяти. Скорость в 16-битных видеорежимах намного превышала скорость в 32-битных, поскольку память просто не справлялась с возложенной на нее нагрузкой по выдаче огромных объемов данных. GeForce3 имел несколько механизмов, призванных увеличить эффективность работы с памятью.
Crossbar Memory Controller - совершенно новый принцип организации шины памяти. GeForce3 имел в своем составе не один 128-битный контроллер, а четыре 32-битных, каждый из которых работал независимо от соседей. Зачем это нужно? Для оптимизации обращений к памяти. Если чип запрашивал два блока данных по 32 бита, расположенных в памяти не подряд, он получал их сразу - от двух контроллеров. Ждать, пока сначала будет прочитано одно 256-битное слово, а потом - другое, уже было не нужно.
Подобная архитектура особенно была важна при обработке сильно детализированных трехмерных сцен, когда каждый объект состоял из множества мелких (размером в пару пикселей) треугольников. Чтобы получить текстуру для двух пикселей, не приходилось вхолостую прогонять по шине большие объемы данных.
Кроме нового контроллера, были использованы кэши большого размера, способные удовлетворять запросы работающих конвейеров без обращения к шине. Точные размеры кэшей и механизмы их работы не будем уточнять, но об их наличии косвенно говорит большое количество использованных транзисторов.
Visibility Subsystem - набор методов для повышения эффективности работы с Z-буфером. Как известно, каждый объект на экране имеет третью координату - Z, задающую удаление его от наблюдателя. В соответствии с ней объекты отрисовываются на экране, начиная с самых удаленных. Очевидно, что некоторые из них полностью закрываются другими и совершенно не видны. Но 3D-ускоритель все равно тратит на них драгоценное время, "честно" заполняя текстурами. Это явление называется overdraw. Коэффициент overdraw в современных играх составляет от 1.3 до 3.5 в зависимости от количества объектов.
Впервые технологию оптимизации Z-буфера применила ATI, назвав ее HyperZ. Именно благодаря ей Radeon в высоких разрешениях способен поспорить с GeForce2. В GeForce3 тоже применялась такая оптимизация. Z-Occlusion Culling - механизм отбрасывания невидимых объектов, исключения их из постановки на обработку.
Механизм компрессии Z-буфера, применяемый в Radeon, нашел воплощение и в ядре GeForce3. По утверждениям разработчиков чипа, он позволял вчетверо уменьшать объем данных в этом буфере.
Зато быстрая очистка (Fast Z-clear) использовалась только в Radeon. nVidia посчитала ненужным создавать что-либо подобное. Впрочем, ей было виднее.
Сглаживание ещё быстрее
Самым заметным недостатком картинки, генерируемой 3D-ускорителем, можно назвать эффект "лестницы" (aliasing) на краях треугольников, из которых состоит изображение. Это неизбежное явление, связанное с тем, что экран монитора состоит из прямоугольной матрицы пикселей, и линии на нем получаются ломанными. Для того чтобы сгладить края объектов, нужно либо повысить разрешение (тогда пиксели станут меньше), либо применить метод FSAA (Full Screen Anti-Aliasing), при котором цвета соседних пикселей усредняются по всему экрану. Все предшествующие 3D-ускорители использовали механизм суперсэмплинга. Это решение задачи "в лоб": в буфере строится изображение с увеличенным в несколько раз разрешением по вертикали, горизонтали или сразу по обоим направлениям. После этого цвет пикселя (сэмпла) получается усреднением цветов соседних пикселей на укрупненном изображении. При этом возникают два неприятных эффекта: во-первых, изображение заметно "размазывается", во-вторых, резко падает скорость, так как фактически 3D-ускоритель работает в более высоком разрешении.
GeForce3 использовал два новых механизма. Первый - алгоритм с непроизносимым названием Quincunx. Суть - использование не простой 2- или 4-сэмпловой маски соседних пикселей, а 5-сэмпловой. Т.е. берется блок 3х3, и результирующее значение вычисляется на основе пяти, а не девяти пикселей этого блока. В итоге при затратах как на 2-сэмпловый FSAA мы получали качество 4-сэмплового FSAA.
Второй алгоритм - мультисэмплинг, который nVidia назвала HRAA (High-Resolution Anti-Aliasing). В его основе лежит генерация того же изображения с высоким разрешением, только цвет пикселей, которые в результате все равно сольются в один, не вычисляется каждый раз заново. Если группа пикселей, которая должна быть свернута в один, лежит внутри треугольника, то она заполняется одним и тем же значением цвета. Если же группа лежит на границе, она рассчитывается обычным образом. Тем самым количество расчетов при проведении HRAA сократилось в несколько раз, а качество улучшилось, так как внутри треугольников текстуры не сглаживаются.
GeForce3 - был революцией в мире видеоускорителей. Множество нововведений, радикально улучшающих архитектуру чипа. Множество новых возможностей для разработчиков. Высокая производительность, которую путем разгона можно было нарастить еще немного , отлаженные драйверы.
Max Payne