Тестирование FarCry версии 1.3


СОДЕРЖАНИЕ

  1. Введение
  2. Качество рендеринга
  3. Особенности видеокарт
  4. Конфигурации стендов
  5. Результаты тестов: Pier, demo01
  6. Результаты тестов: Regulator, demo01
  7. Результаты тестов: Research, demo01
  8. Результаты тестов: Research, demo02
  9. Результаты тестов: Research, 3DNews demo
  10. Выводы


В конце лета появилась долгожданная геймерами игра DOOM III, после чего весенний хит этого года FarCry стал понемногу отходить на второй план, хотя выходил в свет (правда, всего на пару дней) патч 1.2, который несколько поднял интерес к этой игре, поскольку внедренные в движок новые технологии позволили новейшим представителям High-End класса из видеокарт показать свои возможности в плане шейдеров 2.0b и 3.0.

К сожалению, эта версия игры содержала ряд ошибок, и потому патч был отозван. Хотя, надо сказать, что мы в процессе эксплуатации 1.2 не столкнулись с какими-то дефектами, потому использовали версию 1.2 в наших тестах. Еще в этой версии были реализованы возможности шейдеров 2.0b и 3.0 в части ускорения работы графики. Суть нововведений сводилась к тому, что на сложно-освещенных объектах, особенно при формировании рельефных изображений, по старой версии 1.1 (или 1.0), освещение рассчитывалось за несколько проходов, что тратило весьма сильно ресурсы ускорителей. Внедрение шейдеров 2.0b и 3.0 дало возможность все эти сложные расчеты разместить в одном очень длинном шейдере, который умещается только в спецификации 2.0b и 3.0.

Поэтому для X800-серии и GeForce 6800-серии достаточно уже одного прохода для выполнения этой же операции, что снимает накладные расходы, и скорость вырастает. Наши тесты показали, что эффективность работы 2.0b и 3.0 в этом плане идентичная, поэтому оба семейства получили равнозначные приросты, и в целом X800XT в тяжелых режимах с АА и АФ снова оказался в лидерах. В первой части нашего анализа мы изучили, что дают шейдеры 3.0, а второй — 2.0b.

Кстати, все подробности о том, чем в целом обладают новые продукты от ATI/NVIDIA (скажем, они уже формально не совсем новые, более полугода прошло с момента анонсов, но пока ничего нового нет, и потому X800/GF6800 по-прежнему новые) мы сможете почерпнуть из наших статей.

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

Патч 1.3 принес нам улучшенную и отлаженную поддержку прежних технологий, а также компрессии карт нормалей и HDR.

Более подробно о том, что собой представляют новые технологии, мы уже писали в наших базовых материалах по X800 и GF6800. Я лишь кратко напомню.

Вначале о HDR. Всем хорошо известно, что система изображения на мониторе, называемая RGB, представляет всевозможные цвета как произвольное сочетание из трех компонентов (красного, зеленого и синего). Традиционно, для современных видеокарт и мониторов каждый компонент имеет значение от 0 до 255, поэтому итоговый цвет может меняться от 0*0*0 (черный) до 255*255*255 (белый). То есть по 256 значений, что дает удобство в оперировании этими величинами, на каждый «цвет» требуется ровно 1 байт (или 8 бит, 2^8). Кстати, именно поэтому и появилось выражение 24-х битный цвет, поскольку три компонента по 8 бит дают в сумме 24 бита всевозможных сочетаний. Или 16 с лишним миллионов оттенков. Почему столько? Произведение 256*256*256 = 16.7 млн.

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

Если для демонстрации окончательных изображений такое многообразие цветов можно считать приемлемым, то для расчета и построения картинки во многих случаях этого представления (24 или 32 бита) недостаточно. Например, накапливаются ошибки вычислений, по ходу построения картинки теряются детали изображения в слишком темных или слишком светлых участках. Многие любят брать в качестве примера блики солнечных лучей. Да, это самый наглядный случай, когда мы можем видеть, что даже 256*256*256 недостаточно для того, чтобы вычислить и отобразить на экране яркий солнечный свет. Читатели, наверное, помнят эффектные режиссерские находки, например, когда показывается лес, залитый солнцем, или при закате. Вот примеры, если брать за цель воспроизведение рендерингом реальной картины, где во время построения изображения уже будет не хватать обычного RGB с точностью 8 бит на компоненту:

       

       

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

Технология HDR (high dynamic-range) базируется на Industrial Light + Magic standard OpenEXR. По сути, это сквозная точность выборки, обработки и хранения результатов с 64-битной точностью (4 компоненты, RGB и прозрачность, по 16 бит, в плавающем формате данных FP16). Причем такая точность доступна на всех стадиях построения изображения, фильтрации и блендинга. Итак, базовая суть в том, что на каждый компонент выделяется уже не 8 бит, а 16. И потому 16+16+16 (+16 на альфа-канал) = 64.

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

Команда из Crytek попробовала реализовать этот инструмент в игре. Вводится он в действие переменной r_hdrrendering.

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

GeForce 6800 Ultra (r_hddrrendering = 1, HDR enabled, SM3.0, NormalCompression disabled) GeForce 6800 Ultra (r_hddrrendering = 0, HDR disabled, SM3.0, NormalCompression disabled) RADEON X800 XT PE (SM2.0b, 3Dc disabled)


Как мы видим, где-то такая степень HDR очень даже хороша, а где-то все засвечено. Потому и надо регулировать под свои нужды и свои глаза. Но в целом очень приятная вещь, и, что самое главное, и чего не показать на скриншотах, — эффекты освещенности меняются динамически! Что очень похоже на реальность. То есть, когда поднимаем глаза к небу, сразу яркий свет застилает глаза, и только потом привыкаешь, и видишь уже и облака, и другие объекты (если они есть в небе). Так и в игре. Что произвело на меня очень сильное впечатление! Конечно, надо понимать, что более глубокие расчеты бесплатными не бывают, и производительностью пожертвовать придется. Как много? — Ниже покажем.

К сожалению, в этом плане разработки от ATI ничем таким похвалиться пока не могут. Однако надо сказать, что в данной реализации HDR в FarCry и у NVIDIA-карт есть одно очень существенное ограничение: эта технология несовместима с АА (повторяю, что в рамках данной игры!), поэтому или HDR, или использование АА. Последний будет принудительно выключен игрой, если активизировать первый.

Перейдем к разделу качества графики в новой версии игры, заодно и рассмотрим следующую новацию, внедренную в 1.3 — компрессию карт нормалей.

Качество рендеринга

Вначале покажем таблицу со скриншотами, выполненными при разных установках.

GeForce 6800 Ultra (HDR disabled, SM3.0, r_TexNorCompression=0 NormalCompression disabled) GeForce 6800 Ultra (HDR disabled, SM3.0, r_TexNorCompression=1 NormalCompression Enabled) GeForce 6800 Ultra (HDR enabled, SM3.0, r_TexNorCompression=1 NormalCompression Enabled) RADEON X800 XT PE (SM2.0b, r_TexNorCompression=0 3Dc disabled) RADEON X800 XT PE (SM2.0b, r_TexNorCompression=1 3Dc enabled)


Итак, что такое сжатие или компрессия карт нормалей? Понимающие в рендеринге читатели знают, что нормали — это вектора, характеризующие степень рельефа в том или ином месте. Например, для отображения, допустим, кирпичной стены с выемками в местах стыков кирпичей, нужно создать вектор, направление которого будет показывать — в какую сторону делать выпуклость (то есть рассчитать так освещение, чтобы создавалась иллюзия впадины или выпуклости), и размер — как глубоко делать выемку или выпуклость. Проще всего для ускорителя — иметь своеобразную карту таких векторов. То есть точная копия поверхности, где каждое значение цвета (как правило, в серой гамме: от белого, до черного) означает не цвет соответствующего пикселя, а в нем закодирована информация о нормали (векторе). Ускоритель, считывая эту карту, уже «понимает», где сделать какое эффект освещения, чтобы мы видели рельеф.

Понятно, что чем более тщательнее мы хотим отобразить неровную поверхность (а таких вообще-то в мире 99,9%), тем больше будет матрица нормалей, а, следовательно, карта будет занимать уже весьма большой объем. И ее надо обязательно загрузить в локальную память видеокарты! Никаких передач по AGP быть не может. Очевидно, что это все может как и отнять львиную долю видеопамяти, так и нагрузить ускоритель так, что он будет еле-еле «дышать». Напрашивается сравнение с огромными детализированными текстурами, которые можно через S3TC (DXTC) сжать, и потом использовать, на ходу распаковывая. Но всем известно, что бесплатно такого S3TC не дает, и некоторая потеря качества имеется. Что совершенно недопустимо при сжатии карт нормалей, где каждая точка и ее цвет очень важны для точной передачи информации о рельефе.

Справедливости ради надо сказать, что и при существующей методике DXTC есть способ компрессии таких карт без потерь, но мы сейчас не будем в это дело углубляться. Скажу лишь, что под лозунгом сжатия карт нормалей без потерь вышла в свет технология ATI 3Dc, которая предусматривает компрессию подобных «картинок» (массивов, матриц) до 4 к 1. Наиболее близок к этому методу DXTC5.

При помощи переменной r_TexNorCompression можно включать и выключать данную технологию. Понятно, что ускорители семейства GeForce 6800 работают с ней через DXTC5, а X800 — через 3Dc. Хотя, как уже отмечалось ранее, это почти одно и то же.

Думаю, что прекрасно видно: если что-то включение компрессии нормалей и дает, то на качестве это никак не отражается. Посмотрим ниже, что даст это в плане скорости.

Я напомню, что включение шейдеров 2.0b и 3.0 в плане качества ничего не дает, поэтому нет смысла даже сравнивать картинки. А еще пару интересных моментов стОит рассмотреть. Во-первых, это Geometry Instancing, то бишь дублирование геометрии. Весьма сложно объяснить, что это такое, но попробую более наглядно. Если упростить понятия, то в игре может быть много объектов, имеющих одинаковую геометрию: и рядом с нами, и в глубине сцены. Например, трава, деревья. За один вызов DX формируется один объект (по вершинам, освещенности и т.д.). А при использовании GI можно сразу за раз посчитать геометрию всех подобных объектов, и, кстати, вовсе не заменять далеко расположенные объекты спрайтами. Это позволит несколько экономить ресурсы в первом случае, и повысить реалистичность сцены в целом, которая весьма страдает, когда при приближении к объектам они превращаются из спрайтов в объемные и уже отрендеренные фигуры.

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

Во-вторых, это возможность увеличения числа объектов, заданных для отображения вдалеке. Для этого используется переменная e_vegetaion_sprites_ratio, которая по умолчанию равна 1. Если ее выставить на максимально возможную величину 100, то получим вот что.

GeForce 6800 Ultra (SM3.0, ratio 1) GeForce 6800 Ultra (SM3.0, ratio 100) RADEON X800 XT PE (SM2.0b, ratio 1) RADEON X800 XT PE (SM2.0b, ratio 100)


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

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

[ Следующая часть (2) ]





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

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

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

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

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