NVIDIA GeForce Titanium: разделяй и властвуй!

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

Создав новое семейство Ti (Titanium), NVIDIA несомненно преследовала сразу несколько целей. Первая из них - ответ на весьма достойную пару от ATI -Radeon 8500/7500, роды которой несколько затянулись и все еще не могут разрешиться окончательно, чтобы показать конкретные цифры производительности и вес младенцев. Ситуация, надо отметить, досадная: бедные маркетологи NVIDIA вынуждены ждать конкретных финальных цифр по Radeon второго поколения, дабы решить, что, в какие ниши и по каким ценам предлагать на рынок. Но цифр все нет и нет, а акционеры и руководство компании уже вспомнили о пресловутом шестимесячном сроке. Работать в такой обстановке не представляется возможным, и вся надежда остается только на "секретное оружие Pейха" новые драйверы. Которые мы и получили, вероятно, как заполнение неловкой паузы, в течение которой ATI и NVIDIA стремятся пропустить друг друга в рыночную дверь осеннего сезона продаж вперед себя.

Выпускать NV25 или NV17, персональных киллеров Radeon 8500 и 7500 соответственно, до начала массовых продаж последних неблагоразумно. Но и упреждающий удар нанести было бы неплохо. Сия дилемма была решена достаточно просто и в то же время красиво: рынку предложено сразу три несуществующих чипа - GeForce2 Ti, GeForce3 Ti200 и GeForce3 Ti500. Итак, ситуация напомнила сложно сплетенные пальцы двух рук. Кто-то рядом, кто-то выше, кто-то ниже. Выигрывает тот, чей большой палец окажется поверх всей этой кучи. Разумеется, как у NVIDIA, так и у ATI есть собственные мысли на эту тему. Про ATI чуть позже, в будущем обзоре Radeon 8500. Ну а другая рука (NVIDIA) несомненно замышляет в скором времени выпустить истинного "киллера" Radeon 8500 - тот самый мощный NV25 (Ti900 или как там он будет называться:), слухи о котором регулярно появляются на просторах Сети. Впрочем, вернемся к нашим нынешним баранам (простите, титанам).

Несомненно, просто выпускать карты с измененной сеткой частот для такой фирмы, как NVIDIA, - (как бы это вернее сформулировать:) - "несолидно". Посему выпуск сопровождается тремя достаточно громкими заявлениями.

Заявление первое - поддержка DirectX 8.1

Тут необходимо сразу расставить точки над "Ё". Это совершенно не тот DirectX 8.1, о котором говорит ATI :-). Ну а если серьезнее, то NVIDIA просто добилась от Microsoft признания пиксельных шейдеров версий 1.2 и 1.3 достаточными для заявления о совместимости с DirectX 8.1. И если Radeon 8500 поддерживает действительно существенно видоизмененные и качественно расширенные пиксельные шейдеры (бОльшая длина кода шейдера, много новых команд, новые возможности по произвольной выборке значений из текстур и т.д.), то в случае продуктов NVIDIA речь пока идет лишь о незначительных изменениях (добавлено несколько новых команд, число регистров и длина шейдеров остались прежними). Поэтому стоит четко различать "тот" и "этот" DirectX 8.1, оперируя конкретными версиями шейдеров, а не общими словами о совместимости с 8.1 версией API. Более того, в текущих драйверах (на момент написания статьи - 21.85) пиксельные шейдеры по-прежнему остаются версии 1.1.

Ждем! По большому счету, есть подозрения, что шейдеры версий 1.2 и 1.3 мы увидим только в NV25 и NV17. Насчет слухов о грядущей поддержке NV25 фирменных шейдеров Radeon 8500 (1.4) - подобный поворот событий маловероятен. Такая поддержка потребовала бы существенной переделки всего комбинационного конвейера и системы выборки значений текстур, а на это у NVIDIA уже совершенно нет времени, ведь столь существенная переделка чипа способна задержать его выход более чем на полгода.

Заявление второе - поддержка объемных (3D) текстур

Здесь NVIDIA выглядит более пристойно, хотя и наличествует одно "но". Полностью поддержка 3D-текстур, о которой далее пойдет речь, реализована только для чипов ревизии А05. Старые карты (образцы карт на базе NV20 ревизии А02 и первые продукты на базе А03) в приложениях DirectX объемные текстуры не поддерживают. Они остается заблокированными по неизвестной причине (даже программы из SDK в упор не видят 3D текстур на ранних ревизиях NV20), хотя следы их присутствия в D3DCAPS совершенно очевидны. Судя по всему, была обнаружена какая-то ошибка в чипе, и если в OpenGL, который пропускает через себя все данные, создавая списки запросов к ускорителю на основе вызовов API, она поддалась устранению на уровне драйверов, то в Direct3D, где большинство структур данных исполняется чипом напрямую, это осталось невозможным. В отличие от ATI, которая худо-бедно, но имеет поддержку 3D-текстур (еще со времен первого Radeon) как в Direct3D, так и в OpenGL драйверах. Впрочем этот аспект нельзя считать серъезным недостатком, т.к. карты на базе старых ревизий чипа продавались в очень ограниченных колличествах, удивляет только отсутствие официальной информации по этому поводу.

Однако надо отдать должное NVIDIA - объемные текстуры реализованы существенно лучше, нежели в случае первого Radeon. Поддерживаются истинно сжатые (по всем трем измерениям, с коэффициентом сжатия 1:4 и 1:8) форматы текстур, мип-мэппинг объемных текстур и их процедурная генерация, а также использование их как 3D или даже 4D параметризованных таблиц для расчета каких-либо эффектов. Сжатие просто необходимо в случае объемных текстур - одна 256х256х256 текстура спокойно занимает 64Мб в несжатом виде, что, понятно, совершенно неприемлемо. Использование сжатия позволяет сократить ее объем до 8Мб. Но даже в этом случае нам предстоит только мечтать о сценах, где множество объектов имеют собственные 3D-текстуры - пока размеры локальной памяти ускорителей позволяют нам использовать лишь несколько объемных текстур для создания впечатляющих спецэффектов, таких как истинно объемный туман или сложное освещение.

Мип-мэппинг также позволяет снизить объем данных (уменьшая его по мере удаления от объекта) и, кроме того, повысить визуальное качество изображения объектов с 3D-текстурами.

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

На сегодня есть чуть ли не единственное игровое приложение, использующее 3D-текстуры - DroneZ:

Это довольно примитивная по сюжету игра (аркада), однако она просто изобилует спецэффектами и использует все последние новации, доступные в OpenGL (в том числе и 3D-текстуры):

Впрочем, есть несколько неожиданный аспект применения объемных текстур - а именно, Imposters (однозначно перевести не берусь :-). Так именуются плоские спрайты, которые обычно быстро отрисовываются с использованием прямоугольных 2D-текстур (за счет того, что имеют константное значение Z и не требуют поточечной интерполяции параметров). Подобные спрайты применяются для оптимизации вывода множества одинаковых небольших объектов, например, систем частиц.

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

Итак, подведем итог: объемные текстуры остаются пока достаточно ресурсоемкой игрушкой, реально применимой только для создания спецэффектов. Их реализация в чипах семейства GeForce3 достойна всяческой похвалы, но может быть задействована полноценно только начиная с NV20 ревизии А05.

Заявление третье - поддержка Windows XP


Здесь все прекрасно - в наличии как полный набор 2D возможностей, необходимых для полноценного ускорения Windows XP, так и поддержка на низком уровне нового 2D API Microsoft - GDI+. С точки зрения программистов последний представляет собою гораздо более удобный (личное мнение), нежели прежний GDI, объектно-ориентированный API, который, кроме всего прочего, с практической точки зрения обеспечивает еще и более быстрое построение изображений (проверенный факт) и более эффективное использование аппаратного ускорения. Не секрет, что еще несколько лет назад GDI зашел в тупик - его производительность уперлась в архитектурные недостатки API. И GDI+ является попыткой преодолеть эти ограничения. Кроме того, он вносит несколько новых возможностей, уже широко применяющихся в интерфейсе Windows XP, таких как градиентные заливки. Ждем появления новых 2D тестов, рассчитанных на GDI+. Ziff Davis - вы все еще спите? :-)

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