Краткий отчет о тестировании FarCry v.1.2

и о первом воплощении Shader 3.0 в реальность


СОДЕРЖАНИЕ

  1. Введение, особенности видеокарт
  2. Конфигурации стендов
  3. Результаты тестов: Исследование на базе сторонних демо-скриптов
  4. Результаты тестов: Исследование на базе демо-скриптов, включенных в patch 1.2
  5. Результаты тестов: Качество
  6. Выводы


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

Все начиналось когда-то с технологических демо-программ, призванных показать возможности новых GeForce. Компания Crytek вышла практически с передовыми решениями для тех времен. Первая версия «острова с динозаврами» (X-Isle tech demo) вышла до 2001 года и использовала прогрессивные на то время Dot3 Bumpmapping, Realtime Reflections and Refractions, Curved Surfaces. На то время самыми мощными были GeForce2 Pro, GTS.

В этой демке не было возможности «гулять», только лишь пролёт вокруг острова по заданному скрипту. Каждый динозавр воплощал в себе ту или иную технологию в рендеринге. Вода была на процедурных текстурах, а травы оказалось мало. Но для 2000 года это смотрелось просто потрясающе!

Вторая версия, уже под названием X-ISLE: Dinosaurs Island TechDemo, вышла как раз после анонса GeForce3 в 2001 году. И нацелена была на демонстрацию технологий, в то время присущих только этой карте: Texture Shaders using for water-rippling, bump-mapping, sun-reflection; Environmental Bump-Mapping on Sun-Reflection; High Polygon vertex-programm skinned T-Rex (25.000 Polygons).

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

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

Затем долгое время не было никаких вестей, хотя еще в конце 2001 года авторы движка говорили о двух играх, готовящихся к выходу на CryEngine.

Первые звонки о том, что Crytek не умер (фигурально, конечно), и что готовится бомба по графике — игра FarCry, появились в 2002 году. Планомерно, по мере разработки, в Сети появлялось все больше и больше скриншотов, заставляющих восторгаться поклонников красивой 3D-графики.

Чудо произошло. Вновь кардинально переработанный движок от Crytek, роскошные уровни, отличная физика в игре и т.п., сделали свое дело, вознеся игру на вершины популярности. Да, разумеется, чтобы использовать весь потенциал графики, потребуется очень мощный ускоритель, даже новые NV40/R420 показывают не запредельные скорости без АА и анизотропии. Но зато теперь у тестеров и всех поклонников 3D-ускорителей появился новый объект для измерений производительности.

Выше я затронул NV40/R420. Мы уже много раз рассказывали об особенностях этих продуктов, поэтому прошу ознакомиться с нашими статьями на эту тему.

Теоретико-аналитические материалы и обзоры видеокарт, в которых рассматриваются функциональные особенности GPU ATI RADEON X800 (R420) и NVIDIA GeForce 6800 (NV40)

Итак, FarCry и новые ускорители. До последнего момента всеми тестерами, да и вообще игроками использовался патч 1.1 к этой игре, который исправил много ошибок, оптимизировал работу игры, но, вместе с тем, значительно подняв скорость у GeForce FX 59xx серии, ухудшил местами качество, о чем мы уже писали ранее.

Теперь на горизонте выход патча 1.2. Что от него можно ждать? — Думаю, что ответ на этот вопрос вряд ли уместен в этом разделе, это все же прерогатива игровых ресурсов или разделов. А вот с точки зрения NV40 эта версия принесет самое первое реальное использование шейдеров 3.0. Да, в патче 1.2 задействована эта новая технология. Забегая вперед, скажу, что пока лишь с точки зрения скорости, качественную составляющую не трогали (кроме исправления некоторых огрех).

Именно с целью посмотреть — что дает патч 1.2 для GeForce 6800, мы и решили сделать данный материал. В его рамках я не буду бросаться рассматривать все современные карты и их работу в FarCry 1.2, мы ограничимся лишь GeForce 6800 Ultra и X800 XT. Поскольку у нас есть 3DGiтоги, в рамках которых мы рассматриваем, как скоростные характеристики (а когда патч выйдет официально, то на нем будут протестированы все наши 35-37 карт), так и качественные (все огрехи, если таковые будут, будут обязательно отмечены в этом разделе).

Платы



ATI RADEON X800 XT NVIDIA GeForce 6800 Ultra


Напомню, то обе карты имеют по 256 мегабайт памяти GDDR3 со временем выборки 1.6ns, при этом у NV40 частота по памяти — 550 (1100) МГц, а у R420 — 575 (1150) МГц. Частоты работы чипов: NV40 — 400 и 450 МГц, R420 — 525 МГц. Оба GPU содержат по 16 пиксельных и 6 вершинных конвейеров. NV40 поддерживает еще версию шейдеров 3.0, а R420 — собственную технология сжатия карт нормалей — 3Dc. Вот кратко и все.

Установка и драйверы

Конфигурации тестовых стендов:

  • Компьютер на базе Athlon 64 3200+:
    • процессор AMD Athlon 64 3200+ (L2=1024K);
    • системная плата ASUS K8V SE Deluxe на чипсете VIA K8T800;
    • оперативная память 1 GB DDR SDRAM PC3200;
    • жесткий диск Seagate Barracuda 7200.7 80GB SATA.
  • операционная система Windows XP SP2beta(!); DirectX 9.0c;
  • мониторы ViewSonic P810 (21") и Mitsubishi Diamond Pro 2070sb (21").
  • драйверы ATI версии 6.458 (CATALYST 4.7beta); NVIDIA версии 61.45..

VSync отключен

Еще раз отмечу, что для тестирования использовался Microsoft Service Pack 2 (RC0) for WinXP, куда уже встроена новая версия DX 9.0c. Это требуется для реализации шейдеров 3.0.

Результаты тестов

Результаты тестов: тестирование на базе сторонних демо-скриптов

В качестве инструментария мы использовали:

  • FarCry 1.2 (Crytek/UbiSoft), DirectX 9.0, мультитекстурирование, (запуск игры с опцией -DEVMODE), настройки тестирования все Very High.

Я замечу, что в комплект патча входят и заранее записанные демо-скрипты, которые можно воспроизводить или через консоль, или при помощи командной строки. Вот пример BAT-файла:

echo Running Research…
Bin32\FarCry.exe -DEVMODE "#demo_num_runs=1" "#demo_quit=1" "map research" "demo research" "r_sm30path 1"
echo Running Regulator…
Bin32\FarCry.exe -DEVMODE "#demo_num_runs=1" "#demo_quit=1" "map regulator" "demo regulator" "r_sm30path 1"
echo Running Training…
Bin32\FarCry.exe -DEVMODE "#demo_num_runs=1" "#demo_quit=1" "map training" "demo training" "r_sm30path 1"
echo Running Volcano…
Bin32\FarCry.exe -DEVMODE "#demo_num_runs=1" "#demo_quit=1" "map volcano" "demo volcano" "r_sm30path 1"

Можно с помощью переменных #r_Width=1600 и #r_Height=1200 добавлять в командную строку задание разрешения. Очевидно, что использование или не использование шейдеров 3.0 регулируется переменной r_sm30path. Присвоение ей значения «1» включает SM 3.0, «0» — выключает, возвращая рендеринг к использованию максимум 2.0.

Данный батник запускает заранее записанные демо-скрипты на разных уровнях. Мы о них поговорим позже. В этом разделе использовались записанные специально для тестирования демки, также на ряде уровней, чтобы показать разнообразие результатов и посмотреть на ситуацию более объективно. Разумеется, читатель должен понимать, что шейдеры 3.0 не являются полной заменой 2.0, они в данном случае осуществляют свою оптимизационную роль. В частности, одна из главных составляющих — возможность динамического ветвления. Всем известно, что шейдер — это кусок кода, программа на своем языке типа ассемблера. Разработчик должен делать шейдер универсальным, чтобы он работал на разных ускорителях, и чтобы они его понимали. В процессе выполнения шейдера может случиться такое, что по каким-либо тут же появившимся переменным его можно не доделывать, не выполнять лишнюю работу. Или же оборвать его и перейти на другой. И т.п. То есть, произвести операцию перехода, ветвления, не зная о ней заранее. Такой способностью обладают только шейдеры 3.0. Вопрос: именно из-за этой особенности программисты Crytek смогли оптимизировать работу NV4x в ряде сцен? Давайте посмотрим.

Вначале прогоним demo01, которая давно используется в наших тестах (уровень Research).







Очевидно, что на открытых пространствах этого уровня шейдеров 3.0 почти нет, и приросты еле-еле видны. И на мощных режимах с АА и АФ по-прежнему лидирует X800 XT.

Давайте прогоним демо по закрытому участку, где пещера и внутри генератор, для реалистичного отображения его поверхности, а также пола и ряда других объектов использовались сложные 2.0 шейдеры. А теперь и 3.0.







Да, приросты очень ощутимы. Однако снова в тяжелых режимах лидера в лице X800 XT, детище NVIDIA так и не догнало.

Эти примеры нам наглядно показали, что не стоит ждать очень большого ускорения игры на NV40 в целом. Ибо применение 3.0 пока очень выборочно.

Давайте посмотрим на скорости на других уровнях.

Control









Regulator









Volcano









И итоговая таблица сравнений:



Очевидно, что использование 3.0 принесло самые большие дивиденды в тяжелых режимах с АА и АФ. Однако X800 XT не покорился (кроме случаев без АА и АФ). Расклад сил остался таким же, что был и раньше. Но все же, если учесть, что внедрение 3.0 производилось в течение 2 недель двумя программистами, это очень примечательно.

Результаты тестов: тестирование на базе встроенных в патч демо-скриптов

Для сравнения я прогнал и те демки, что были в патче изначально и рекомендовались NVIDIA для использования в целях бенчмарка. Я не стану приводить все цифры, а лишь таблицу сравнений, ибо именно она очень показательна:



Конечно, обратили внимание на то, сколь разительно отличаются эти данные от предыдущих. Да, скрипты осуществляют брожение только рядом с теми объектами, относительно которых применена оптимизация через SM 3.0. И приросты по скорости очень значительны! И X800 XT уже не лидер в этих местах сцен. Таким образом, можно сделать вывод, что если бы игра сплошь и рядом использовала 2.0, и можно было бы везде применить подобные оптимизации через 3.0 (разумеется, с положительным результатом), то приросты в целом были бы очень велики, и тогда X800 XT пришлось бы точно отойти на второе место по скорости в FarCry.

Результаты тестов: качество

Как я уже сказал ранее, внедрение 3.0 на данном этапе не преследует каких-то новаций в плане графики (ее улучшения, добавления эффектов). Включение HDR у NV40 и введение через это новых визуальных явлений будет в следующем патче 1.3. Мы уже сейчас можем посмотреть на то, как примерно это будет выглядеть (источник: форум на NVNews.net):

       

       

Справедливости ради надо отметить, что в патче 1.3 будет реализована и технология 3Dc, правда, пока неизвестно, что это даст с точки зрения визуального восприятия.

А пока мы можем радостно отметить то, что проблема с плохим качеством у NVIDIA в FarCry (на ряде сцен, где была видна квадратичность при переменном освещении), в 1.2 решена даже без применения 3.0.

RADEON X800 XT GeForce 6800 Ultra 2.0 GeForce 6800 Ultra 3.0


Выводы

Итак, казалось бы, исследование нам показало, что шейдеры 3.0 не пустой звук, что они реально работают. Надо делать скидку, конечно, на то, что использовались бета-версии ПО для показа, все может еще совершенствоваться.

В данной игре 3.0 применялось там, где очень сильная нагрузка на ускоритель. И это помогло поднять минимальные значения производительности у NV40. Что касается средней скорости, то нельзя считать, что 6800 Ultra добился победы над своим соперником, поскольку в тяжелых режимах в целом у X800 XT производительность выше. Мы же не можем брать за полновесные результаты по игре те цифры, что получены просто при облете некоторых объектов.

Однако те показатели тоже не бесполезны. Результаты по демкам, входящим в патч, показывают, что реально можно получить, если везде внедрить усовершенствование (разумеется, если будут приросты по скорости, получить падения также можно, о чем наглядно показали наши тесты).

Когда выйдет патч 1.3, то мы еще посмотрим и качественные составляющие, то бишь визуальные эффекты. А сейчас еще раз отметим, что у NV40 с качеством в FarCry проблемы решены.

Остался вопрос: точно ли виновны 3.0 в этих приростах, или что-то другое?. Давайте посмотрим на исследования Алексея Баркового.

ДОБАВЛЕНИЕ от Алексея Баркового:

За счет чего увеличилась скорость?

Получив на встроенных в патч демо-скриптах приросты скорости, превышающие 20%, было решено более детально исследовать за счет чего это достигается. Согласно материалам NVIDIA, а также ответам Cevat Yerli из CryTek, предоставленным им в интервью сайту FiringSquad, в патче 1.2 на видеокартах, поддерживающих шейдеры третьей версии, используется улучшенная реализация освещения объектов, а также технология дублирования геометрии (geometry instancing).

Новая версия FarCry может за один проход применять к объекту освещение максимум до 4 источников света. Для сравнения на картах, поддерживающих только шейдеры 2.0, на каждый источник света требуется по одному проходу рендеринга. Такое улучшение в движке игры одновременно уменьшает требования к пропускной способности памяти, так и к производительности блока вершинных шейдеров. Например, в демке Research (в которой достигается максимальный прирост — см. выше) при активации шейдеров 3.0 количество обрабатываемых треугольников уменьшается на 40% (что было доказано нашими тестами).

Следующее усовершенствование — дублирование геометрии (geometry instancing) — в данный момент используется в основном при отрисовке открытых пространств. Эта технология позволяет нарисовать множество одинаковых объектов за один вызов DirectX вместо того, чтобы отрисовывать каждый из объектов по отдельности. Geometry instancing позволяет уменьшить использование CPU (как самим DirectX, так и драйвером видеокарты), а также повысить эффективность использования GPU (уменьшается время простоя конвейера между отрисовками разных объектов). В FarCry geometry instancing используется при отрисовке деревьев, травы и другой растительности.

Как оказалось обоими усовершенствования можно управлять по отдельности. В дополнение к ключу «r_sm30path», используемому в командных файлах, предоставленных NVIDIA, существуют также ключи «r_noPS30» и «r_GeomInstancing». Как можно понять из их названия r_noPS30 — отключает использование пиксельных шейдеров 3.0, а r_GeomInstancing — активирует технологию дублирования геометрии (geometry instancing).

Давайте посмотрим на результаты показываемые GeForce 6800 Ultra при активации усовершенствований по отдельности. На диаграмме сверху вниз показана производительность при: полной активации новых технологий третьих шейдеров, использовании только пиксельных шейдеров 3.0, использовании только дублирования геометрии, использовании игрой «старой» технологии рендеринга с поддержкой шейдеров не выше 2.0



Диаграмма показывает, что использование geometry instancing не дает FarCry никакого выигрыша, а основную прибавку в скорости приносит новая реализация освещения в один проход с использованием пиксельных шейдеров 3.0. Интересным моментом является то, что скорость при использовании ключа «r_noPS30», хоть и отличается от скорости при активации ключа «r_sm30path», но всегда меньше последней.

Итак, максимальный прирост дает использование новой реализации освещения в игре. Взглянем: какие пиксельные шейдеры использует игра. Для этого при помощи утилиты 3DAnalyzer были сохранены все шейдеры, используемые игрой на GeForce 6800 при прогоне демки Research и активированном режиме r_sm30path. Демка была выбрана как дающая максимальный выигрыш при активации данного режима рендеринга. Общий листинг пиксельных шейдеров третьей версии содержит почти 2 тысячи строк. Но к моему удивлению в полученных шейдерах при их поверхностном изучении не было обнаружено использование ни одной отличительной особенности пиксельных шейдеров 3.0: ни динамического или статического ветвления, ни динамических/статических циклов и т.д. Также, похоже, что все шейдеры, используемые в демке, имеют размер кода, удовлетворяющий спецификации пиксельных шейдеров 2.0 (и гарантировано удовлетворяют ограничениям шейдеров 2.0a и 2.0b).

Откуда же появляются заявления об использовании ветвлений в шейдерах — цитирую «more lighting can be accomplished with flow control and branching so we can encode for example 4 lights in one pass»? Единственный обнаруженный мною участок исходного кода шейдеров HLSL/Cg, который при компиляции может использовать особенности шейдеров 3.0 приведен ниже:

   FLOAT fAttenFunction = 4.f/16.f;
   for (int i=0; i<_NUM_LIGHTS; i++)
   {
     // Calculate attenuation
     FLOAT atten = 1;
     if (aLType[i] != 0)
     {
       FLOAT dist = length(IN.lightVec[i].xyz) * AttenInfo[i];
       atten = tex2D(attenMap, float2(dist, fAttenFunction));
     }


    …………


    FLOAT3 dif = decalColor.xyz * NdotL * ( FLOAT3 )Diffuse[i].xyz * atten * filterColor.xyz;
    dif.xyz = HDREncode(dif.xyz);
    vFinalDif += dif.xyz;
    }

   Данный код использует цикл при расчете освещенности объекта несколькими источниками света. Их количество задается переменной _NUM_LIGHTS. Но особенностью движка игры FarCry является предварительная компиляция в байт-код всех возможных пертурбаций шейдеров. Поэтому при компиляции этого шейдера _NUM_LIGHTS является константой и статическое ветвление в зависимости от количества источников света не используется. В итоге игра по необходимости применяет множество различных шейдеров, скомпилированных из нескольких «мега-шейдеров». И хотя возможность использования особенностей шейдеров 3.0 присутствует в FarCry 1.2, она остается неиспользованной.

Заключение

На примере FarCry 1.2 нам было продемонстрировано, что шейдеры 3.0 существуют и работают, а также что при наличии гибкого движка многие игры смогут реализовать у себя их поддержку. Полученные результаты несколько неоднозначны: с одной стороны нам было продемонстрировано увеличение скорости в некоторых местах, с другой — похоже что изменение принесшие значительное увеличение скорости рендеринга (освещение несколькими источниками света в один проход) можно было реализовать при помощи шейдеров 2.x (а возможно и 2.0). Поэтому хотелось бы пожелать разработчикам не только продвигать новейшие технологии, но и не забывать оптимизировать работу своей игры с существующими видеокартами. Однако все приросты по скорости, полученные в тестах выше, практически за счет уменьшения числа проходов при расчете освещения. То есть, в текущей реализации в этом нет заслуги именно специфических особенностей шейдеров 3.0.

А впереди нас ждет патч 1.3, в котором обещана поддержка рендеринга с использованием HDR эффектов, который из-за требований предъявляемых игрой — поддержка возможности смешения в буфере кадра содержащего цвета в формате с плавающей точкой — будет возможен только на GeForce 6800. Будем надеяться, что следующий патч будет более эффективно использовать новые возможности, предоставляемые шейдерами третьей версии.

Будет ли технология шейдеров 3.0 активно внедряться и использоваться? Мое мнение — да, будет, но не быстро. Жаль, что ныне снова ATI и NVIDIA разошлись по технологическим путям, ведь только-только шейдеры 2.0 их сблизили, и разработчики вздохнули свободнее. Так снова разошлись в море корабли. Но мы будем следить за дальнейшим развитием 3Dc, посмотрим, какие дивиденды принесет эта технология. А пока можно завершить материал пожеланием не останавливаться на этом, и показать 3.0 более ярко и сильно (сегодняшняя демонстрация это в большей части все же трюк разработчиков.) Ждем патча 1.3, который должен продемонстрировать еще одну скрытую пока возможность NV40. Может быть, программисты и не остановятся только на качестве, но и дальше продолжат внедрять 3.0 с положительным результатом, тогда приросты по скорости будут более существенными в целом по игре.




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

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

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

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