МИР NVIDIA / NV30 

NV30

19.08.2002


Введение

Приближается осень, а вместе с ней и новое поколение ускорителей, готовое еще раз произвести революцию и изменить мир. Похоже, нас действительно ждет что-то необычное, я бы даже сказал, нетрадиционное. А именно, по настоящему, если не революционный, то, по крайней мере, очень мощный ускоритель, способный сильно сдвинуть уровень графики в играх в будущем.

В этой статье мы рассмотрим почти всю известную информацию об NV30 и проведем небольшое сравнение с уже объявленным конкурентом - Radeon 9700.



Архитектура CineFX

Не так давно, эта архитектура была анонсирована NVIDIA на выставке SIGGRAPH 2002 и, поскольку она является частью NV30, нам незачем больше гадать о возможностях нового ускорителя. В основе архитектуры лежат принципы гибкости и программируемости. Иначе говоря, в следующем поколении ускорителей NVIDIA значительно расширены возможности шейдеров, впервые реально появившихся в ускорителе GeForce3. Разберем подробнее возможности новой архитектуры.



Шейдеры

До появления шейдеров, в ускорителях был реализован стандартный ограниченный набор эффектов, возможности которого жестко ограничивали то качество графики, которого можно было добиться при их использовании. Если мы хотим получить в играх качество графики, сходное с профессиональными трехмерными фильмами вроде "Shrek" или "Toy Story", то придется уйти от фиксированных операций и развязать программистам руки, позволив самостоятельно программировать нужные им функции.

Именно для этой цели и были предложены шейдеры - т.е. программируемые эффекты. Шейдер - это маленькая программа-функция, которая выполняется ускорителем наравне со стандартными ("зашитыми") функциями.

Сами шейдеры разделяются на пиксельные и вершинные. Как и следует из названия, пиксельные шейдеры - это функции, обрабатывающие пиксели, а вершинные шейдеры - вершины треугольников или других примитивов.

Вершинные шейдеры

Характеристики

NV2Х

NV30

Версия

1.1

2.0+

Инструкций

до 128

до 65536

Статических инструкций

до 128

до 256

Констант

до 96

до 256

Регистров

12

16

Циклов

0

256

Эта таблица позволяет наглядно сравнить возможности вершинных шейдеров NV30 и NV2X. Разберем по порядку каждые пункт.

Версия шейдеров NV2X 1.1 - это стандарт шейдеров, используемый в DirectX 8.1. Однако, NV30 разрабатывался уже по стандартам следующей версии, DirectX 9, которая использует стандарт 2.0.

NVIDIA обозначает версию шейдеров NV30 как 2.0+. Причина этого в том, что некоторые характеристики NV30 значительно превосходят стандарт 2.0 и, скорее всего, для них будет введен расширенный стандарт. У нас есть информация, что обозначаться он будет цифрой 3.0 (на мой взгляд, такое обозначение является чисто рекламным: считать шейдеры NV30 следующим поколением шейдеров относительно 2.0 - явная натяжка, хотя они и значительно мощнее стандарта 2.0).

Количество инструкций, которые может выполнить одна функция, увеличено в 512 раз. Это действительно впечатляющий скачок. Ведь чем больше операций можно включить в функцию-шейдер, тем более сложные и реалистичные эффекты можно реализовать с их помощью. Сейчас любые трехмерные эффекты, используемые Голливудом рассчитываются программно, из-за того, что обычный процессор позволяет программировать эффекты, не ограниченные по сложности. Поскольку для фильмов не требуется расчет в реальном времени, в них можно использовать шейдеры практически любой сложности и длины. Игровой ускоритель не может позволить себе такой роскоши. Ведь от него требуется 60 кадров в секунду и более, в то время как фильм может рассчитываться по одному кадру за два часа.

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

Реально, вершинный шейдер NV30 может состоять из 256 операций, однако, впервые появилась возможность использовать циклы, переходы и подпрограммы (всего до 256). С использованием циклов, шейдер NV30 может произвести до 65536 операций с вершинами! На данный момент эта цифра является астрономической.

Увеличенное количество констант и регистров делает программирование шейдеров более удобным и, естественно, расширяет их возможности.

NV30

С помощью вершинных шейдеров NV30 можно рассчитывать реалистичные плещущие трехмерные волны в реальном времени.

Пиксельные шейдеры

Характеристики

NV2Х

NV30

Версия

1.1

2.0+

Наложение текстур

до 4

до 16

Текстурных инструкций

до 4

до 1024

Цветовых инструкций

до 8

до 1024

Тип данных

целые

вещественные

Максимальная точность

32 бита

128 бит

Итак, изменения в области пиксельных шейдеров не менее революционны. NV30 может накладывать до 16 (!) текстур на пиксель. В современных играх трудно встретить и 4 текстуры на пиксель (примером могут служить некоторые сцены Serious Sam). Даже Кармак, не устающий поражать всех нескромными запросами его DOOM3, в самых своих страшных высказываниях, никогда не переходил отметку в 8 текстур на пиксель. Вероятно, дальнейшего увеличения этого параметра не потребуется ещё очень долго.

Количество инструкций для пиксельных шейдеров увеличено аналогично вершинным шейдерам - в 512 раз. Однако, не допускаются циклы, переходы и другие аналогичные конструкции. Да и сама по себе, длина пиксельного шейдера не сравнится с длиной вершинного (1024 против 65536). Всё дело в том, что обрабатывать пиксели значительно сложнее, чем вершины, хотя бы потому, что пикселей на экране, как правило, на порядок больше, чем вершин. Тем не менее, 1024 - это очень внушительное число, позволяющее реализовать очень сложные эффекты.

Кроме количественных изменений, есть и качественные: введена повышенная точность расчетов. Ниже мы рассмотрим эту тему подробнее.

Некоторые возможности пиксельных шейдеров демонстрирует нижеприведенный рисунок.

NV30

Точность расчетов

Как уже говорилось выше, пиксельные шейдеры теперь могут производить вычисления со значительно повышенной точностью. Попробуем разобраться, зачем это нужно. Все ускорители предыдущих поколений делали внутренние вычисления, такие как смешивание цветов при наложении текстур, рельефа, отражений, карт освещения и т.д., с 32-битной точностью. В результате, каждая компонента цвета (красный, зеленый и синий) могли принимать 256 дискретных значений, т.е. по 8 бит на каждую компоненту. Однако, при различных математических операциях смешивания цветов, результат часто не является целым числом. А поскольку ускоритель работал с целыми числами, дробная часть просто отбрасывалась. При одной математической операции, иначе говоря при смешивании двух текстур, погрешность получается достаточно малой и не влияет на качество изображения. Но что если нам необходимо последовательно смешать по различным формулам, скажем 8 текстур? После первой операции дробная часть отбрасывается, хотя она может немного повлиять на результат второй операции и сильнее - на результат третьей, четвертой, пятой… Первоначально отброшенная дробная часть все сильнее сказывается на каждом последующем шаге. Кроме того, на каждой следующей операции также не учитывается дробная часть. В результате, погрешность имеет свойство накапливаться и при большом количестве смешиваемых текстур может значительно повлиять на результат.

Реально, такая погрешность обернется потерей плавности переходов. Попросту говоря, на текстурах будет появляться бандинг (ступенчатые переходы цвета вместо плавных) и другие артефакты, напоминая о временах 16-битного цвета.

Поэтому, значительно расширяя возможности по количеству смешиваемых текстур, не избежать и увеличения точности вычислений.

NVIDIA ввела два вещественных формата чисел для вычислений. Это FP16 и FP32. Первый для каждой компоненты цвета выделяет 16 бит, а второй - 32 бита. Это значит, что формат FP16 обеспечивает работу с 64-битным цветом, а FP32 - с 128-битным. Для сравнения, если раньше компонента цвета принимала 256 значений, то теперь это 65536 и 4 294 967 296 для форматов FP16 и FP32 соответственно. Между двумя соседними значениями 8-битной компоненты лежат 256 или 65536 промежуточных значений.

Естественно, при таком повышении точности погрешность уменьшается на много порядков и практически не оказывает влияния на результат.

При этом не стоит забывать, что мониторы пока не научились выводить 128-битный цвет (не знает о нем и операционная система), да и на скорости использование 128-битный текстур и буфера кадров сказалось бы самым негативным образом. Кроме того, глаз человека все равно не различает больше 16 млн. цветов, 32-битного цвета ему вполне достаточно (ну или почти достаточно - NV30, скорее всего, будет поддерживать 40-битный цвет). Поэтому 128-битный вещественный результат округляется до ближайшего 32-битного (40-битного) значения. Возможно, у кого-то промелькнет мысль - а зачем тогда вычислять с большей точностью, если все равно округлять результат? Дело в том, что вычисления с дробными числами позволяют избежать накопления погрешности, все дробные части учитываются на всех стадиях вычисления и погрешность вносится только один раз - при округлении. Поэтому качество смешивания большого количества текстур будет практически таким же, как смешивание всего двух.

Пару слов также стоит сказать и о предполагаемом введении 40-битного цвета. Как мы уже говорили выше, 32-битный цвет выделяет для каждой компоненты цвета 8 бит. В этом году появилась первая видеокарта, которая работает с 40-битным цветом. Это карта Matrox Parhelia-512. Такой же режим поддерживает и новая карта ATI Radeon 9700. Можно не сомневаться, что и NVIDIA не останется в стороне.

На каждую компоненту 40-битного цвета выделяется 10 бит, в результате любая из компонент может принимать не 256 значений, как в 32-битном формате, а 1024 дискретных значения. Естественно, это также призвано повысить качество картинки, сделать переходы цветов еще более плавными. Обычно, 32-битный цвет выглядит безупречно, но в редких случаях, его точности просто не хватает. Например, если нужно сделать плавный переход между двумя очень близкими цветами на большой площади, то в 32-битном цвете неизбежно возникнет все тот же бандинг (просто не хватает промежуточных значений цвета). 40-битный цвет позволяет значительно повысить качество в этих случаях.

Сам по себе 40-битный цвет не столько важен для 2D-графики (я не имею ввиду профессиональных художников), сколько для 3D-графики, где изображение рассчитывается "на лету", а не готовится заранее. Прежде всего, важна возможность использования 40-битного фрейм-буфера, ведь именно от его точности во многом зависит качество цветовых переходов. Введение 40-битных текстур не так важно: ведь текстуры готовятся заранее художниками, которые могут легко избежать артефактов, связанных с недостаточной точностью.

Кинематографическое качество с CineFX

Мы кратко рассмотрели возможности архитектуры CineFX. Как уже говорилось выше, большие программы-шейдеры могут обеспечивать очень сложные и красивые эффекты. NVIDIA приводит скриншот Final Fantasy и утверждает, что такую сцену ускоритель с архитектурой CineFX может обрабатывать в реальном времени.

NV30

Подобное качество вряд ли оставит кого-нибудь равнодушным. Вовсе не обязательно, однако, что этот скриншот сделан на NV30. Вполне возможно, что NVIDIA просто взяла кадр из фильма. А на NV30 будет демонстрироваться в реальном времени трехмерный ролик из фильма. Тут важно одно обстоятельство: шейдеры, использованные для получения различных эффектов в фильме могут быть любого размера и многие не удастся полностью повторить на NV30, несмотря на все его огромные возможности. В таких случаях эффекты неизбежно будут упрощаться, доводиться до уровня NV30.

Поэтому сейчас сложно судить, насколько адекватен приведенный скриншот, но разумно предположить, что на деле качество будет весьма близко к оригинальному фильму.



Язык программирования шейдеров Cg

Шейдеры - это небольшие программы, выполняемые ускорителем, которые в настоящее время пишутся при помощи набора микрокоманд, т.е. на языке подобном ассемблеру. Поскольку с NV30 шейдеры стали значительно сложнее, писать их при помощи микрокоманд не слишком приятно. Это весьма трудоемко и трудночитаемо. Поэтому NVIDIA совместно с Microsoft предлагают простое и проверенное решение - высокоуровневый язык программирования, который не ограничивает возможности и не сильно снижает эффективность ускорителя, зато радикально упрощает написание крупных программ. Это язык Cg (С++ для графики), который основан на стандарте ANSI C, но с некоторыми вынужденными изменениями.

Некоторые отличия от C++

Поскольку ускоритель по возможностям не может сравниться с центральным процессором, из языка были убраны элементы, которые ускоритель не поддерживает. В частности это goto, break, continue, switch, case, default. Кроме того, не поддерживаются указатели и множество других возможностей оригинального языка. Зато имеется набор библиотек и инструментов, максимально облегчающих написание шейдеров. Оптимизирующий компилятор может самостоятельно "заточить" код шейдера на максимальную скорость и программисту не придется досконально изучать особенности архитектуры для самостоятельной оптимизации шейдеров. Впрочем, всем желающих компилятор позволяет работать непосредственно с низкоуровневым кодом.



Перспективы

Идея и реализация языка программирования для шейдеров выглядит логичной и обоснованной. Кроме того, вместе с NVIDIA, CG продвигает и Microsoft - а это уже явная претензия на стандарт. В любом проекте создания игры, работа программиста крайне объемна и стоит недешево. Любое облегчение этой работы напрямую сказывается на скорости разработки и на затратах. Поэтому есть все основания считать, что если Cg будет принят как стандарт для индустрии, он получит широчайшее распространение.

Следует также отметить, что CG не рассчитан исключительно на NV30. Он разработан как универсальное средство для любого ускорителя, в том числе и GeForce 3 и 4 Ti. Естественно, его возможности будут ограничены тем, под какой ускоритель будет написан шейдер.

Cg имеет огромные просторы для расширения, и в него легко добавить возможности следующих поколений ускорителей. Новые логические конструкции, функции, библиотеки и пр. Для этого компилятор имеет массу зарезервированных слов, которые бесполезны в данный момент, но могут быть использованы в дальнейших версиях языка. Теоретически это должно гарантировать полную совместимость "вперед" и шейдер, написанный на Cg 1.00 будет прекрасно компилироваться и работать и на Cg 5.00.



NV30 против Radeon 9700

Если у NVIDIA и есть настоящий конкурент, то это канадская компания ATI, которая ведет напряженную борьбу с NVIDIA на всех секторах рынка от чипсетов и мобильных ускорителей, до игровых и профессиональных ускорителей. Не будем говорить обо всех рынках, но в секторе игровых ускорителей NVIDIA всегда прочно удерживала лидерство, сохраняя некоторую дистанцию по срокам и скорости. Этой осенью у NV30 будет, пожалуй, только один соперник - это R300 (или Radeon 9700). Сделаем небольшое общее сравнение по основным параметрам.

Технические характеристики

NV30

Radeon 9700

Техпроцесс

0.13 мкм

0.15 мкм

Количество транзисторов

120 млн

107 млн

Конвейеров

8

8

Блоков текстурирования

16

8

Частота чипа

~400 МГц

~300 МГц

Fillrate

6400 Mtexel/s

2400 Mtexel/s

Шина памяти

32*8 (256)

64*4 (256)

Тип памяти

DDR-II

DDR

Частота памяти

400-500 МГц

~300 МГц

Пропускная способность

26-32 Гб/с

~19 Гб/с

Пиксельные шейдеры

Версия

2.0+

2.0

Наложение текстур

до 16

до 16

Текстурных инструкций

до 1024

до 160

Цветовых инструкций

до 1024

до 160

Тип данных

вещественные

вещественные

Максимальная точность

128 бит

128 бит

Вершинные шейдеры

Версия

2.0+

2.0

Инструкций

до 65536

до 1024

Статических инструкций

до 256

до 1024

Регистров

16

16

Циклов

256

0

Итак, рассмотрим по порядку все эти данные.

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

Технические характеристики

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

Отлаженный техпроцесс позволяет быстрее начать производство и получить на первое время больший выход годных кристаллов. Значит, ускоритель выйдет раньше и, в начале, будет иметь меньшую себестоимость. При этом он будет иметь меньшую частоту, больший нагрев и бОльшую себестоимость через некоторое время.

Новый техпроцесс, наоборот, позволяет значительно увеличить частоту, сложность чипа, уменьшить нагрев. При этом приходится мириться с задержкой начала производства и высокой себестоимостью, которая, впрочем, будет быстро уменьшаться и в итоге окажется ниже, чем при использовании устаревшего техпроцесса.

Весьма показательно, что NVIDIA и ATI выбрали разные пути. ATI предпочла выигрыш во времени и выбрала техпроцесс 0.15мкм. Именно это позволило ей опередить с выпуском продукта NVIDIA, которая отдала предпочтение новому техпроцессу 0.13мкм.

По имеющимся у меня данным, можно сделать вывод, что ATI обогнала NVIDIA примерно на месяц. Судя по всему, массовые поставки Radeon 9700 начнутся в середине октября, а поставки NV30 - в середине ноября. Новый техпроцесс позволил NVIDIA усложнить чип, не только реализовав 8 конвейеров, подобно ATI, но и оставить по 2 блока текстурирования на каждом конвейере, против 1 блока Radeon 9700. Фактически, это дает двукратное превосходство NV30 в скорости текстурирования (Fillrate). Но, кроме того, NV30 имеет значительное превосходство по частоте, из-за чего, в результате, NV30 превосходит Radeon 9700 по скорости текстурирования примерно в 2.5 раза (!). И это не какое-нибудь теоретическое "бумажное" превосходство: столь высокий fillrate позволит получить реальное и значительное превосходство, особенно при использовании таких функций как анти-алиасинг и анизотропная фильтрация.

Однако, еще GeForce 2 GTS доказал, что огромный Fillrate бесполезен, если не обеспечить его соответствующей пропускной способностью памяти. Судя по техническим характеристикам, здесь у NV30 проблем нет. Пропускная способность памяти была увеличена пропорционально Fillrate и составляет при использовании 500МГц DDR-II рекордные 32Гб/с (!). Всего несколько месяцев назад был пройден рубеж в 10 Гб/с, и сразу такой чудовищный рывок! По этому параметру NV30 превосходит Radeon 9700 более чем в полтора раза. Не стоит, правда, забывать, что для ATI не представляет особых проблем выпустить отдельную версию Radeon 9700 с увеличенной частотой памяти и сравняться с NV30 по пропускной способности. Однако, с точки зрения производительности, такой шаг был бы бесполезен. Если судить по характеристикам, ATI впервые в своей истории выпустила абсолютно несбалансированный ускоритель. Fillrate Radeon 9700, на мой взгляд, совершенно не адекватен увеличившейся пропускной способности памяти. Поэтому реальная производительность практически всегда будет упираться в Fillrate и дальнейшее увеличение пропускной способности памяти вряд ли позволит заметно увеличить скорость.

С этой точки зрения, NV30 выглядит гораздо более сбалансированным: о пропускной способности памяти NVIDIA позаботилась не в меньшей степени, чем о скорости текстурирования чипа, даже несмотря на то, что реально более вероятно использование памяти не 500МГц, а 400. Дело в том, что в данный момент на рынке не доступны 500МГц чипы памяти. Самую быструю память поставляет Samsung - DDR-II 400МГц. Но даже с такой памятью баланс, думаю, останется в пределах нормы.

Похоже, NVIDIA провела неплохую работу над ошибками, и больше не повторяет те ошибки, которые были совершены при разработке серии ускорителей GeForce2. Напомню, все ускорители GeForce 2 (от MX до Ultra) были, пожалуй, самыми несбалансированными ускорителями за всю историю индустрии.

Обращает на себя внимание тот факт, что и Radeon 9700, и NV30 снабжены 256-битной шиной, автоматически удваивающей пропускную способность той же памяти, по сравнению со 128-битной шиной всех предшественников. Однако, реализация шины, по-видимому, будет несколько различной.

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

Причина этого в том, что одна шина за такт может переслать только один пакет данных, даже если ширина шины позволяет одновременно переслать четыре таких пакета. В то время как четыре мелкие независимые шины позволяют одновременно переслать сразу четыре пакета данных. Пакеты данных могут отличаться по размеру, поэтому в части случаев через шину можно одновременно переслать 1, 2, 4 или 8 пакетов данных, что зависит от ширины шины и от размера пакетов.

ATI и NVIDIA, еще в предыдущих поколениях ускорителей, использовали раздельные шины, но их подходы несколько отличаются. ATI использует независимые 64-битные шины, а NVIDIA - 32-битные. Например, у Radeon 8500 и GeForce4 Ti одинаковая суммарная ширина шины - 128 бит, но у первого она состоит из двух 64-битных, а у второго - из 4-х 32-битных. Очевидно, что решение NVIDIA более эффективно нагружает память, поскольку в некоторых случаях может переслать до 4-х пакетов за раз, при этом оно несколько более сложно в реализации. Решение ATI проще, но и его эффективность несколько ниже.

Radeon 9700 имеет 256-битную шину, состоящую из 4-х 64-битных. Про NV30 сейчас однозначно можно сказать только одно - у него тоже будет 256-битная шина. Но будет ли она состоять из 8-ми 32-битных или, как у конкурента, 4-х 64-битных? Первый вариант был бы более логичен, но реализовать 8 контроллеров и 8 независимых шин совсем не простая задача. Не исключено, что NVIDIA пришлось отказаться от 32-битных шин и перейти к 64-битным. Будущее покажет.

Для повышения эффективности шины памяти, помимо увеличения ее ширины, очень полезно сократить объем пересылаемых данных, за счет неизбежных излишков, которые присущи традиционной архитектуре традиционных ускорителей. Впервые такую технологию использовала ATI в своем Radeon 256. Она называлась HyperZ и позволяла повысить эффективную пропускную способность памяти на 30-40% (!). NVIDIA также стала использовать подобную технологию, назвав ее LightSpeed Memory Architecture (LMA). В каждом следующем поколении ускорителей ATI и NVIDIA немного дорабатывали свои технологии, добавляя к старому названию очередную цифру. Теперь обе архитектуры доросли до третьей версии и так и называются - HyperZ III и LMA III.

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

По слухам, заявленная эффективность LMA III будет 50%, т.е. эффективная пропускная способность памяти увеличится в полтора раза и составит 48 Гб/с. Однако, аналогичная технология Radeon 9700, HyperZ III, имеет сходную эффективность.

Пиксельные шейдеры

Выше мы достаточно подробно разобрали параметры пиксельных шейдеров, поэтому, я не буду слишком подробно комментировать эту часть таблицы. Сразу обращает на себя внимание факт, что NV30 может исполнять существенно более длинные шейдеры, иначе говоря, он может рассчитывать такие визуальные эффекты, которые будут не по зубам Radeon 9700. Превосходство NV30 очевидно.

Вершинные шейдеры

С вершинными шейдерами положение не так однозначно. С одной стороны, Radeon 9700 поддерживает шейдеры длиной до 1024 команд, против 256 команд NV30. С другой стороны, последний позволяет использовать циклы и подпрограммы, а Radeon 9700 - нет. Используя циклы, шейдер на NV30 может выполнить до 65536 операций, и этому трудно противопоставить 1024 операции Radeon 9700.

Что же лучше? Все зависит от того, какой эффект необходимо реализовать. Одно можно сказать точно: на NV30 можно реализовать эффект, который не сможет повторить Radeon 9700, но и последний может выполнить такие эффекты, которые не сможет NV30.

Пожалуй, в этой номинации однозначно не побеждает ни один ускоритель.

Обезьяна против Cg

В противовес Cg от NVIDIA, ATI предлагает другой язык программирования шейдеров, называемый скромно - Monkey. Хотя у меня вызывает большие сомнения его будущее. Ведь Cg был разработан совместно с Microsoft в качестве открытого для всех базового средства создания шейдеров. Он уже предоставлен на суд девелоперов, выложен его исходный код. Судя по всему, именно ему суждено стать индустриальным стандартом.

Я считаю, что конкуренция в области стандартов очень сильно вредит индустрии в целом, приводя к тому, что ни один стандарт реально не используется.

Впрочем, тут немного другой случай. Ведь оба языка работают со стандартными командами DirectX и OpenGL, и потому никакой путаницы внести не должны. При этом, скорее всего, шейдер написанный на Monkey будет быстрее работать на картах ATI, а шейдер написанный на Cg - на картах NVIDIA.

Идеальным вариантом было бы создать стандартный язык программирования, который бы не ставил одного из конкурентов в привилегированное положение. Скорее всего, в будущем этим займется одна Microsoft, а компиляторы от NVIDIA и ATI будут выступать в роли альтернативных - под рекламные нужды.



Выводы

Уже давно мы не наблюдали такого мощного рывка индустрии игровых ускорителей. Если раньше традиционно новый ускоритель превосходил предшественника по скорости процентов на 30-50, то NV30 демонстрирует превосходство над GeForce4 Ti 4600 по скорости в 2-3 раза и невероятное расширение возможностей ускорителя, прежде всего, программируемости.

Все это стало возможно благодаря переходу на новый техпроцесс, а также почти историческому событию - расширению шины памяти до 256-бит.

Предыдущий показатель (128 бит) держался без изменений еще со времен Riva128, т.е. конца 97 года. Интересно будет ли также долго держаться стандарт 256-битной шины, до введения, скажем, 512-битного стандарта, или будет наблюдаться постепенное наращивание шины?

Также очевидно, что NV30 значительно опережает своего главного конкурента - Radeon 9700 - почти по всем параметрам, за исключением сроков начала производства. Любопытно, что возможности обоих ускорителей, особенно NV30, превосходят стандарты DirectX 9.0. В современных играх мы наблюдаем робкие попытки использования некоторых возможностей DirectX 8.0, а ускорители между тем бодро устанавливают новую планку. Я уверен, что большинство возможностей NV30, как это часто бывает, будут востребованы еще очень нескоро. К сожалению, эта история повторяется с выходом каждого нового поколения ускорителей. Будем смотреть демки и 3DMark2003 и мечтать, что подобная графика в играх не за горами. Судя по всему, одной из нескольких (если не единственной) игрой, которая в 2003 году сможет воспользоваться почти всей мощью NV30 будет долгожданный DOOM3.

В современных играх намного важнее такие функции как анти-алиасинг и анизотропная фильтрация, позволяющие сразу улучшить качество графики всех игр, что называется "здесь и сейчас". К сожалению, на данный момент о реализации этих функций на NV30 нам ничего не известно. ATI также не торопится раскрывать детали, хотя известно, что новый метод анти-алиасинга Smoothvision 2.0 представляет собой смесь из мультисэмплинга, применяемого NVIDIA в GeForce 3 и 4 и метода ATI Smoothvision 1.0, используемого в Radeon 8500. В результате, значительно повышена скорость при некотором снижении качества (об этих методах вы можете прочитать в нашей статье). Анизотропная фильтрация Radeon 9700 несколько улучшена. По крайней мере, точно известно, что теперь есть возможность использовать ее одновременно с трилинейной фильтрацией. Правда такой вариант называется Quality, а с билинейной фильтрацией - Performance. Видимо, из-за того, что каждый конвейер Radeon 9700 снабжен всего одним блоком текстурирования, совмещение анизотропии с трилинейной фильтрацией приводит к значительному падению скорости. Мы сможем все выяснить более точно после появления новых независимых материалов в Интернете, которые смогут пролить свет на все вопросы, которые у нас еще остались, касательно NV30 и Radeon 9700.

Когда у нас появится возможность собственноручно протестировать эти ускорители, мы непременно расскажем о них больше.



Использованные материалы



Игорь Епимахов a.k.a. Sboy (sboy@nvworld.ru)



Обсудить/дополнить в конференции

Линки по теме: