Компьютеры
14 ноября 2003, 00:33

3DMark'03: тестовый пакет или красивая игрушка? Часть вторая

Выхода этой программы ожидали многие, и можно понять почему. Дождались. Но не порадовались. Почему?

Продолжение... Первую часть обзора читайте здесь: www.ferra.ru/online/video/25348/.

Шейдеры и Скандалы

Эволюция ускорителей продолжалась очень долго, в процессе этой эволюции API для графических ускорителей прошли жесткий естественный отбор, в результате которого погибли сначала все стандарты, не поддерживаемые монстрами типа NVIDIA, ATI и Microsoft, такие, как Glide, PowerVR, m64XX от Matrox, и многие другие, так и не получившие реализации в железе. В живых остались только DirectX от Мicrosoft и OpenGL, пришедший с навороченных графических станций Silicon Graphics. Эти два стандарта развиваются теперь независимо. DirectX от Microsoft, стал получать распространение только после 5-ой версии, в которой обрисовалась более или менее четкая  концепция API. Microsoft, конечно, планирует развитие этого API, но для программистов со стороны это выглядит скорее свободно развивающимся стандартом, чем хорошо запланированной структурой, то есть развитие API происходит по принципу, "что выросло - то выросло". C седьмой версии DirectX в его функции  входит возможность использования шейдеров. С их помощью производители хотят добиться гибкости аппаратно поддерживаемых функций. С помощью шейдеров, например, можно обучить ускоритель воспринимать удобным для разработчика образом, любую текстуру или геометрический объект, а потом накладывать на него любой описанный в шейдере эффект. Шейдеры делятся на вертексные и пиксельные. Вертексные шейдеры способны воздействовать на каркасные модели, а пиксельные - на текстуры. Язык программы внутри шейдера ограничен версией этого шейдера, также версией шейдера ограниченны возможности языка (количество и возможность циклов, переходов и переменных). Каждая новая версия шейдеров означает большие возможности языка, а с каждой версией DirectX увеличивается версия поддерживаемых шейдеров.  По спецификации Microsoft производители видеоакселераторов должны поддерживать в драйверах обратную совместимость со всеми предыдущими версиями шейдеров, при этом, если аппаратная поддержка функций шейдера отсутствует, то она должна эмулироваться и исполнятся на центральном процессоре.

Версия DirectXВерсия шейдеров
DirectX 7.01.0; 1.1
DirectX 8.11.0; 1.1; 1.3; 1.4
DirectX 9.01.0; 1.1; 1.3; 1.4; 2.0

Но эволюция самих акселераторов как аппаратных устройств показала, что поддержать все версии шейдеров аппаратно невозможно. Поэтому аппаратная поддержка шейдеров в ускорителях сейчас реализована максимум для двух или трех версий, но никак не для всех пяти, и часть функций, естественно, эмулируется. Так же естественно, что эмуляция функций значительно снижает производительность системы. И вот из-за этого имеет место быть очень интересная ситуация. Каждый графический ускоритель имеет разный набор эмулируемых и аппаратных функций. В результате скорость работы приложения, использующего возможности шейдеров конкретной версии, на разных ускорителях будет разной, при этом переход с одной версии шейдеров на другую может перевернуть ситуацию с ног на голову. Таким образом, производители игр могут фактически отдать предпочтение одной из компаний, производящей видеоакселераторы (ATI, NVIDIA), использовав в своей игре версию шейдеров, удобную для ее ускорителей. При этом, если предпочтение отдано, скажем, NVIDIA, то на картах ATI данное приложение будет работать медленнее, чем могло бы. Изменение кода игры на поддержку другой версии шейдеров может окончиться тем, что быстрее уже окажутся уже карты от ATI. Запутались? А в жизни все еще сложнее, так как есть еще и разница в поддержке версий шейдеров не только между чипами разных компаний, но и внутри линейки продуктов одного производителя. Так, например, различается аппаратная поддержка шейдеров у карт от ATI: карты построенные на чипе R200 (8500,9000), поддерживают аппаратно версию 1.4, а карты на базе R300 и R350 (9500,9700,9600,9800) поддерживают шейдеры 2.0, при этом версия 1.4 уже реализована лишь частично, и соответственно, часть функций эмулируется.  Производителям игр же такая ситуация не очень выгодна, им и своих проблем хватает, поэтому они пишут свои игры таким образом, чтобы при использовании конкретного видеоакселератора в него загружались оптимальные именно для него шейдеры. Все просто? А вот и нет. Тут тоже не обошлось без спекуляций. Если компания, производящая игры сначала поддержала карты от ATI, а потом от NVIDIA, то NVIDIA вполне может обидеться и перестать дружить с этой компанией, отказав, к примеру, в какой либо поддержке. То же самое касается и ATI. Эта обидчивость имеет под собой основания - после выхода игры все независимые тестеры сразу же бросаются ее так и сяк тестировать. Обратите внимание на слова «сразу же»! Тестеры не ждут, пока выйдет патч, поддерживающий то-то или то-то. Затем они делятся мнениями, и все. Потом пользователю, его услышавшему, уже не докажешь, что карта от NVIDIA станет быстрее карты от ATI после выхода патча-заплатки. Пользователь уже увидел график, где его любимая NVIDIA заметно медленнее ATI, и переубедить его, что все изменилось, будет тяжело. В результате он пойдет и купит карту от ATI, а NVIDIA не без основания посчитает, что потеряла на этом некие деньги.

Теперь вернемся к нашему 3DMark03. Что же сделала FutureMark? Да все сделали, причем не так, как надо. Все началось с поддержки в GT2 (игровой тест 2- Battle of Proxycon) и GT3 (игровой тест 3 - Trolls Lair) пиксельных шейдеров версии 1.4. Дело в том, что эта версия шейдеров была реализована аппаратно только в ускорителях компании ATI. NVIDIA при этом поддерживала аппаратно только версию 1.3. Надо отметить, что требованием DirectX8.1 была именно поддержка шейдеров версии 1.3, а версия 1.4  была как бы добровольным расширением DirectX8.1. Из заявлений самой FutureMark понятно, что если карта не поддерживает шейдеры версии 1.4, то автоматически загружаются шейдеры версии 1.1, что означает, что ускоритель, который не поддерживает шейдеры 1.4, будет работать вдвое медленней, чем точно такой же, но с поддержкой шейдеров 1.4, так как ему требуется для создания одного кадра, не один проход, а два. Еще в 3DMark2001SE был реализован тест с поддержкой шейдеров версии 1.4, в результате чего карты от ATI в этом тесте были заметно быстрее. Но карты от ATI на чипах ,поддерживающих аппаратно шейдеры версии 1.4, не получили широкого распространения – их было максимум 10% от общего количества ускорителей. Если смотреть на рынок, то максимальная доля рынка на настоящий момент у карт с поддержкой шейдеров 1.1. Более того, даже если посмотреть в будущее, то можно увидеть, что в дальнейшем развитии игр и технологий использование шейдеров версии 1.4 больше не предполагается, так как на смену версии 1.1 пришла версия 2.0, отличающаяся от всех предыдущих куда более удобными возможностями и совестимостью с достаточно большим числом карт, как от ATI, так и от  NVIDIA. Стандарт же шейдеров 1.4 изначально мертворожденный, тупиковый, и в дальнейшем распространения уж точно не получит. Но в FutureMark, наверное, думают иначе. Потому что как еще объяснить то, что эта компания создала тест 3DMark03 именно на базе шейдеров версии 1.4? Если в ускорителях версия 1.4 не поддерживается, то используется версия 1.1, и элементы сцены базирующиеся на этом шейдере строятся не за один проход, а за два. Если вы обратили внимание, то шейдеры 1.4 используются в трех основных сценах, включая GT4 ( Игровой тест 4 - Mother Nature). Таким образом, огромную фору в производительности получили карты от ATI , да и то не все. Если бы Futuremark использовала шейдеры версии 1.3, то перекос бы получился в сторону NVIDIA. При этом использование шейдеров версии 1.4 (или 1.3, неважно) ничем технически не оправдано, и для создания правильного теста нужно было ограничиться шейдерами версии 1.1, так как их поддержка есть у всех более-менее современных карт всех производителей.

Кстати, коль уж мы заговорили о тесте GT4 (Mother Nature), то отметим еще и то, что  использование в одной небольшой сцене сразу трех версий шейдеров является, мягко говоря, ошибкой даже просто потому, что на ЛЮБЫХ ускорителях, включая ATI R300, часть функций будет эмулироваться, потому что такого набора аппаратно поддерживаемых функций, который в идеале нужен для GT4, нет ни у одного ускорителя, существующего и даже еще не существующего на сегодняшний день.

Конечно же, в этой ситуации NVIDIA почувствовала себя не очень хорошо, и решила восстановить «справедливость». Если бы она сделала все по-честному, то в данной ситуации самыми плохими парнями были бы FutureMark. Но этого не произошло. Для драйвера не представляет никакой проблемы распознать известный код шейдера (в данной ситуации - код шейдеров 3DMark03) и заменить его собственным, оптимизированным для работы с конкретным чипом. Драйверы NVIDIA, будучи слегка доработаны, перехватили шейдеры 3DMark, а также еще ряд функций, и заменили их собственным кодом, оптимизированным под GeForce FX. Шейдеров неизвестной этим чипам версии 1.4 заменялись на шейдеры версии 2.0. В самом этом  поступке нет ничего криминального, и это вполне можно было бы простить NVIDIA, если бы этим они и ограничились. Но программисты NVIDIA пошли дальше, и увеличили производительность не только за счет смены версии шейдеров, но и за счет качества. Когда же все то тайное, что NVIDIA скрывала, начало наконец в полном соответствии с известной поговоркой становиться явным, компания сделала заявление, из которого следовало, что современные игровые тесты класса 3DMark не заслуживают доверия, так как манипуляции с результатами этих тестов очень и очень просты, что NVIDIA и доказала, доработав драйверы. Как альтернативу 3D-синтетике NVIDIA предложила использовать живые игры, в которых есть функции тестов (Half-Life 2, Doom 3, etc), и порекомендовала вовсе отказаться от использования продуктов FutureMark. FutureMark в ответ публикует документ, в котором официально подтверждает, что результаты тестов производительности подделаны в драйверах ОБЕИХ (и NVIDIA, и ATI) компаний. Также она выпускает патч, после которого, по идее, все заточки и доработки в драйверах должны перестать действовать, так как усложняется процесс распознавания драйвером используемых шейдеров. После этого производительность карт NVIDIA GeForce FX в тесте 3DMark 03 падает на 26%, а вот производительность карт ATI почему-то остается на том же уровне. Даже ребенку понятно, что следующим шагом NVIDIA после выпуска этого патча должен был стать выпуск драйверов, пропатченных так, чтобы отключать патч FutureMark. И так далее, по кругу, со всеми остановками. Кому от этого хорошо? Правильно, никому. Говорить о какой-либо преемственности результатов тоже не приходится – сегодня результат один, завтра – больше на тридцать процентов, послезавтра – меньше на двадцать пять… О каком доверии к тесту может идти речь?

Компания Futuremark окончательно разочаровала пользователей. Во-первых, она фактически подписалась под словами NVIDIA о том, что результаты тестов можно подделать. Между «железом»  карты и программой тестирования появилась толстая прослойка из возможностей манипуляции результатами на уровне драйверов. Это было и раньше, но никогда это не было так явно.

Можно пойти и дальше, и не сильно ошибиться, сказав, что после всего этого доверия нет не только к 3DMark, но и ко всем тестам, призванным давать объективную информацию. Никто не может дать гарантии, что то же самое не проделают с AquaMark и любыми другими тестами. Да что там говорить, таким образом можно подделать все что угодно, включая игры Half-Life 2 и Doom 3. И, что самое неприятное, доказать такие манипуляции очень сложно. В этот раз все стало явным благодаря жадности -если бы NVIDIA не перегнула палку и не испортила бы качество картинки так сильно, то никто ничего и не заметил бы.

Выводы

К сожалению, мы вынуждены констатировать, что тестовый пакет от Futuremark не совсем удался. В нем одном собрано огромное количество противоречий и откровенно неудачных решений. И если не считать реально красивой графики, которая не может не радовать глаз, больше пользы от этого теста никакой и нет. Тест GT1 создавался для карт совместимых с DirectX 7.0, но всё равно использует вершинные шейдеры 1.1, поддержка которых среди ускорителей, совместимых c DirectX 7.0 в большинстве своем лишь условна, то есть реализуется за счет центрального процессора. Использование некорректно написанного движка  второго и третьего игрового теста в сочетании с использованием тупиковой версии шейдеров  делают использование этого теста как бенчмарка совместимых с DirectX 8 карт абсолютно бессмысленным. Игровой тест GT4  Mother Nature создан просто очень и очень криво. Для компании, производящей такие тестовые программы, самое главное, это придерживаться абсолютного нейтралитета, так как делают они свои продукты не для гигантов 3D индустрии, а для пользователей, и их цена в объективности, а не в красоте. И если компания, производящая тестовые пакеты, думает, что она способна своими действиями подтолкнуть пользователей в направлении нужных покупок, то грош цена такой компании.

Складывается впечатление, что программисты Futuremark делали этот тест в полной изоляции от внешнего мира и абсолютно не следили за происходящими в мире игровой 3D графики событиями. В результате разгорелся грандиозный скандал меж гигантами 3D-индустрии, впутанными в который оказались все, включая Microsoft. При этом корректный выход из него существовал - компании NVIDIA стоило рекомендовать не использовать этот тест для своих карт, или даже просто запретить запуск 3DMark03 на уровне драйверов. Это был бы честный и красивый ход. Но по каким-то причинам они не пошли этим путем.

Задача тестирования 3D-ускорителей отныне и навсегда становится весьма непростой. Как быть с подтасовкой результатов – нам не очень понятно. Мы считаем, что использование теста 3Dmark 03 для получения объективной информации нецелесообразно, так как не соблюдены практически все факторы, отвечающие за объективность. Надеемся, что в будущем компания FutureMark учтет свои ошибки и вернет себе и своим продуктам доверие, которого на настоящий момент она лишилась. Но всё равно, поставьте 3Dmark 03 и запустите его - уж больно красивый в нём деморежим.