i3D-Quality — Под микроскопом: Ноябрь 2008, DirectX 10.1 в «S.T.A.L.K.E.R.: Чистое небо»


Одним из нововведений выпущеной уже год тому назад серии видеокарт Radeon HD 3000 стала поддержка обновленной версии API DirectX — DirectX 10.1. В принципе, существенным это обновление называть было сложно (что, в общем-то, и отражено в скромном изменении версии API), однако некоторые интересные и полезные функции в нём появились — причем, отдельные из них можно даже считать в чём-то более полезными с точки зрения повышения качества 3D-картинки, нежели большинствно новых функций самого API DirectX 10. В число подобных новых функций API DX10.1, в частности, входят некоторые улучшения в механизмах MSAA — multi-sampling anti-aliasing, — которые позволяют использовать MSAA в сумме со сложными алгоритмами построения сцены (например, с приёмами deferred rendering), а также управлять его качеством (через задание произвольных масок выборки сэмплов и собственные алгоритмы их смешивания) и областями применения (например, MSAA можно использовать для сглаживания краёв прозрачных текстур методом alpha to coverage — этот метод доступен и в DX10, однако в DX10.1 его можно использовать с большей гибкостью благодаря остальным вышеперечисленным улучшениям механизмов MSAA).

К сожалению, компания ATI (а теперь еще и AMD, страдающая тем же недугом) известна своей слабостью в плане «проталкивания» новых возможностей своих GPU в реальные игровые приложения. За прошедший с появления в продаже видеокарт Radeon HD 3000 год мы, практически, не увидели ни одной игры, которая использовала бы API DX10.1. Да, какая-то поддержка DX10.1 была реализована в игре Assassin's Creed, однако позже её убрали из игры патчами, объяснив сам факт поддержки ошибкой программистов Ubisoft.

Летом 2008-го года, выпустив чрезвычайно удачное поколение GPU Radeon HD 4000, компания AMD попыталась переломить ситуацию всеобщего игнорирования функций DX10.1 (которые продолжали оставаться уникальной чертой видеочипов Radeon) и анонсировала скорый выход трёх игр с поддержкой этого API: стратегий Stormrise от Creative Assembly и BattleForge от EA Phenomic, а также RPG Cloud 9 от доселе неизвестной студии NHN Games. Набор этот, прямо скажем, не особенно впечатлял: стратегии редко когда могут похвастаться своей графикой, и не совсем понятно, зачем в них может пригодиться DX10.1. Что же до неизвестной игры от неизвестного (судя по всему, корейского) разработчика, то тут и объяснять нечего.

Однако уже осенью этого года мы получили сразу несколько сюрпризов в виде игр с поддержкой DX10.1 (причем, довольно симптоматично, что о них, похоже, не знала и сама AMD — снова проявляется слабость этой компании в отношениях с разработчиками). Во-первых, в конце октября вышла игра Far Cry 2, в которой функции API DX10.1 использовались для повышения производительности при включенном MSAA (sic!) — на качество, насколько мы можем судить, использование DX10.1 в FC2 не повлияло. Плюс компания NVIDIA оперативно реализовала в своих драйверах «особый путь» для FC2, через который эта игра получила доступ к аналогичному функционалу и на чипах GeForce (чипы G80+ поддерживают ряд функций, необходимых для соответствования требованиям API DX10.1, однако — далеко не весь ряд), в результате чего наметившееся было превосходство Radeon в этой игре по производительности быстро сошло на нет.

Вторым — и куда как более существенным — сюрпризом стало введение поддержки DX10.1 в игру «S.T.A.L.K.E.R.: Чистое небо» с патчем 1.5.07. Причём, в отличие от FC2, в случае SЧН речь шла в первую очередь об улучшении качества картинки, а не производительности игры (которая, заметим, и так очень высока на современных Radeon в сравнении с конкурентами из стана GeForce). Поддержка API DX10 в SЧН была реализована изначально, и помимо появившейся в движке X-Ray вместе с DX10-рендерером возможности включения MSAA, принесла пару «эксклюзивных» для DX10-режима эффектов — «мокрые поверхности» и «объёмный дым». Однако с выходом патча 1.5.07 в DX10-рендерере случились едва ли не более глобальные изменения, нежели принёс сам DX10-рендерер по сравнению с DX9-предшественником: появилась возможность точно указать необходимый режим MSAA, включить поддержку DX10.1, а также воспользоваться сглаживанием прозрачных текстур в DX10-режиме:

Таким образом, поддержка DX10.1 была реализована одновременно с изменением базового режима DX10 (что не удивительно), а появившиеся с добавлением поддержки DX10.1 опции частично доступны и на обычных DX10-видеокартах. Любопытно также, что включить использование DX10.1 можно и без использования новых DX10.1-опций — мы можем предположить, что подобное использование обновленного API положительно сказывается на производительности DX10-рендерера на поддерживающих DX10.1 видеокартах.

В рамках сегодняшнего тестирования нас, однако, интересуют новые опции качества, появившиеся в «Чистом небе» с патчем 1.5.07 — в первую очередь потому, что, как и «Тень Чернобыля», «Чистое небо» изобилует прозрачными текстурами деревьев, кустов и прочей растительности, сглаживать которые и призвана новая функция «антиалиасинга объектов с альфа-тестом». Кроме того, в патче 1.5.07 были заявлены некие изменения в алгоритме рендеринга солнечных лучей, а также добавлен новый уровень качества солнечных теней — на них мы тоже постараемся посмотреть.

В принципе, функция сглаживания прозрачных текстур уже давно реализована на уровне драйверов как у NVIDIA, так и у AMD — речь идёт о TAA/AAA, о которых мы уже неоднократно писали в рамках раздела «Под микроскопом» i3D-Quality. Поэтому нам было также интересно проверить, насколько «программное» сглаживание отличается от «драйверного». Но тут нас ждало разочарование: ни GeForce, ни Radeon не стали сглаживать прозрачные текстуры в SЧН ни в DX9-, ни в DX10-режимах версий 1.5.04 и 1.5.07 (Radeon так вообще до сих пор не научились форсировать MSAA в DX9-рендерере движка X-Ray). На GeForce в DX9-режиме периодически проскакивали «сглаженные» кадры, однако затем сглаживание снова пропадало:

При этом, производительность была не просто низкой, она была абсолютно неприемлемой (2-5 fps). Что интересно, подобный результат видеокарты GeForce показали и без включения сглаживания прозрачных текстур — просто в результате форсирования MSAA в DX9-режиме. Видимо, что-то в драйверах GeForce сломано — либо метод, успешно работавший в DX9-рендерере «Тени Чернобыля» не подходит к DX9-рендереру «Чистого неба». Так или иначе, ниже вы не увидите скриншотов с «драйверным» сглаживанием прозрачных текстур.

Конфигурация системы

  • Intel Core 2 Duo E8200 / Intel X48 / 4 ГБ DDR2-667 ОЗУ
  • ОС Microsoft Windows Vista 64-bit Service Pack 1
  • AMD Radeon HD 4870 X2, драйвер Catalyst версии 8.11
  • NVIDIA GeForce GTX 280, драйвер версии 180.84
  • S.T.A.L.K.E.R.: Clear Sky с патчами версий 1.5.04 и 1.5.07

Отметим, что видеокарта Radeon HD 4870 X2 в большинстве наших тестовых сцен оказалась на 50-100% быстрее видеокарты GeForce GTX280 — ниже вы можете заметить это по моментальному fps, запечатлённому утилитой Fraps. SЧН относится к играм, безоговорочно лучше работающим на новых видеокартах AMD (в этот список можно записать еще, пожалуй, рейсинг Grid). Правда, в итоге в «Чистом небе» ни одна из участвовавших в тесте видеокарт не обеспечивает комфортной частоты смены кадров в разрешениях 1600x1200 и выше с максимальными настройками качества в DX10-режиме.

Внимание: полноразмерные версии скриншотов представлены в формате PNG в полноценном качестве. Размер скриншотов варьируется от 2 до 4 МБ!

Солнечные тени

Для начала давайте посмотрим, как сказался на качестве теней новый Ultra-уровень, появившийся в патче 1.5.07 и доступный только в DX10-режиме:

  1.5.04 DX9 1.5.04 DX10 1.5.07 DX9 1.5.07 DX10
GeForce GTX 280
Radeon HD 4870 X2

Разницы между DX9- и DX10-рендерерами в версии 1.5.04 нет (разница в яркости, видимо, обусловлена иными форматами текстур и буфера кадра, а также уже не раз нами отмеченной неспособностью утилиты Fraps сохранить значение гаммы в скриншотах из DX10-приложений).

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

Интересно также отметить, что если в версии 1.5.04 и в DX9-режиме патча 1.5.07 мы не отмечаем никакой разницы между качеством отрисовки теней видеокартами GeForce и Radeon, то в новом Ultra-режиме она имеется: на видеокарте GeForce наблюдается ярко выраженный бандинг размытой границы тени (полутени, «пенумбры»), который на видеокарте Radeon опять-таки сглажен чем-то типа дизеринга. То есть, Radeon HD 4800 X2 на максимальном качестве в SЧН обеспечивает не только более высокую производительность (практически в два раза), но и более высокое качество фильтрации теней! Ради интереса мы отключили использование DX10.1 на Radeon, но на качество размытия края тени это не повлияло — т.е., это превосходство по качеству над GeForce обусловлено не поддержкой DX10.1, а чем-то иным.

Давайте посмотрим на менее «синтетический» вариант наложения теней на игровую сцену:

  1.5.04 DX9 1.5.04 DX10 1.5.07 DX9 1.5.07 DX10
GeForce GTX 280
Radeon HD 4870 X2

Картина уже знакомая: оба режима в версии 1.5.04 и DX9-режим версии 1.5.07 показали одинаковое качество, причем, отмеченная нам выше пикселизация теней удачно скрадывается основными текстурами и практически незаметна. А вот DX10-Ultra-режим патча 1.5.07 опять отличается от остальных более мягким сглаживанием краёв теней — но в этой сцене мы уже не видим разницы в качестве между GeForce и Radeon, она благополучно потерялась среди текселей текстур, на которые проецируется тень.

Еще один довольно любопытный момент в этой сцене: в DX9-режиме на видеокартах Radeon куда-то пропадает прозрачная текстура маскировочной сети в правой части скриншота. Поскольку на GeForce в аналогичнах режимах она в наличии, то, видимо, мы натолкнулись на ошибку драйвера Catalyst 8.11.

Сглаживание прозрачных текстур

Теперь давайте посмотрим на сглаживание прозрачных текстур, а заодно — на солнечные лучи, в алгоритме отрисовки которых что-то изменилось в версии 1.5.07:

  1.5.07 DX10 1.5.07 DX10+TAA 1.5.07 DX10.1+TAA
GeForce GTX 280
Radeon HD 4870 X2

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

Что касается сглаживания прозрачных текстур, то оба режима версии 1.5.04 и DX9-режим версии 1.5.07, естественно, ничем друг от друга не отличаются — сглаживания там нет и быть не может (точнее, может — если когда-нибудь в будущем компании AMD и NVIDIA исправят работу соответствующей функции в своих драйверах). Зато в DX10-режиме версии 1.5.07 мы можем наблюдать работу новой функции сглаживания прозрачных текстур в SЧН версии 1.5.07.

На GeForce за включение сглаживания приходится заплатить примерно треть моментальной производительности. Ожидаемым образом переключение в режим DX10.1 никак не сказывается на качестве — GTX 280 не поддерживает DX10.1 и продолжает сглаживать прозрачные текстуры средствами базового DX10. Стоит также заметить, что качество сглаживания ближе к суперсэмплингу, чем к мультисэмплингу — то есть, оно довольно высокое.

На Radeon включение сглаживание даёт аналогичное по абсолютным числам падение производительности — но гораздо меньшее по относительным, всего лишь 1/5. Режим сглаживания DX10.1 явно обеспечивает более высокое качество, нежели режим DX10. При этом в сравнении качества сглаживания DX10-режима между GeForce и Radeon последняя почему-то проигрывает, и DX10-сглаживание на GeForce оказывается ближе по качеству к DX10.1-сглаживания на Radeon — но лидирование режима DX10.1 на Radeon сомнению не подлежит, а учитывая, что его включение фактически никак не сказывает на производительности, нет ни малейшего смысла использовать DX10-режим сглаживания на поддерживающих DX10.1 видеокартах Radeon.

Давайте посмотрим на сглаживание при mag-фильтрации:

  1.5.07 DX10 1.5.07 DX10+TAA 1.5.07 DX10.1+TAA
GeForce GTX 280
Radeon HD 4870 X2

Второе сравнение подтверждают уже сделанные нами выше выводы: в DX10-режиме сглаживания видеокарта GeForce выглядит лучше, но из-за отсутствия у неё поддержки DX10.1 Radeon всё равно выходит победителем.

Любопытно также, что включение сглаживания опять уменьшило производительность на 7-8 fps, независимо от того, какой он была изначально.

Выводы

Вывод из сегодняшнего тестирования очень простой: API DirectX 10.1, поддержкой которого любит хвастаться AMD в своих маркетинговых материалах, наконец-то, благодаря украинской компании GSC Game World и игре «S.T.A.L.K.E.R.: Чистое небо», перестал быть бесполезной особенностью видеокарт Radeon — DX10.1 работает и обеспечивает вполне наглядное преимущество по качеству над базовым DX10, доступным видеокартам GeForce. В сумме с ошеломительным превосходством видеокарты Radeon HD 4870 X2 над GeForce GTX 280 в плане производительности это означает, что для поклонников игры «Чистое небо» выбор видеокарты теперь вполне очевиден.

Мы же будем продолжать следить за появлением новых DX10.1-игр и проверять их на предмет повышения качества картинки на поддерживающих эту версию API DirectX видеокартах. Несмотря на то, что не за горами уже DirectX 11, приложения с поддержкой DX10.1 в ближайший год могут получить довольно широкое распространение — о чём, вообще говоря, следовало бы хорошо задуматься компании NVIDIA.





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