GPU GeForce 256 от NVIDIA


31 августа 1999 года в 18:00 по Москве мир должен был измениться. Измениться мир должен был после официального анонса нового графического процессора от NVIDIA. Слухи относительно параметров нового графического чипа от NVIDIA шли давно. Мы в свое время тоже уделили внимание этой теме, как показало время, многие наши предположения оказались верны. Вообще, то, как был представлен новый чип, получивший имя GeForce 256 от NVIDIA, заслуживает почетного места в истории. Маркетинговый и рекламный отделы NVIDIA не зря едят свой хлеб. Все было подготовлено тщательно, эффектно и действенно. Во-первых, отметим, что NVIDIA твердо боролась с утечками информации о своем новом графическом чипе, далее мы будем называть его просто GPU (graphics processing unit), тем более, что сама NVIDIA предлагает именно такое обозначение. Официальные лица NVIDIA наотрез отказывались что-либо сообщать о новом своем детище для публики. С другой стороны, молчание NVIDIA давало большой простор для работы воображения аналитиков, что играло только на руку NVIDIA, так как интерес публики к будущему продукту постоянно подогревался без особых усилий со стороны самой NVIDIA. Заблаговременно основные партнеры NVIDIA получили образцы нового GPU, среди таких компаний были производители видеоадаптеров и производители компьютеров. Это дало возможность заранее сформировать отношение части компьютерной промышленности к новому детищу NVIDIA. Заметим, что сформировалось исключительно положительное отношение. За 18 часов до официального объявления GPU GeForce 256 на сайте NVIDIA появилась многообещающая надпись: "In 18 hours world will change…" Сама по себе эта фраза заслуживает аплодисментов. Сказано сильно и стильно. Заинтересованная часть аудитории сети томилась в ожидании чего-то сверхъестественного, наблюдая за обратным отсчетом времени на сайте NVIDIA.

Время пришло и… и сервер NVIDIA, работающий под управлением Lotus Domino, просто перестал успевать обрабатывать запросы по http. В результате, многие желающие узнать, в чем же состоит изменение мира и за счет чего это изменение произошло, просто не могли попасть на сайт NVIDIA. Правда, буквально сразу информационный голод был утолен, так как на большинстве сайтов, связанных с компьютерами и новостями всем желающим была предоставлена вся необходимая информация. Изменился ли мир? В определенной области — да, во всем остальном, все осталось по-прежнему. Скажем так, заявлено было громко, но, по сути, GeForce 256 — это эволюционный шаг, но никак не революция.

Не испортило всеобщего энтузиазма даже то, что на сутки раньше NVIDIA корпорация S3 анонсировала свой новый продукт Savage2000, который по своим параметрам, по крайней мере, не уступает GeForce 256. При этом NVIDIA предпочла сделать вид, что никаких анонсов от S3 вообще не было, и по отношению к GeForce 256 везде употреблялся эпитет "первый в мире графический процессор для массового рынка с интегрированным геометрическим акселератором". Первым таким продуктом, по крайней мере, официально объявленным является все-таки Savage2000 от S3. А ляп в параметрах GeForce 256 типа поддерживаемой частоты вертикальной развертки в 75 МГц (!) при разрешении вплоть до 2048x1536 вообще остался без внимания прессы. Праздник получился на славу. Чего стоил аукцион на eBuy, где карта на базе GeForce 256 с росписями разработчиков была продана за $8100, при стартовой цене $290. Справедливости ради стоит отметить, что NVIDIA заслужила к себе уважительное отношение, так как в последнее время очевидным является тот факт, что их продукты действительно успешны в коммерческом плане и пользуются заслуженной популярностью, благодаря отличным потребительским свойствам и качественным драйверам.

Итак, новый продукт NVIDIA получил имя GeForce 256. Хорошее ли это имя? Если вспомнить, что для выбора правильного имени NVIDIA проводила конкурс, то можно оценивать выбранное название по-разному. Тут все-таки дело вкуса. Кому-то нравится, кому-то нет. В любом случае, скоро это название притрется, и никто не будет уже приводить какие-то аналогии. Нам, например, сразу пришло на ум сравнение с G-Shock и G-Men. Если же смотреть на название без сарказма, то понятно, что маркетологи NVIDIA старались выразить названием GeForce 256 основные черты нового графического процессора. Так, Ge явно означает наличие интегрированного геометрического сопроцессора (geometry = Ge), Force символизирует вычислительную мощность, а цифра 256 индицирует то, что чип и шина памяти имеют 256 разрядный интерфейс. Итак, посмотрим на характеристики GPU GeForce 256:

Общие характеристики:

  • Частота ядра: 120 МГц
  • Частота работы шины памяти: до 200 МГц
  • Скорость обработки треугольников: 15 млн. треугольников в секунду, sustained DMA, transform/clip/light, setup, rasterize and render rate.
  • Разрядность шины памяти: 256-бит
  • Ширина полосы пропускания шины памяти: до 6.4 Гб/сек
  • Поддерживаемые типы памяти: SDRAM/SGRAM (с поддержкой режима блочной записи) и DDR SDRAM/DDR SGRAM
  • Объем локальной видеопамяти: до 128 Мб
  • RAMDAC: интегрированный, частота 350 МГц с поддержкой коррекции гаммы
  • Поддерживаемые разрешения: вплоть до 2048x1536@75Hz
  • Интерфейс внешней шины: полная поддержка AGP x2/x4 (включая SBA и DME) и PCI 2.2 (включая Bus mastering). Поддерживается режим AGP x4 Fast Writes, который позволяет режим прямого обмена данными CPU и GPU минуя системную память компьютера со скоростью до 1 Гб/сек, что должно положительно сказываться на общей производительности и разгружать шину системной памяти.
  • Поддерживаются спецификации: последовательная шина I2C и DDC; ACPI D0-D3 режимы и управление питанием PCI; 100% соответствие PC'99 и PC'99a
  • Технологический процесс: 0.22 мкм
  • Число транзисторов: 23 млн.
  • Поддерживается интерфейс DFP с маштабированием и фильтрацией и разрешения до 1600x1200
  • Поддерживается TV выход с разрешеним до 800x600

2D-часть:

  • 256-разрядное 2D-ядро
  • Поддержка акселерации BitBLT, закраски прямоугольников и полигонов, прорисовка линий, аппаратный курсор и масштабирование по горизонтали/вертикали
  • Работа с ускорением графики при 8-, 16- и 32-битном представлении глубины цвета

3D-часть:

  • 256-разрядный процессор рендеринга
  • Интегрированный геометрический процессор преобразования координат и установки освещения (T&L)
  • 4 конвейера рендеринга (вывод 4 пикселей за такт)
  • Аппаратная установка 8 источников света для всей сцены
  • Геометрический движок выполняющий операции над вещественными числами и занимающийся расположением полигонов в пространстве
  • Fillrate: 480 млн. пикселей в секунду
  • Скорость текстурирования: 480 млн. текселей в секунду и 240 млн. текселей в секунду в режиме мультитекстурирования
  • Для формирования текселя используется 8 текстурных семплов
  • Полная поддержка OpenGL и DX7 — Tranform & Lighting, Cube environment mapping (кубического текстурирования картами окружения), projective textures (проекция текстур) и компрессия текстур
  • Поддерживаются все пять форматов компрессии текстур DX6
  • Аппаратная поддержка рельефного текстурирования. Поддерживаются методы Embossing (выдавливания) и Dot Product (скалярное рельефное текстурирование)
  • Программируемые режимы смешивания нескольких текстур
  • Поддержка Vertex Blending (сочетание вершин полигонов), обеспечивает естественно отображения сложносоставных объектов в местах склейки полигонов. Например, если нужна модель коленвала из двигателя машины, то использование vertex blending позволит сделать естественные переходы на всех изломах, в противном случае будут видны швы на местах состыковки полигонов.
  • Рендеринг при 32-битном представлении глубины цвета
  • Сглаживание полной сцены (Full scene anti-aliasing)
  • Однопроходная трилинейная фильтрация (она же названа как 8-точечная анизотропная)
  • Поддерживается 8-битный стенсель буфер (буфер шаблонов)
  • Поддерживается 16/24/32-битная Z-буферизация
  • Поддерживаются отраженный свет и размытые тени
  • Улучшенные режимы прозрачности и полупрозрачность (Enhanced alpha blending modes)
  • Наложение тумана по вершинам полигонов и попиксельно в определенных областях сцены
  • Поддержка текстур размером 2048х2048 текселей с точностью 32 бита

Поддержка DVD/DTV:

  • Поддержка HDTV (High Definition Television)
  • Поддержка видеооверлеев
  • Масштабирование по вертикали и горизонтали с коэффициентом до 8:1
  • Управление яркостью, насыщенностью, контрастностью цвета на аппаратном уровне
  • Множество конфигураций HDTV, поддерживаемые через DMA и захват управления шиной
  • Поддерживается компенсация движения (хочется надеяться, что будет работать)
  • Аппаратное смешивание и полупрозрачность для субтитров и меню
  • Аппаратная поддержка преобразования цветовых пространств (YUV 4:2:2 и 4:2:0)
  • Многопроходная фильтрация видео изображений (5 степеней по горизонтали и 3 по вертикали)
  • Поддержка преобразования из планарного YUV12 (4:2:0) формата в упакованный формат 4:2:2 и обратно

Поддержка ОС, интерфейсов и программного обеспечения:

  • Драйверы для Windows 98/95
  • Драйверы для Windows NT 4.0 и Windows 2000
  • Поддержка Direct3D, DirectDraw и DirectShow
  • Поддержка OpenGL 1.2 ICD для Windows 9x и Windows NT
  • Поддержка 3DNow! и SSE

Сразу отметим, что любые домыслы о том, что GeForce 256 — это два ядра TNT2 с добавленным геометрическим акселератором и увеличенной разрядностью, являются просто домыслами. Графический процессор GeForce 256 разработан инженерами NVIDIA практически полностью с нуля и работы эти велись не 6 месяцев, а больше года, как минимум. Про 2D-часть говорить не будем, ничего нового там придумать давно уже нельзя. Испортить можно, но если судить по качеству 2D-части у карт на базе TNT2, то с этим у NVIDIA все в порядке, и проблем не предвидится.

Заметим, что GeForce 256 имеет 23 млн. транзисторов и изготавливается по 0.22 мкм технологическому процессу. Судя по всему, NVIDIA просто не успела завершить работы по переходу на 0.18 мкм процесс. Мы считаем, что именно из-за использования 0.22 мкм процесса и большого числа транзисторов NVIDIA была вынуждена ограничить тактовую частоту ядра GeForce 256 величиной в 120 МГц, так, как в противном случае, могут возникнуть проблемы с перегревом чипа и даже с электропитанием. По нашим данным, NVIDIA рассматривала вариант установки на GeForce 256 специального отводящего горячий воздух раструба, который должен был выводить тепло наружу. Судя по всему, эта идея не нашла поддержки у производителей карт. В результате мы имеем невысокую по сегодняшним меркам частоту ядра. Кроме того, некоторые производители видеоадаптеров, например, Leadtek, собираются встраивать в свои продукты на базе GeForce 256 специальную систему мониторинга температуры. Другой производитель видеоадаптеров, Elsa, собирается переработать референс-дизайн карт на базе GeForce 256 от NVIDIA, объясняя это необходимостью решить проблемы с перегревом и электропитанием, в связи с чем их карты появятся примерно на месяц позже, чем у остальных производителей. В общем, нужно быть морально готовыми к проблемам с перегревом. Если все эти предположения насчет перегрева верны, то о разгоне можно забыть.

Теперь рассмотрим подробно самые интересные детали GeForce 256

Первое, что бросается в глаза, это, конечно же, интегрированный геометрический процессор, занимающийся операциями по преобразованию координат, установки освещения и сортировкой полигонов. Мы не будем подробно рассказывать о том, зачем нужен геометрический процессор и что он дает, т.к. желающие могут почитать материал про Savage2000, где этой теме было уделено достаточное внимание. Расскажем лишь основные моменты, связанные с геометрическим сопроцессором. В GeForce 256 геометрическая часть, занимающаяся операциями T&L и Clipping обладает впечатляющей вычислительной мощностью. Судите сами: GeForce 256 может выдаваться до 15 млн. текстурированных полигонов с z-буфером в секунду! Это очень много.

При этом CPU системы может быть полностью освобожден от выполнения операций по преобразованию координат и установки освещения, которые могут отнимать до 70%-90% ресурсов CPU. Сразу возникает вопрос, а нужны ли нам именно сейчас видеокарты с GPU? По мнению разработчиков приложений, уже через год ни одна игра уже не будет хорошо работать без наличия на борту видеокарты геометрического акселератора — слишком уж большая разница между производительностью графического ускорителя с геометрическим сопроцессором и без него и, как следствие, большая разница в качестве отображаемой на экранах мониторов графики.

С применением на практике аппаратного преобразования координат вершин полигонов (вертексов) с помощью геометрического сопроцессора все более-менее понятно. Все OpenGL-игры и Direct3D-игры (с небольшой модификацией) могут с большой пользой использовать эту возможность, то с расчетом освещения есть вопросы. Первый источник освещения рассчитывается геометрическим сопроцессором, интегрированным в GeForce 256 "бесплатно", т.е. без какого-либо ущерба производительности, а все остальные (в общей сложности, 8 источников освещения для всей сцены) снижают производительность, но не более, чем на 5-7% (по предварительным расчетам). По мнению разработчиков игр, само по себе аппаратное освещение (vertex lighting) пока ещё реализуется слишком шаблонно. Например, эффект мерцания свечи (т.е. random по яркости для различных вертексов) пока еще реализовать полноценно нельзя, а изменение яркости всего источника смотрится неестественно, т.е. не похоже на мерцание свечи. Но технологии и инструменты постоянно совершенствуются, так что все впереди, тем более, что сама NVIDIA прогнозирует широкое использование аппаратного освещения лишь ближе к концу следующего года.

Пример реалистичного освещения

Далее, в GeForce 256 реализована четырехконвейерная архитектура. Это означает, что за каждый такт может отображаться четыре пикселя. При заявленной тактовой частоте GPU в 120 Мгц, мы получаем величину fillrate (скорость заполнения сцены) в 480 млн. пикселей в секунду. Однако, каждый конвейер у GeForce 256 имеет по одному блоку текстурирования. Это означает, что в приложениях, использующих технику мультитекстурирования, когда на один пиксель накладывается две текстуры, величина fillrate при той же тактовой частоте в 120 МГц снизится до уровня в 240 млн. пикселей в секунду. Отметим, что текстуры накладываются уже отфильтрованными, при этом для формирования одного текселя используется 8 текстурных семплов, что обеспечивает "бесплатную" анизотропную фильтрацию. Анизотропная фильтрация на основе 8 текстурных семплов — несколько своеобразное решение, слишком мало семплов, лучшие результаты от использования анизотропной фильтрации получаются все-таки при использовании 16 или даже 32 текстурных семплов для определения результирующего цвета текстуры. Суть в том, что для определения цвета текстуры используется восемь семплов, это должно обеспечить высокое качество результирующего изображения. Почему NVIDIA использует лишь 8 семплов, а не больше? Потому что для такой реализации нужен всего один блок текстурирования, как и реализовано в GeForce 256. Выборка семплов происходит по анизотропной зависимости от детализации по осям X и Y экрана (LOD_X, LOD_Y). Область сэмплирования на текстуре напоминает эллипс с соотношением LOD_X/LOD_Y. В качестве функции сэмплирования может использоваться метод Гаусса. Выборка семплов призводится из одного mip-уровня. При небольшом соотношении изображение будет без размытий. А при большом соотношении 8 семплов уже мало, т.е. появятся артефакты.

Что все это означает? Это означает, что качество выводимого на экран монитора изображения существенно улучшится. Есть все основания предполагать, что невооруженным глазом будет заметно улучшение качества изображения даже в существующих играх, например, по сравнению с картами на базе TNT2.

Теперь обсудим такой момент, как fillrate, т.е. скорость заполнения пикселями сцены. Это фактор напрямую влияет на производительность любого видеоадаптера. Так вот, после анонса GeForce 256 во многих сетевых изданиях высказывались мысли о том, что из-за низкой тактовой частоты графического ядра будет наблюдаться низкая производительность в играх. Чуть позднее на эту тему высказались и конкуренты NVIDIA в лице CTO 3dfx Scott Sellers. В частности Скотт заметил, что fillrate у GeForce 256 находится на низком уровне, и его величины не хватит для использования карты в современных играх в высоких разрешениях. Разумеется, было замечено, что будущий продукт 3dfx будет обладать гораздо большей скоростью fillrate и позволит использовать в играх высокие разрешения без ущерба для скорости. Действительно, по слухам, нам обещали, что fillrate у GeForce будет в 3-4 раза больше, чем у TNT2, но этого не произошло. Например, некоторые карты на базе TNT2 Ultra обеспечивают скорость заполнения в 190 млн. пикселей в секунду при наложении двух текстур на пиксель, т.е. в играх с мультитекстурированием. В тех же играх GeForce 256 обладает потенциалом в 240 млн. пикселей в секунду с наложением двух текселей на пиксель за такт. Ну что же, посмотрим на эту проблему внимательно. Попробуем рассчитать необходимую величину fillrate для конкретного разрешения и желаемой частоты смены кадров (fps). Возьмем оптимальное на сегодня разрешение 1024x768 (оптимальное, т.к. у большинства пользователей установлены 15" и 17" мониторы). Чтобы получить необходимое число пикселей, которые должны быть выведены на экран для формирования сцены, умножим 1024 на 768, получим 786432 пикселей в сцене. Теперь умножим число пикселей в сцене на величину желаемой скорости смены кадров. Сегодня считается, что частота смены кадров в 60 fps устроит большинство пользователей. Тогда, 786432 * 60 = 47185920 пикселей в секунду. Вроде вполне скромная величина. Но нужно учесть и еще один важный фактор. Дело в том, что в случае с традиционной, т.н. полигонной, архитектурой отображения 3D-графики рендеринг сцены происходит последовательно за счет вывода текстурированных треугольников. Фактически, заранее неизвестно, какая будет сцена, а взаиморасположение объектов в сцене определяется с помощью значений о глубине объекта, хранящихся в Z-буфере. Покажем на пальцах это длинное предложение.

Предположим, нужно отобразить сцену, где на фоне дома стоит автомобиль, а на его капоте сидит девушка. (Что она там делает, кого ждет и почему одна, это к делу не относится). Традиционный (полигонный) графический акселератор будет рендерить эту сцену следующим образом: сначала выводятся полигоны с текстурами, формирующие стену дома, затем полигоны, формирующие автомобиль, а затем, полигоны, формирующие девушку. Значения о глубине объекта в сцене, хранящиеся в Z-буфере, позволяют определить, какой полигон находится поверх которого. Отметим, что в нашем примере величина глубины сцены (scene depth) равна 3, т.е. это максимальное число перекрытий одних объектов другими. В нашем случае все полигоны, формирующие автомобиль перекрывают часть полигонов, формирующих стену дома. Все полигоны, формирующие девушку, перекрывают часть полигонов, формирующих автомобиль (и часть стены дома). Получается, что графический процессор выполнил лишнюю работу, так как пиксели из стены дома, перекрываемые пикселями из автомобиля, можно было бы и не формировать, т.к. они не видны, но они формировались. И так далее. В итоге, мы подошли к определению понятия Depth complexity, или сложность глубины сцены для конкретного объекта. Depth copmlexity показывает, какое количество объектов перекрывается конкретным объектом сцены. Тогда в нашем примере стена дома имеет величину depth complexity, равную 1, автомобиль — величину, равную 2, а наша симпатичная девушка — величину, равную 3. С величиной сложности сцены прямо связана величина overdraw, показывающая, как часто приходится перерисовывать один и тот же пиксель сцены. Перерисовывать пиксель приходится из-за того, что некоторые пиксели из полигонов, формирующих стену дома, перекрываются пикселями, формирующими автомобиль и т.д. Тут надо отметить, что мы рассматриваем самый упрощенный метод, так как разработчики игр могут использовать различные методы оптимизации, например, удаляя перекрываемые полигоны заранее. Мы же рассаматриваем именно такой вариант, чтобы посмотреть сам принцип и существующие проблемы. Итак, overdraw определяет, сколько раз нужно заново определить пиксель, который будет выведен из кадрового буфера на экран монитора. Понятно, что чем сложнее сцена, тем выше величина overdraw для каждого пикселя из сцены. На основе величины overdraw для каждого пикселя сцены определяется значение screen overdraw, показывающее среднее значение overdraw для всей сцены. Общая формула для определения overdraw выглядит так:

[ depth complexity объектаN1 * число пикселей заполняющих полигоны, формирующие объект + depth complexity объектаN2 * число пикселей заполняющих полигоны, формирующие объект + … + depth complexity объектаNm * число пикселей заполняющих полигоны, формирующие объект ] / [ общее количество пикселей в сцене * 3 ] / [ scene depth * число пикселей в сцене ] = overdraw (или screen overdraw).

Тогда в нашем примере с многострадальной девушкой формула примет следующий вид:

[ 1 * количество пикселей в стене дома + 2 * количество пикселей в автомобиле + 3 * количество пикселей в девушке ] / [ общее количество пикселей в сцене * 3 ] = overdraw

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

[depth complexity объектаN1 + depth complexity объектаN2 + … + depth complexity объектаNm ] / scene depth = overdraw

В нашем примере некоторые пиксели перерисовываются 1 раз, некоторые 2, а некоторые 3, а глубина сцены равна 3, тогда [ 1+2+3 ] / 3 = 2.

Тогда, если мы выводим нашу сцену с девушкой и машиной на фоне стены дома в разрешении 1024x768 при 60 fps, то требуемая величина fillrate будет равна 47185920 * 2 = 94371840 пикселей в секунду. На практике не существует инструмента для определения величины scene overdraw в каждом конкретном приложении, однако считается, что игры 1999 года имеют scene overdraw равным в среднем 3 или 4, а то и 5. Например, в Quake3Arena это значение считается равным 3. Тогда, в случае с Quake3Arena при разрешении 1024x768 при 60 fps и значении screen overdraw, равном 3, получим требуемую величину fillrate, равную 141557760 пикселей в секунду. На самом деле, есть данные, что в Quake3Arena значение overdraw равно 2.3. Отметим, что весь статичный мир в Q3A имеет overdraw равное единице, т.е. нулевое перекрытие, в следствие применения специального формата представления данных BSP (Binary Space Partition). Формат BSP позволяет использовать все полигоны, из которых формируется статичный мир, в тщательно отсортированном виде. Это позволяет использовать режим непрерывного заполнения (z-fill) данными z-буфера без операции чтения/сравнения, что избавляет от необходимости отдельной очистки z-буфера. При отрисовке порталов также применяется специализированный алгоритм Portal Rendering Algorithm, который обеспечивает overdraw, равное единице, т.е. нулевое перекрытие. Достигается такой результат за счет тщательного расчета модели 3D-мира. После отрисовки статичного мира идет перекрытие подвижными объектами, например, игроками. Зеркальные поверхности, например, генерируются за два прохода рендеринга при использовании буфера шаблонов (стенселя). Но мы тут обсуждаем не Q3A, так что продолжим. На практике же, например, карты на базе TNT2 Ultra с тактовой частотой графического ядра в 190 Мгц показывают скорость в районе 60-70 fps, т.е. теория совпадает с практикой в данном случае. Это, кстати, говорит о высоком качестве OGL ICD драйверов от NVIDIA и грамотной реализации интерфейса OpenGL. Зато в D3D игре Eхpendable величина fps уже в районе 50. Дело в том, что на конечное значение fillrate влияют еще два важных фактора (про scene overdraw мы уже объяснили), а именно: качество управляющей графическим процессором математики (читай: драйвер видеокарты) и степень оптимизации API.

Что касается зависимости от управляющей математики (т.е. качества драйвера), то это подтверждается практикой, когда при неизменной комплектации системы установка нового драйвера обеспечивает рост величины fps. В принципе, с драйверами у NVIDIA в последнее время все было в порядке, более того, недавно стало известно о переходе в NVIDIA целой команды специалистов из SGI, что должно гарантировать высокую степень оптимизации и качество математического обеспечения и в будущем. Что касается влияния API на производительность, то этот вопрос очень сложен, но разработчики приложений не отрицают того, что без должной оптимизации работы с вызовами API будет снижение производительности. Например, если посмотреть листинги Direct3D, то даже не специалист по программированию легко заметит массу избыточной перестраховки. Например, постоянные проверки на отсутствие отрицательного значения чисел. Итак, вывод такой: карты на базе GeForce 256 обеспечат лучшую производительность во всех современных играх, по сравнению с картами на базе TNT2. Если вернутся к замечанию Скотта Селлерса, то он в качестве примера рассматривал разрешение 1600x1200, заявляя, что у GeForce 256 не хватит величины Fillrate для приемлемой скорости игры. Ну что можно сказать — да, не хватит. Но у нас встречный вопрос: а многие ли играют в таких разрешениях?

Для справки, в нетрадиционной (тайловой) архитектуре рендеринга, которая реализована в PowerVR250, величина scene complexity (overdraw) всегда равна 1, т.к. вся сцена определяется заранее, а уже потом происходит ее рендеринг.

Что касается величины overdraw, то тут надо отметить один момент. Эта величина существенно зависит от того, в каком порядке осуществляется сортировка полигонов при формировании сцены. Для уменьшения overdraw необходимо выводить полигоны, начиная от ближних к дальним, а для корректной отработки alpha-channel, т.е. смешивания и, как следствие, для улучшения внешнего вида изображения в игре, необходимо выводить полигоны, начиная от дальних к ближним. Для увеличения быстродействия необходимо осуществлять сортировку по используемым текстурам и по порядку следования вертексов (vertex) для их равномерного размещения в vertex cache. Величину overdraw можно сильно уменьшить путем предварительного отбрасывания полностью перекрываемых полигонов, но это уже работа разработчиков игр, на которую далеко не всегда хватает времени и желания. Кстати, если не использовать мультитектурирования, величина overdraw будет наибольшей. На глаз определить величину overdraw, не зная порядок сортировки, практически невозможно.

Тут мы вновь возвращаемся к проблеме нехватки fillrate. Дело в том, что снижение величины overdraw неизбежно влечет за собой ухудшение качества изображения, а увеличение overdraw требует высокой скорости fillrate. Но опять же, для самого распространенного разрешения 1024x768 величины Fillrate у GeForce 256 хватит с лихвой. Кроме того, большая величина fillrate дает возможность применять различные специальные эффекты, улучшающие качество изображения, а значит, и его реализм. Про сглаживание всей сцены мы упоминали, есть еще такие эффекты, как рельефное текстурирование. Ну, что предлагает NVIDIA вместо full-scene anti-aliasing, мы уже обсудили, а вот что касается рельефного текстурирования, то GeForce 256 поддерживает на аппаратном уровне две такие техники: embossing и dot product. С методом embossing (выдавливание) все ясно, тут ничем не удивишь. Только вот со скалярным рельефным текстурированием (dot product) не все ясно. Да, GeForce 256 действительно поддерживает Dot Product Bump Mapping, только в его реализации есть один недостаток: интерполяция между кодированными нормалями линейная, а не сферическая, что может привести к нежелательным артефактам, когда одному текселю в текстуре с нормалями соответствует много пикселей на экране. Вот в этом и заключается отличие реализации Dot Product от NVIDIA от т.н. традиционного метода, реализованного, например, в PowerVR250.

Но вернемся к вопросу производительности, так как есть еще моменты, требующие внимания.

Больше полигонов — лучше качество

Разумеется, на скорость работы карты влияют и такие факторы, как дополнительные специальные графические эффекты. В частности, ожидается, что при использовании сглаживания всей сцены (full scene anti-aliasing) будет заметное снижение величины fillrate, а значит, и величины fps в играх. Да, скорее всего, так и будет. Однако, NVIDIA делает ставку на другое свойство GeForce 256, которое должно помочь улучшить качество выводимого изображения в играх, даже без применения эффекта full scene anti-aliasing. Напомним, что ключевой особенностью GPU GeForce 256 является интегрированный геометрический сопроцессор. Так вот, NVIDIA делает ставку именно на возможность обработки большего количества полигонов, напомним, что геометрический движок в GeForce 256 способен обрабатывать до 15 млн. треугольников секунду. Известно, что чем большее число треугольников используется при тесселяции поверхностей, тем более естественными получаются отображаемые графические модели. По сути, NVIDIA предлагает разработчикам игр использовать более сложные геометрические модели и большее число полигонов для каждой сцены, чтобы повысить общее качество изображения. И этим изящно должна решиться проблема снижения производительности при использовании техники full scene anti-aliasing. Фактически, NVIDIA предлагает использовать в сцене 60000 треугольников и даже более, за счет чего должно улучшиться качество, а скорость fps при этом будет на желаемом уровне в 60 кадров в секунду. Только вот вопрос в следующем, будут ли разработчики следовать рекомендациям NVIDIA?

Есть и еще один аспект, связанный с производительностью, а именно: с какой точностью представляются данные при рендеринге сцены. Обычно данные представляются с 16-битной или 32-битной точностью. При этом практика показывает, что падение величины fps составляет порядка 10% при переходе от 16-бит глубины представления цвета к 32-битной глубине представления цвета при рендеринге. Чем же объясняется такое снижение производительности? Дело в том, что при использовании 32-битной точности увеличивается объем данных, которые нужно хранить и передавать. При этом пропускной способности внутренней шины памяти не хватает, а, следовательно, возникают задержки. Плюс время, необходимое на обнуление Z-буфера и кадрового буфера, все время увеличивается. Конечно буферы обнуляются не во всех играх, тут все зависит от разработчиков. В результате мы наблюдаем снижение общей производительности. Есть еще мнение, что при использовании 32-битной точности представления данных возрастает нагрузка на графический процессор. На наш взгляд, это не так. Графический процессор как работал с порциями данных, так и работает, как при 16-битной точности, так и при 32-битной точности представления данных. Оба режима являются штатными, и вряд ли этот элемент системы является узким местом.

Теперь вернемся к спецификации GeForce 256 и вспомним, что в новом GPU используется 256-разрядная шина памяти. Фактически, по сравнению с TNT2, ширина шины памяти, а значит, и ее пропускная способность, удвоена. Поэтому есть основания предполагать, что, при переходе от 16-битной точности представления данных к 32-битной точности, карты на базе GPU GeForce 256 не будут терять в скорости, т.е. производительность не будет снижаться. Но это лишь предположение. Заметим также, что кроме наличия 256-разрядной шины данных, GeForce 256 поддерживает интерфейс памяти типа DDR SDRAM/DDR SGRAM. Кстати, в свое время мы прогнозировали поддержку в новых графических чипах этого типа видеопамяти. К слову, поддержка этого типа памяти — не новинка в области графических акселераторов для массового рынка, впервые о поддержке интерфейса памяти типа DDR SDRAM было объявлено в спецификации графического чипа Rage128VR от ATI еще в сентябре 1998 года. Однако дальше поддержки интерфейса памяти дело не пошло, просто-напросто памяти типа DDR SDRAM производится пока крайне мало, и она очень дорогая. Зато несомненным плюсом памяти типа DDR SDRAM является вдвое большая пропускная способность по сравнению со стандартной памятью типа SDRAM (или иногда называемой SDR SDRAM). Большая пропускная способность обеспечивается за счет передачи данных по обоим фронтам сигнала. Можно констатировать, что NVIDIA уделила много внимания узкому месту всех графических систем — ширине полосы пропускания видеопамяти. Если при использовании стандартной памяти типа SDRAM все таки будет потеря в скорости при переходе от 16-битной точности к 32-битной точности представления данных, то уж при использовании DDR SDRAM потери наверняка будут минимальны, если вообще не исчезнут. Вот только когда появятся карты с локальной памятью типа DDR SDRAM, никто не знает. Но надежда всегда умирает последней.

В чипе GeForce 256 реализована поддержка режима AGP x4 Fast Writes, что должно в некоторых ситуациях положительно сказаться на производительности. Сам режим Fast Writes является частью спецификации AGP 2.0. Этот режим ускоряет все операции передачи данных от CPU в графический процессор, включая:

  • Все 2D-операции
  • Операции записи в кадровый буфер и передачи данных непосредственно в графический процессор
  • Загрузка текстур в локальную видеопамять под управление Direct3D
  • Запись содержимого промежуточных буферов (FIFO) в локальную видеопамять, именно за счет этих операций обеспечивается наибольший выигрыш в скорости


         
Слева — обычный режим, справа Fast Writes

Режим Fast Writes позволяет CPU системы передавать данные напрямую в графическую шину данных, минуя системную шину памяти. Дело в том, что современные игры требуют все большее и большее количество полигонов. Данные о них поступают от приложения через API под управлением CPU в графический процессор, где уж выполняются операции по преобразованию координат, расположению в пространстве, текстурированию, затенению и т.д. В обычном случае (в существующих системах с AGP 1.0) все данные от CPU передаются через системную шину памяти. При этом поток данных может достигать объема в 900 Мб/сек , а ведь через системную шину памяти проходят и другие потоки данных. В результате образуется узкое место системы, т.к. CPU вынужден простаивать, ожидая, когда первая порция данных попадет в графический процессор. В случае использования Fast Writes режима, данные передаются напрямую от CPU в графический процессор через шину AGP, минуя системную память. В результате обходится узкое место системы и разгружается системная память компьютера от передачи данных, предназначенных для графического процессора. Стоит добавить, что поддержка такого режима не является чем-то уникальным, принадлежащим исключительно NVIDIA. Спецификация AGP 2.0 является открытой и доступна для всех разработчиков графических процессоров. Все дело в реализации поддержки этого режима в драйверах. Да, ну и разумеется, нужно наличие поддержки AGP x4 в чипсете системных плат. В любом случае, мы обязательно проверим на практике, как работает режим Fast Writes.

Вернемся вновь к вопросу с качеством графики. Чтобы повысить реализм в приложениях, NVIDIA предлагает разработчикам использовать технику отображения отражений в реальном времени, для чего предлагается использовать технику cube environment mapping. Техника наложения кубических карт окружающей среды (cube environment mapping) поддерживается в интерфейсах DirectX 7 и OpenGL 1.2 и, по мнению NVIDIA, ее легко использовать, чтобы сделать еще один шаг в сторону большего реализма графического моделирования. Вообще, карты окружающей среды применяются для воспроизведения зеркальных отражений и отраженного света. До недавнего времени применялись только плоские (planar) и сферические карты окружающей среды. Однако такие техники не обеспечивают реалистичности отражений и отраженного света, при этом использование сферических карт требует довольно много усилий от разработчиков, и такие карты сложно накладывать в режиме реального времени. Помочь разработчикам добиться реализма в режиме реального времени должна техника использования кубических карт окружающей среды.

В случае с cube environment mapping для наложения текстур отражений рассчитывается шесть планарных карт среды, которые формируют куб вокруг объекта, на поверхности которого нужно отобразить отражения. Отсюда и название техники. Делается это для того, чтобы рассчитать отражения с шести возможных точек зрения. При этом подразумевается, что отражения могут быть динамическими, например, объект может вращаться, и окружающие его объекты сцены также могут двигаться. Отсюда следует, что карты среды окружения могут быть статичными и динамичными, т.е. они могут быть созданы заранее и могут создаваться на лету в процессе изменения действия в игре. После того, как карта среды определена, рассчитываются координаты текстур для установки тех текселей, которые должны быть наложены на конкретные пиксели объекта, на который накладываются карты среды. Объект, на который накладываются карты окружения, может иметь любую форму, и в каждой из вершин треугольников, из которых состоит объект, будет определяться цвет, получающийся в результате наложения текстуры карты окружения.

В результате, благодаря использованию кубического текстурирования с помощью карт окружающей среды появляется возможность воспроизводить отражения, которые будут выглядеть естественно во всех направлениях и со всех сторон объекта, т.к. учитывается и вторичное освещение. Это было невозможно при использовании сферической карты окружения, т.к. в этом случае учитывается только отражение в одном направлении, т.к. одна карта окружения растягивается в виде сферы вокруг объекта. В общем, в результате мы должны получить в играх более реалистичные отражения.


The Room, © Kenneth Martin

Возникает резонный вопрос, а хватит ли GeForce 256 вычислительной мощности и fillrate для использования cube environment mapping? Пока можно только строить предположения, но одно точно — координаты текстур окружения рассчитываются автоматически и без ущерба для скорости, а вот скорости fillrate может не хватить при высоких разрешениях. Но про fillrate мы уже говорили выше. Скорее всего, в разрешении 1024x768 все будет в порядке, иначе NVIDIA не акцентировала бы поддержку cube environment mapping на аппаратном уровне графическим процессором GeForce 256.

Ну что же, осталось добавить информацию о том, когда же мы увидим в продаже видеоадаптеры на базе GeForce 256. Произойдет это уже совсем скоро. Возможно, уже в начале октября на рынке появятся карты от Creative, Asus, Guillemot и Leadtek, а чуть позже — от Elsa.

Первые карты на базе GeForce 256 будут иметь 32 Мб локальной видеопамяти, позднее ожидается выход карт с 64 Мб локальной видеопамяти, о моделях со 128 Мб локальной памяти пока никто не заявлял. В качестве опций будут предлагаться TV In/Out, DFP интерфейсы и стерео очки. Пока никто из производителей не заявлял о возможности расширения памяти. Поэтому, если кто-то хочет именно 64 Мб версию (а есть мнение, что с таким объемом памяти карты будут работать в полную силу), придется немного подождать. Не может не радовать тот факт, что от официального анонса GeForce 256 до появления карт на его базе пройдет совсем немного времени — чуть больше месяца. Что касается цен, то ожидается, что карта на базе GeForce 256 с 32 Мб локальной видеопамяти будет стоить до $300. Много это или мало? Скажем так, за новый продукт, обладающий уникальными свойствами, и при отсутствии конкуренции это вполне разумные деньги. Экономный пользователь подождет еще пару месяцев и купит желанную карту за сумму около $200 или меньше. Решать все равно вам.

Подведем черту

Компания NVIDIA считается лидером массового рынка 3D графических процессоров. Графический процессор GeForce 256, безусловно, будет способствовать укреплению позиций NVIDIA на рынке. Очевидным является тот факт, что GeForce 256 — это серьезный эволюционный шаг вперед в сторону обеспечения большего реализма 3D-графики в играх. Этому способствует, прежде всего, реализация интегрированного в GeForce 256 геометрического сопроцессора, выполняющего операции по преобразованию координат и установки освещения. Несмотря на мнение некоторых аналитиков, что тактовая частота в 120 МГц ядра GeForce 256 слишком мала для современных условий, наличие четырехконвейерной архитектуры обеспечивает высокую производительность в целом. Для существующих приложений и тех, которые выйдут в ближайшие полгода, величины fillrate, равной 480 млн. пикселей в секунду и 240 млн. пикселей в секунду в режиме мультитекстурирования, вполне хватит для разрешений вплоть до 1024x768 при частоте кадров 60-70 fps. Ведь у основной массы пользователей установлены мониторы с диагональю 15"-17", а это значит, что большинство пользователей используют именно разрешение 1024x768. Тем не менее, NVIDIA делает ставку на то, что разработчики игр будут использовать большее количество полигонов для формирования 3D-сцены, что позволит повысить реализм и качество отображаемой графики.

Кроме того, есть все основания предполагать, что в следующим году, причем уже весной будет анонсирован новый графический процессор от NVIDIA. Причем совсем не обязательно ожидать чего-то кардинально нового. Достаточно будет уже того, если NVIDIA перейдет на 0.18 мкм технологический процесс изготовления своих чипов, а это позволит поднять тактовую частоту ядра GeForce 256 примерно на 30-50 МГц и более, т.е. величина fillrate автоматически возрастет. Так что особо терпеливые могут спокойно дожидаться весны следующего года, тем более, что к тому времени должны появится игры, которые смогут в полной мере использовать мощности геометрического акселератора, интегрированного в GeForce 256.

Раз уж зашла речь о поддержке возможностей GeForce 256 в приложениях, то разъясним сложившуюся ситуацию. Часть уже имеющихся на рынке игр сходу могут использовать часть преимуществ GeForce 256. Любая игра, использующая API OpenGL, в которой вся работа по растеризации переложена на аппаратную часть, сразу сможет использовать вычислительные мощности GeForce 256 по преобразованию координат. Например, игра Quake3 Arena от iD Software, Inc. будет себя прекрасно чувствовать при запуске на системе с установленной картой на базе GeForce 256. Более того, есть информация, что iD собирается модифицировать Q3A с тем, чтобы в сценах использовалось большее число полигонов. Разумеется, чем больше будет полигонов в сцене, тем более качественно будут прорисованы объекты. Но вернемся к поддержке GeForce 256 в играх. C OpenGL играми вроде все понятно, заметим только, что идеальной является ситуация, когда приложение использует OpenGL Display Lists (таблицы или списки отображения) для преобразования геометрических данных в формат, который может быть непосредственно воспринят геометрическим акселератором.

Теперь посмотрим что там у нас с Direct3D-играми. В API DirectX 7.0, который вот-вот должен быть официально завершен, есть поддержка геометрических акселераторов, поэтому любое приложение, использующее конвейер преобразований координат Direct3D, может быть портировано с тем, чтобы эти операции выполнялись движком T&L, являющимся частью GeForce 256. При этом потребуется внести небольшие изменения в код приложения, но эта работа стоит того. Уже сегодня ряд разработчиков заявили о своем намерении сделать такие модификации. Если приложение использует собственный программный движок преобразования координат, то его придется также модифицировать. Работы это потребует больше и, скорее всего, таким изменениям подвергнутся лишь единицы игр. Ожидается, что к концу 1999 года около трети всех ожидаемых к выпуску игр будут поддерживать графические процессоры с геометрическими акселераторами, перекладывая на них выполнение операций по преобразованию координат.

Что все это означает для конечного пользователя? Это означает, что та работа по преобразованию координат, которую раньше выполнял ваш CPU, теперь будет выполнять геометрический сопроцессор, интегрированный в GeForce 256, а это значит, что на системах с не очень мощным процессором вы увидите явный прирост скорости (fps) в играх. Мы не случайно подчеркивали, что на GeForce 256 будет переложена в основном только работа по преобразованию координат. Дело в том, что большинство существующих и готовящихся к выходу в свет Direct3D и OpenGL игр осуществляют установку освещения программным путем, загружая CPU системы, вместо того, чтобы переложить эту работу на геометрический сопроцессор. Если же разработчики перейдут к аппаратной установке освещения, а NVIDIA проводит с ними серьезную работу, то мы увидим в играх дополнительные источники света и специальные световые эффекты, которые придадут больший реализм действию на экране. Напомним, что GeForce 256 может обеспечивать одновременный расчет и установку до 8 источников света для всей сцены.

Может возникнуть резонный вопрос: а зачем было торопиться с выпуском на рынок графического процессора с интегрированным геометрическим акселератором, если в полной мере существующие игры его не могут использовать, а среди готовящихся к выходу игр объявлены лишь единицы, которые смогут использовать GeForce 256 на полную катушку? Ответ прост. Разработчики игр никогда не будут встраивать поддержку несуществующего аппаратного обеспечения. Поэтому первый шаг должны были сделать именно разработчики аппаратной части. NVIDIA — лидер рынка графических процессоров для PC, а лидер должен постоянно подтверждать свое превосходство. Иначе конкуренты съедят. Кончено, NVIDIA могла подождать, когда будут полностью завершены работы по переходу на 0.18 мкм процесс или даже сделать специальную систему охлаждения и электропитания для своего GPU. Но положение лидера обязывает. Именно этим обусловлено появление GeForce 256 именно сейчас. С другой стороны, момент выбран вполне благоприятный, не за горами новый год, а значит, массовый ажиотаж вокруг покупки компьютеров и компонентов. Карты на базе GeForce 256 практически обречены на успех, особенно пока нет конкурентов. А после нового года NVIDIA спокойно завершит переход на 0.18 мкм процесс и выпустит GeForce 256 II и вновь покажет, кто лидер. Но это конечно предположения, хотя и не лишенные оснований.

Осталось получить в руки реальные карты на базе GeForce 256 и проверить все обещания и предположения на практике. До этого момента осталось совсем немного. Возможно, мир игр действительно изменится, точнее, наши представления о том, как должны выглядеть игры и какое аппаратное обеспечение нужно любителю поиграть.

Использованы материалы NVIDIA Corp.
Отдельное спасибо Юрию Блажевичу за оказанную помощь




Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.