Графические технологии в играх: Tomb Raider: Legend



Введение в обзоры графических технологий в играх
Современная терминология 3D графики
Обзор игры на iXBT.com

Разработчик: Crystal Dynamics
Издатель: Eidos Interactive
Дата выхода: Апрель 2006 г.
Графический API: Direct3D 9

Техническая характеристика

Tomb Raider: Legend — это долгожданное продолжение, уже седьмая игра под названием Tomb Raider и первая игра серии, разработанная не британской Core Design, а в Crystal Dynamics. Игра значительно подняла авторитет серии после уронившей его Angel Of Darkness, игровой процесс в ней стал больше похож на то, что мы видели в первых играх серии. Но что действительно изменилось в лучшую сторону, так это графика, которая стала действительно современной.

Игровой платформе ПК пошло на пользу, что игра, в том числе разрабатывалась одновременно и для игровой консоли Microsoft Xbox 360. В ПК версии присутствует возможность включения так называемого режима «Next generation content», являющегося, по сути, совсем иной игрой с точки зрения графики. Версия «nextgen» для ПК и версия Xbox 360 значительно более продвинуты технологически по сравнению с остальными (игра вышла и на PlayStation 2 и на первом Xbox), качество ресурсов игры очень неплохое, применяется множество современных 3D технологий. Сразу оговорюсь, что в статье речь пойдет, прежде всего, о вышеуказанном режиме.

О графическом движке игры сказать особо нечего, крайне мало информации доступно о таких проприетарных движках, которые используются только внутри компаний, их разработавших. Можно лишь сказать, что по сравнению с предыдущим графическим движком из Angel Of Darkness, используемый в Tomb Raider: Legend является значительно более совершенным технологически.

Движком игры применяются пиксельные шейдеры версий 1.1, 2.0 и 3.0. В основном именно последних версий. Шейдеры 2.0 средней сложности, до 70 инструкций в программе, а пиксельные программы версии 3.0 значительно сложнее, есть экземпляры с более чем 200 инструкциями! Вероятно, используется снижение количества проходов для расчета освещения от нескольких источников света. Также, пиксельные шейдеры в игре служат для фильтрации и наложения динамических карт теней, наложения карт нормалей, используются в алгоритмах постфильтрации, включая фильтры bloom, blur, depth of field, отражения и преломления и некоторые другие.

В игре используются шейдерные программы, написанные на языке высокого уровня HLSL, все они заранее откомпилированы и хранятся в исполнимом файле. На тестовой системе с видеокартой, поддерживающей Shader Model 3.0, по умолчанию применяются вершинные шейдеры версий 1.1, 2.0 и 3.0, и пиксельные шейдеры версий 1.1, 2.0 и 3.0, причем большинство из программ именно версий 3.0, более сложных и длинных. Похоже, что некоторые их шейдеров версии 3.0 являются переписанными 2.0 для улучшения производительности на современных видеокартах за счет снижения необходимого количества проходов рендеринга. С другой стороны, большое количество сложных шейдеров явно говорит о том, что игра предназначена для видеокарт высокого уровня из серий GeForce 7 и RADEON X1000. Для владельцев слабых видеокарт есть обычный режим, на минимальных настройках с отключенным «Next generation content» используются только вершинные шейдеры версии 1.1, которые могут исполняться и на центральном процессоре. Как и в подавляющем большинстве игр, во всех пиксельных шейдерах версий 2.0 и 3.0 сделаны оптимизации в виде расчетов с пониженной точностью (partial precision), которые улучшают производительность на всех видеокартах NVIDIA, начиная с серии NVIDIA GeForce FX.

Обрабатываемый игрой объем геометрии значительно выше уровня даже самых современных игр, количество полигонов в кадре при максимальных настройках и включенном режиме «nextgen» — от 20000 до 2000000, на отдельных уровнях до четырех миллионов обрабатываемых треугольников в кадре! Немудрено, что она явно тормозит при этом… Сложность геометрии сильно зависит от уровня игры, есть примеры с 200000 треугольников в кадре, а есть более сложные (большие открытые пространства, в основном), в которых до 500000-600000 полигонов в среднем кадре. Среднее количество обрабатываемых треугольников в кадре по всей игре на максимальных настройках около 370000-400000. Цифра значительно снижается при выключении режима «nextgen» — получаемое количество треугольников от 5000 до 200000, на отдельных уровнях до 300000. В среднем около 60000 полигонов на кадр, есть уровни с 40000, а есть с 100000 полигонами.

При этом игра не является особо требовательной к объему локальной видеопамяти. Даже в случае включенного «Next generation content» в тестовом разрешении 1024x768, с включенным мультисэмплингом и максимальными настройками, игра использует от 100 до 200 мегабайт видеопамяти, в зависимости от уровня, а среднее значение составляет всего 140-150 Мб. Для 256-мегабайтных все более чем хорошо, и даже 128-мегабайтных видеокарт в некоторых случаях хватит, но, скорее всего, будет недоставать их производительности. Придется отключать режим «nextgen», при этом будет использоваться лишь до 100 мегабайт видеопамяти. А на минимальных настройках и вовсе — до 50 Мб, так что даже владельцы старых видеокарт смогут поиграть в игру.

При помощи утилиты профилирования PIX, входящей в состав Microsoft DirectX 9 SDK, и плагина из комплекта NVIDIA PerfKit 2, мы собрали интересные цифры. Статистика, собранная на нескольких уровнях игры, показывает, что при максимальных настройках в режиме «nextgen» и разрешении 1024x768 видеочип GeForce 7800 GTX простаивает в среднем (по счетчику gpu_idle) около 25% времени, но все очень сильно зависит от уровня игры, есть случаи с всего лишь 5% простоя, а есть — с 40%. Предполагаем приемлемую сложность пиксельных шейдеров, среднее использование блоков пиксельных шейдеров (счетчик pixel_shader_busy) — 35-40%, в зависимости от уровня, блоков вершинных шейдеров (счетчик vertex_shader_busy) — 6-8%. Значение pixel_shader_busy очень сильно зависит от уровня игры, есть уровни с 25%, а есть — с 50%. С отключенным режимом «nextgen» картина абсолютно иная, GeForce 7800 GTX простаивает (gpu_idle) до 50% времени, есть уровни с 15%. Среднее использование блоков пиксельных шейдеров (pixel_shader_busy) — всего лишь 10-20%, в зависимости от уровня, блоков вершинных шейдеров (счетчик vertex_shader_busy) — 2-3%. Налицо явный недостаток полигональной сложности сцен и их попиксельной обработки.

Средний процент времени ожидания блоками пиксельных шейдеров выборки данных из текстур (счетчик shader_waits_for_texture) — 10-12%, а ожидание окончания операций записи во фреймбуфер (shader_waits_for_rop) — 8-10%. Это говорит о балансе математической «тяжести» программ с количеством текстурных выборок, а также о незначительной потере времени на операциях растеризации. Большая нагрузка ложится на пиксельные шейдеры. При выключенном «nextgen» цифры меняются: shader_waits_for_texture — 15-30%, shader_waits_for_rop — 25-35%, что явно показывает упор в операции с фреймбуфером и текстурирование. Для большинства средних игровых систем лучше всего подошел бы средний режим между «nextgen» и обычным — так был бы достигнутым оптимальный баланс сложности пиксельной и вершинной обработки на текущий момент.

Традиционно предлагаем исследование влияния некоторых настроек игры на средние показатели счетчиков производительности NVIDIA. Данные нескольких опытов на первом уровне в Bolivia приведены в следующей таблице:

Счетчик Default FSAA 4x AF off Post FX off Nextgen off Shadows off
gpu_idle, % 26.9 16.6 31.3 29.2 50.6 28.6
vertex_shader_busy, % 6.9 6.5 7.0 6.9 1.5 5.6
pixel_shader_busy, % 39.8 39.4 40.0 39.1 16.1 40.2
triangle count, polys 381736 385143 377411 341270 39998 234972
D3D vidmem/agpmem, Mb 114/7 138/7 99/7 111/5 47/6 111/6
shader_waits_for_texture, % 6.9 11.0 2.6 6.2 10.9 8.2
shader_waits_for_rop, % 2.5 12.9 2.6 1.7 7.1 1.8

Рассмотрим счетчики по порядку. В значениях gpu_idle нет ничего неожиданного, загрузка видеочипа возрастает в режиме с включенным антиалиасингом и снижается в режиме с выключенной анизотропной фильтрацией (в игре нельзя управлять ее уровнем, но можно из настроек видеокарты). Почти в два раза меньше загружен работой видеочип в отключенном режиме «nextgen», отключенные тени и постобработка тоже влияют, но не так сильно. На значение vertex_shader_busy рассматриваемые нами настройки значительного влияния не оказывают, кроме выключенных теней, когда нагрузка на видеочип снижается. Особенно сильно влияет выключенный «nextgen» режим — так как количество и сложность геометрических расчетов уменьшается, то и вершинные блоки работают в разы меньше. А значение pixel_shader_busy отличается только для отключенного «nextgen», ведь нагрузка на пиксельные блоки при этом также сильно снижается. Подтверждает вышесказанное про vertex_shader_busy счетчик количества рассчитанных в среднем кадре полигонов — их значительно меньше в «обычном» режиме (разница почти на порядок!), немного меньше в режиме с отключенной постобработкой и в полтора раза меньше с отключенным рендерингом теней.

Значения счетчиков используемой локальной и системной видеопамяти «D3D vidmem» и «D3D agpmem» в целом соответствуют ожиданиям, включение антиалиасинга приводит к увеличению цифры на 24 мегабайта, непонятно только снижение показателя в случае отключения анизотропной фильтрации — ведь другие настройки оставались неизменными. Значения в режимах с отключенными постобработкой и тенями ожидаемо меньше, в обоих случаях не используются дополнительные внеэкранные буферы. Отключение режима «nextgen» приводит к уменьшению занятого объема видеопамяти более чем в два раза.

Рассмотрим еще два счетчика: shader_waits_for_texture и shader_waits_for_rop. Значение первого сильнее всего изменяется при отключении анизотропной фильтрации, ведь для нее требуются дополнительные текстурные выборки. Также заметно изменение в случаях антиалиасинга (не совсем понятно почему, то ли из-за увеличившегося количества выборок из буферов рендеринга, то ли еще из-за чего), а также в режиме отключенного «nextgen» и теней. В первом случае нагрузка на блоки пиксельных шейдеров снижается, а на текстурные возрастает из-за отсутствия сложных пиксельных шейдеров, а во втором доля выборок становится больше из-за снижения нагрузки на остальные блоки. Время ожидания записи данных во фреймбуфер больше всего отличается для режимов с антиалиасингом и с отключенным параметром «nextgen». Мультисэмплинг увеличивает процент использование блоков ROP, а отключение теней и постпроцессинга, наоборот, снижают нагрузку на них. В обычном режиме без улучшенного контента значение shader_waits_for_rop возрастает, что объясняется значительным упрощением пиксельной обработки.

Краткая история

Tomb Raider — всемирно известная игровая серия, а также серия комиксов и кинофильмов по приключениям британского археолога женского пола — Лары Крофт. Основной особенностью сериала, отличающей эти игры от других, была пышногр… харизматичная главная героиня. По сути, до появления оригинального Tomb Raider, образы красивых женщин в качестве главных героев использовали не так часто. Да еще таких харизматичных, как Лара. Более поздние попытки, вроде Blood Rayne, не получились хотя бы наполовину столь удачными, как Tomb Raider. С момента появления первой части в далеком 1996 году, Лара стала одной из главных икон индустрии видео- и компьютерных игр, она даже занесена в книгу рекордов Гиннеса как «Наиболее успешная героиня видеоигр». Лара была придумана дизайнером компании Core — Тоби Гардом (Toby Gard), все ее знают по двум большим… гм… пистолетам, коротким коричневым шортикам, светло-зеленому топу и длинной косичке. Впрочем, вид героини за ее десятилетнюю историю претерпевал как косметические изменения, так и технологические. Если в первой части было нечто несуразное, низкополигональное и пикселизированное (по нынешним меркам), то теперь она стала отдаленно похожей на живую девушку не только в воображении игроков — уже прогресс.

Сериал выходил на множестве игровых платформ: PC, Macintosh, Sony PlayStation, Sega Saturn, Sega Dreamcast, а последняя игра и на Microsoft Xbox и Xbox 360. Оригинальная Tomb Raider: Featuring Lara Croft вышла одновременно на Sony PlayStation, Sega Saturn и ПК в 1996 году. Игра была ярким представителем первых трехмерных игр с видом от третьего лица, она стала одной из наиболее популярных игр для PlayStation. Играм серии уже 10 лет, первая часть Tomb Raider вышла в 1996, вторая в 1997, третья в 1998, Tomb Raider: The Last Revelation — в 1999, Tomb Raider Chronicles в 2000, Tomb Raider: The Angel of Darkness в 2003 и Tomb Raider: Legend в 2006. Все игры издавались компанией Eidos Interactive, являющейся держателем прав на торговую марку Tomb Raider. Шесть игр серии разрабатывались в Core Design, а последняя — в Crystal Dynamics.

Tomb Raider: Legend — это первая игра сериала, разработанная не в британской Core Design, а другим разработчиком — Crystal Dynamics. В Core Design разрабатывались все предыдущие игры серии, но они были отстранены издателем от разработки продолжения серии после провала Tomb Raider: The Angel Of Darkness. Любопытно, что Тоби Гард (Toby Gard, создатель Лары), покинувший Core Design из-за разногласий с руководством компании после первой игры серии, также работал над Tomb Raider: Legend.

Core Design — британский разработчик видео- и компьютерных игр, ставший известным именно из-за популярной серии Tomb Raider. В 2003 году Eidos, которой до определенного времени принадлежала Core, передала разработку следующей части Tomb Raider после неудачной Tomb Raider: The Angel of Darkness, продавшейся значительно хуже, чем ожидалось. Core Design затем была продана, и естественно, что права на марку Tomb Raider остались у Eidos. Разработка следующей части была поручена компании Crystal Dynamics, также принадлежащей Eidos. Crystal Dynamics — это уже американский игровой разработчик, купленный Eidos Interactive в 1998 году, создавший несколько проектов для ПК и консолей, известный своими сериями Legacy of Kain и Gex. В этом году студия закончила разработку Tomb Raider: Legend, игра была выпущена в начале апреля 2006 года в версиях для ПК, Sony PlayStation 2, Microsoft Xbox и Xbox 360. Вполне вероятно, теперь именно этот разработчик будет ответственным за создание будущих игр известной серии.

В апреле 2005 года, за год до выхода игры, Eidos впервые сообщила подробности о своем проекте Tomb Raider: Legend. К тому времени он уже полтора года тайно разрабатывался в Crystal Dynamics под руководством Тоби Гарда, создателя оригинальной Tomb Raider. Все это время в Crystal Dynamics изучали достоинства и недостатки игр серии, разработчики использовали результаты исследований и прислушивались к пожеланиям поклонников. Они обещали оставить дух первых частей серии, со значительно улучшенной визуальной частью. Приключения Лары обещали стать живее и интереснее, что Eidos пыталась показать первыми скриншотами игры, появившимися тогда же — в начале апреля 2005 года.

   

Первые скриншоты показывали измененную модель Лары с действительно увеличившейся геометрической детализацией, а также «разнообразную» архитектуру уровней. Это сейчас мы уже можем сказать, что на них был показан только «обычный» режим, без нововведений в виде бампмаппинга, нормалмаппинга, попиксельного освещения и динамических теней. А в то время показанное на скриншотах казалось слишком простым даже для уровня первой половины 2005 года. Большее количество скриншотов и подробностей было обнародовано на официальном сайте игры, запущенном 12 апреля 2005 года, но скриншоты оставили все те же вопросы.

   

Более поздние скриншоты, появившиеся в августе 2005 года, показали динамические тени от персонажей и некоторые из видов постобработки, на скриншоте слева заметен эффект bloom. Технологически это явно оставалась мультиплатформенная версия для PS2, Xbox и «обычного» режима ПК — никаких следов попиксельных расчетов освещения не было видно. И только в феврале текущего года Eidos дала посмотреть на настоящую «nextgen» Лару, выложив в публичный доступ скриншоты с версии для Xbox 360:

   

На них уже видно и наложение карт нормалей (камни, пистолеты и модель Лары), и продвинутые шейдерные программы, такие как прозрачная водная поверхность с отражениями. Преломлений в воде пока не было показано, равно как и наложения динамических теней от всей геометрии при помощи shadow maps.

В конце марта была выпущена демонстрационная версия Tomb Raider: Legend для ПК, а в начале апреля — для Xbox 360. Демо-версия для ПК не содержала возможности включения «next generation content» (видимо, из-за объема дополнительного контента демо-версия получилась и так достаточно «тяжелой»). В релизе же, при включении этой настройки, графика улучшается с уровня обычной версии (для PlayStation 2 и Xbox) до идентичной Xbox 360 варианту.

В демо-версиях подтверждался хороший уровень геймплейной части, но технологические нововведения были доступны лишь владельцам консоли Xbox 360, хотя финальная ПК версия игры технологически не отличалась от нее. Мы уже тогда увидели некоторые особенности грядущей игры: применение карт нормалей для всех поверхностей, современные виды постобработки, использование динамических карт теней для всей геометрии уровня и довольно сложные 3D модели персонажей.

Особенности графики в игре

Серия Tomb Raider всегда отличалась современными 3D технологиями, достаточно вспомнить поддержку первых 3D ускорителей в оригинале и предыдущую, неудачную во всем, кроме графики, часть — The Angel Of Darkness. Предыдущая игра показала свое технологическое совершенство, в ней применялись новые тогда методы постобработки (depth of field), были неплохие динамические тени от персонажей с применением рендеринга в FP карты теней, применялись сложные пиксельные и вершинные шейдеры, в том числе весьма технологичный пиксельный шейдер версии 2.0 для визуализации поверхности воды, а также наложение карт нормалей на некоторых поверхностях.

Со времен The Angel Of Darkness технологический уровень 3D графики в Tomb Raider: Legend значительно улучшился. Хотя в игре отсутствуют некоторые модные современные технологии, такие, как parallax mapping и HDR рендеринг, в ней повсеместно применяются действительно сложные пиксельные и вершинные шейдеры версий 2.0 и 3.0. Используются и современные эффекты постобработки, причем, применяются они к месту, там, где это действительно требуется. Для поверхностей воды применяются очень сложные шейдеры с расчетом отражений и преломлений, с реальными волнами, хотя на пиксельном уровне, в отличие от F.E.A.R. Очень хотелось бы увидеть в игре parallax mapping, который давно применяется в лучших ПК и Xbox 360 проектах, но, к сожалению, он не нашел места в последней части Tomb Raider.

Нужно еще раз оговориться, что речь в статье идет только о режиме «Next generation content», только в нем используются все описанные эффекты и технологии. Именно в «nextgen» режиме Legend использует несколько новых технологий, ее отличают высокая полигональная сложность некоторых объектов, несколько интересных эффектов постфильтрации, материалы игры имеют по несколько слоев (diffuse, normal, specular), на всех поверхностях используется наложение карт нормалей. Игра содержит в основном открытые пространства среднего размера, также в ней есть и несколько indoor уровней.

Outdoor     Indoor

Судя по полученным цифрам геометрии в кадре, которые упомянуты в начале статьи, можно было бы предположить, что в игре все объекты и архитектура уровней содержит очень большое количество полигонов. Хотя в игре есть и несколько сложных моделей, это не совсем так, достаточную детализацию имеют только модели персонажей и некоторые объекты. Уровни бывают даже бедными на детали, что сразу привлекает внимание. В цифрах обрабатываемой в кадре геометрии и в серьезных тормозах больше всего виновата недостаточная оптимизация, игре не хватает алгоритмов уровня детализации, видимость объектов не проверяется, они рендерятся даже в том случае, если закрыты другими. Также на объем рассчитываемой геометрии сильно влияет включение динамических теней, которые не добавляют детализации самим объектам.

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

Geometry     Geometry

Для всех поверхностей (персонажей, моделей оружия и объектов игры) в режиме «nextgen» используется наложение карт нормалей, которые прибавляют мелких деталей к объектам. Разрешение карт нормалей высокое, почти везде применяются текстуры достаточного разрешения. В некоторых случаях, как на первом скриншоте из приведенных ниже, слишком задран параметр specular, что делает такие поверхности пластиковыми или мокрыми на вид, но это — обычная проблема многих современных игр.

Normal mapping     Normal mapping

Качество и разрешение базовых текстур и карт нормалей хорошее, посмотрите на модель карабина на следующем скриншоте — похвальная детализация даже мелких неровностей. Недостаток детализации иногда есть, но таких поверхностей в игре не так много. А артефакты DXT сжатия в игре проявляются во многих местах. Странно, что некоторые разработчики продолжают использовать устаревшие корявые компрессоры в составе DirectX SDK, ведь давно существуют более совершенные утилиты, сжимающие данные без подобных проблем.

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

Textures     Textures

Расчет теней в игре для «Next generation content» и обычного режима отличается. Хотя и там и там используются карты теней (shadow maps), в обычном режиме тень рассчитывается только для главного персонажа, а в режиме максимального качества, который нас интересует значительно больше, рендерятся динамические тени для всей геометрии уровня. Тени рассчитываются от всех источников освещения, в том числе от встроенного фонарика героини, но источники расставлены на уровнях так, чтобы не было большого их скопления, чаще всего рассчитываются тени от одного или двух, как максимум. Такое решение получило применение в играх с большими открытыми пространствами в последнее время, особенно в мультиплатформах с Xbox 360. Примеры таких игр: Need For Speed: Most Wanted, Ghost Recon: Advanced Warfighter и др.

Shadows     Shadows

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

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

Water     Water

Различные световые спецэффекты на базе систем полупрозрачных частиц в игре сделаны очень хорошо, взрывы получились мощными и красивыми. Вместе с продвинутой постобработкой они смотрятся весьма эффектно, хотя и не всегда реалистично. Впрочем, в подобных играх такая цель и не преследуется, главное — чтобы было впечатляюще и захватывающе красиво.

Effects     Effects

Уже в прошлой части игры были внедрены некоторые современные эффекты постобработки, такие, как depth of field (DOF). В этой части он тоже есть, более приятный для глаза и реалистичный. Также в игру добавили и модный сейчас фильтр bloom, дающий увеличение яркости на светлых участках изображения, перетекающие на соседние темные области. Но на этом список эффектов постфильтрации не ограничивается, в разные моменты игры встречаются другие эффекты: blur, noise, color correction и др.

Примеры фильтра bloom (дающего светлые ореолы вокруг ярких участков изображения):

Bloom     Bloom

Примеры постэффекта depth of field (размытие объектов в зависимости от их положения относительно фокуса камеры):

DOF     DOF

Примеры других типов постфильтрации (blur, noise, комплексные):

Postprocessing     Postprocessing


Postprocessing     Postprocessing

Как мы с вами увидели на скриншотах, технологичность 3D графики в игре находится на хорошем современном уровне. Тут есть и мягкие динамические тени от всей геометрии, и повсеместное наложение карт нормалей, и очень хорошие эффекты постобработки. Очень хотелось бы видеть в игре реализацию parallax mapping, ведь его простой алгоритм (без трассировки лучей для определения пересечений деталей поверхностей) довольно быстр и не привносит никаких особенных сложностей в его использовании. Хотя, в идеале можно было бы сделать и parallax occlusion mapping, такая технологичная игра от этого только выиграла бы.

Картам теней в игре не помешала бы дополнительная фильтрация для смягчения краев теней и устранения артефактов алиасинга. Также пошла бы на пользу возможность HDR рендеринга с применением FP16 буферов, что помогло бы и качеству постфильтрации. Еще, на мой взгляд, игре не хватает грамотного применения всех видов постобработки в роликах на движке. Применение в них таких постэффектов, как depth of field и motion blur, явно недостаточное. К качеству контента также есть некоторые претензии: текстуры и геометрию уровней можно и нужно было сделать более сложными, с лучшей детализацией. Конечно, только в случае изначальной разработки для мощных игровых систем. В случае рассматриваемой игры ее подвели другие игровые платформы, весьма ограниченные в ресурсах. Будем ждать времен, когда игры будут разрабатываться с учетом возможностей ПК и игровых консолей только так называемого следующего поколения.

Настройки качества графики в игре

Версия игры 1.0 очень требовательна к производительности игровой системы. Я не зря подчеркнул слово «очень», с включением параметра «Next generation content» игра притормаживает даже на системах SLI и CrossFire! Это говорит о недостаточной оптимизации, в первую очередь, потому что просадки FPS сразу говорят о плохо оптимизированном движке и недоработанном менеджменте ресурсов. На мощных системах при максимальных настройках среднее количество кадров вроде бы достаточно велико большую часть времени, но играть очень некомфортно из-за дерганий и притормаживаний, особенно заметных в начале миссии первые несколько минут. Частота кадров в такие моменты падает ниже 10-15 FPS, что явно не соотносится с хорошей играбельностью. Интересно, что через какое-то время пики вниз пропадают и частота кадров становится заметно стабильнее.

Нам удалось определить некоторые из проблем, вызывающих столь жуткие тормоза в режиме «Next generation content». Tomb Raider: Legend позволяет выбрать видеоадаптер из числа установленных, а при помощи соответствующего ключа в реестре можно выбрать референсный растеризатор DX SDK. Эти две возможности дали провести анализ производительности приложения в NVPerfHUD из набора NVPerfKit 2 без ведома разработчиков. Итак, что удалось обнаружить… Во-первых, похоже, что в игре абсолютно не используются алгоритмы уровня детализации (LOD), что вызывает излишне большую нагрузку на все части конвейера, а особенно — на установку вершин и расчеты вершинных шейдеров, так как рассчитывается куча геометрии, которую игрок даже не увидит. Во-вторых, не решен вопрос рендеринга только видимой геометрии, не используется определение видимости объектов, нет никаких оптимизаций по отсечению невидимой геометрии, порой рисуются настолько далекие и невидимые объекты, что просто диву даешься. Чтобы не быть голословным, приведу два скриншота с одного места, в обычном режиме и в wireframe:

   

Обратите внимание на число обрабатываемых треугольников, оно зашкалило за 3 млн. И это притом, что реально отображается почти голая стенка!!! Оно и понятно — все эти модели людей весьма сложны и пожирают вершинную производительность. Также в игре не замечено никакой оптимизации под особенности ПК, вероятно, все силы ушли на разработку Xbox 360 версии. Так, используется очень много мелких батчей (batch), с каждым вызовом DrawPrimitive отрисовываются мелкие куски геометрии по 100-500 треугольников, причем instancing не используется вообще. Количество вызовов DrawPrimitive в отдельных уровнях и сценах достигает 3000-4000 и даже более! Это в экстремальных условиях, но даже в среднем количество вызовов слишком велико. Понятное дело, что в таких условиях любая ПК система будет поставлена на колени. Основная нагрузка в игре ложится на блоки установки и расчета вершин, это хорошо прослеживается в анализе отрисовки конкретных кадров в NVPerfHUD.

Проблему пытались победить патчами, в версии 1.1 попытались улучшить производительность в режиме «Next generation content», но, похоже, что сделали это за счет снижения качества картинки (а может быть виноваты были недостаточно оптимизированные драйверы видеокарт). В версии 1.2 качество исправили, но производительность снизилась относительно 1.1, однако по сравнению с оригинальной версией она все-таки была чуть-чуть улучшена, с установленным патчем версии 1.2 режим «nextgen» меньше тормозит, но все же вызывает короткие притормаживания в местах подгрузки. Счетчик «Driver Time» в NVPerfHUD в это время показывает максимальное время, проведенное в драйвере (это работа менеджмента ресурсов и состояний, компиляция шейдеров и т.п.).

В разрешении 1024x768 с максимальными настройками среднюю частоту кадров выше 35-40 FPS обеспечивают лишь топовые видеокарты вроде GeForce 7800 GTX и RADEON X1800 XT и выше (но есть наиболее тяжелые для видеокарты уровни с меньшим средним FPS). Но минимальный FPS при этом может проседать до значений меньше 10! К слову — в обычном режиме с отключенным «nextgen» частота кадров в таких же условиях всегда превышает 100-150 FPS. Если понизить планку до 30 средних кадров в секунду, чего для такой игры может быть достаточно, на такую частоту кадров на максимальных настройках способны видеокарты, начиная с ATI RADEON X1800 XL и NVIDIA GeForce 7800 GT. На более слабых придется отключать пункт «nextgen content», который влияет на получаемый FPS весьма значительно, больше всех остальных настроек, вместе взятых.

Если требуемой плавности не наблюдается, нужно проверить получаемую частоту кадров. К сожалению, в игре нет никаких возможностей по тестированию производительности, а ведь Tomb Raider: The Angel Of Darkness долгое время была одним из наиболее востребованных 3D тестерами бенчмарков. Поэтому приходится прибегнуть к утилитам вроде FRAPS. Они, конечно, не дадут той точности, что встроенный бенчмарк, но позволят оценить получаемую производительность с достаточной для нас погрешностью. Чтобы измерить производительность, нужно найти тяжелый уровень с низким FPS и замерять частоту кадров при помощи FRAPS прохождением определенной части уровня. Для достижения нужной играбельности, необходимо изменять игровые настройки так, чтобы достичь средней частоты кадров хотя бы 30-40 FPS. Основные параметры, на которые следует обратить внимание: «Next generation content» (самая тяжелая и главная настройка), «Shadows» и «Fullscreen Effects», а также «Reflections» для уровней с большим количеством водных поверхностей.

В обзоре мы рассмотрим влияние графических настроек игры с двух сторон, принимая за точку отсчета максимальные и минимальные настройки в разрешении 1024x768. По сути, максимальные настройки — это включенный «nextgen content», а минимальные — отключенный, все остальное влияет на получаемую частоту кадров на тестовой системе не так серьезно. При минимальных настройках качества мы будем определять отрицательное влияние включенной на максимальное значение настройки, а при максимальных — наоборот, прибавление в кадрах в секунду от каждой установки, выкрученной на минимум. Это позволит более полно оценить влияние каждой настройки на общую производительность, и будет полезно как для пользователей с недостаточно мощными системами, желающими получить хорошее качество, так и для тех, кто хочет узнать, какие настройки имеет смысл снизить в первую очередь.

Для того чтобы изменить разрешение рендеринга, в главном меню игры нужно выбрать раздел «Options», а затем выбрать подраздел «Display Mode». Появится простейшее подменю, состоящее из трех параметров, в нем доступно изменение игрового разрешения и частоты обновления:

Display Mode

Диапазон доступных разрешений на тестовой системе весьма широк, в списке есть все разрешения, присутствующие в настройках дисплея Windows: 640x480, 720x480, 720x576, 800x600, 848x600, 960x600, 1024x768, 1088x612, 1152x854, 1280x720, 1280x768, 1280x800, 1280x960, 1360x768, 1600x900, 1600x1024, 1600x1200, 1920x1080, 1920x1200, 1920x1440, 2048x1536. Похвально, что выбрать можно любое рабочее разрешение, в том числе и популярное 1280x1024 с его не совсем обычным соотношением сторон. В списке есть как разрешения с привычным соотношением сторон 4:3, так и с широкоэкранными 16:9 и 16:10. Для широкоэкранных в меню настройки графики, рассмотренном ниже, есть дополнительная настройка «Widescreen».

А для того, чтобы вызвать меню 3D настроек игры, нужно выбрать раздел «Options» в главном меню, а затем выбрать подраздел «Display». Появится основное меню графических настроек Tomb Raider: Legend, все пункты которого мы сейчас рассмотрим отдельно.

Display
  • Widescreen(Off/On) — эта настройка полезна только для устройств вывода с широкоэкранным соотношением сторон. При его включении угол обзора изменяется соответствующим образом для того, чтобы извлечь выгоду от широкого экрана. Больше об этом пункте сказать нечего, я бы его вынес к настройкам разрешения и частоты обновления на месте разработчиков.
  • Next generation content(Off/On) — настройка, отвечающая за включение и отключение возможности «продвинутого» рендеринга. При наличии в системе современной видеокарты, игра позволяет включить этот режим. В этом случае используются совсем другой контент (модели, текстуры, карты нормалей) и алгоритмы рендеринга, добавляются продвинутые графические эффекты: динамические тени от всей геометрии, наложение карт нормалей на все поверхности, попиксельное освещение, поверхности воды с отражением и преломлением и многое другое. Конечно, производительность в данном случае серьезно снижается, но это полностью компенсируется картинкой абсолютно другого уровня по качеству и технологичности.
Next generation content Off     Next generation content On

Включение режима заметно по освещению, нормалмаппингу, теням и … совершенно другим моделям, текстурам, изменениям в архитектуре уровней и т.п. Даже модель Лары несколько отличается… Режим «Next generation content» оказывает серьезное влияние на изображение игры, модели людей и оружия становятся другими, многие уровни заметно темнеют и т.д. Но самое интересное, что и в «обычном» режиме есть свой плюс, кроме постоянно высокой производительности — при выходе из воды только в простом режиме на коже Лары видны капельки воды, в режиме «nextgen» этот эффект незаметен. Предлагаю вам самим оценить получаемую разницу, особенно забавно смотрятся изменения моделей людей и оружия:

Next generation content Off     Next generation content On

Next generation content Off     Next generation content On

Ни в readme, ни в меню игры не указывается, какие требования предъявляет к игровой системе включение «Next generation content». Однако весьма похожими на правду выглядят рекомендуемые требования игры: Pentium 4 3.0 ГГц или эквивалентный Athlon XP, объем системной памяти 1 Гб, видеокарта серии NVIDIA GeForce 7800 или ATI RADEON X1800. Самое главное — чтобы была видеокарта не хуже, чем из серий GeForce 6 или RADEON X1x00. Но даже в случае с наличием таких видеокарт расслабиться не получится. Сразу после выхода игры появились жалобы игроков на притормаживания в игре, особенно во время резких поворотов, мы об этом уже писали выше. Интересно, что разработчики из Crystal Dynamics указали на это в readme, отметив, что на некоторых системах режим может вызывать нестабильность частоты кадров во время игры и некоторые проблемы с качеством графики на определенных уровнях (отсутствующие или поврежденные текстуры). Для исправления проблем предлагается скачать последние видеодрайверы. Это простое действие помогает в некоторых случаях, но далеко не во всех…

Влияние настройки на производительность просто огромно, на тестовой системе с GeForce 7800 GTX частота кадров в секунду на тестовом уровне упала более чем в три раза! Зависимость от игрового разрешения странная — при его увеличении с 1024x768 до 1600x1200 FPS падает почти в два раза, а при снижении до 640x480 не растет ни на один средний кадр в секунду. Так что включение режима «Next generation content» может быть рекомендовано только обладателям видеокарт high-end уровня, да еще и с непритязательными требованиями к частоте кадров, так как рывки FPS все равно встречаются и минимальная частота кадров слишком низка в любом случае.

  • Fullscreen Effects(Off/On) — данный параметр включает и выключает большинство эффектов постобработки, таких как blur, depth of field, bloom и т.п. Эти эффекты могут быть слишком затратными на системах низкого уровня, так как они предъявляют большие требования к полосе пропускания видеопамяти, а также к производительности блоков ROP. Эффекты постобработки придают кинореалистичности картинке, но не всем нравятся, так как та же глубина резкости DOF и фильтр bloom могут смазывать изображение, снижая его четкость.
Fullscreen Effects Off     Fullscreen Effects On

Включение эффектов постобработки влияет на производительность игры довольно серьезно, особенно в «обычном» режиме на минимальных настройках — его включение может снизить среднюю частоту кадров на величину до 20-25%. При максимальных настройках в «nextgen» режиме отключение постфильтрации увеличивает FPS уже всего на 10-12%. Что, впрочем, также является значительной цифрой, ведь разница между 40 и 45 средними FPS в плавности игры имеется.

  • Depth of field(Off/On) — отдельная настройка постобработки, отвечающая только за depth of field фильтр. Видимо, она была введена только из-за соображений гибкости настроек и для людей с разными эстетическими предпочтениями, я уже говорил, что размытость дальних объектов нравится далеко не всем. И спасибо разработчикам, что дали такие гибкие настройки постфильтрации.
Depth of field Off     Depth of field On

Влияние на производительность от включения отдельной настройки DOF не так велико, как предыдущей, оно составляет примерно 15% в обычном режиме с минимальными настройками и до 7-8% — в режиме «nextgen». Возможность отключения постфильтрации может пригодиться владельцам слабых систем и тем, кого раздражает вид размытого заднего плана.

  • Fullscreen Anti-Aliasing(Off/On) — этот параметр задает включение заданного игрой уровня мультисэмплинга. Возможно, его единственное значение, которое, судя по всему, соответствует включенному антиалиасингу уровня 4x. Поддерживается только мультисэмплинг.

    От включения «Fullscreen Anti-Aliasing» в игре производительность на тестовой системе падает не слишком сильно (для разрешения 1024x768). Для тестовой системы с GeForce 7800 GTX на минимальных настройках разница в производительности между двумя возможными значениями составила всего 5-6%, а при максимальных настройках с включенным режимом «Next generation content» отличие в производительности было чуть больше, до 10%. Как обычно, на мощных системах может получаться, что включение антиалиасинга в выбранном игровом разрешении почти не влияет на скорость.

  • Shadows(Off/On) — настройка, которая включает динамические тени в игре. Для разных режимов игры («nextgen» и обычного) используются разные методы наложения теней, но суть одна — значение «Off» отключает тени, а «On» их включает. Включение теней обычно сильно сказывается на реалистичности 3D изображения. В Tomb Raider: Legend это хорошо видно, с тенями картинка оживает. Посмотрите на скриншоты — разве не кажется, что на левой чего-то не хватает?
Shadows Off     Shadows On

Влияние настройки на производительность также одно из самых больших, разница в среднем количестве кадров в секунду на тестовом уровне достигает 27-30% в тяжелейшем «nextgen» режиме! Эта разница достигается на максимальных настройках, на минимальных она значительно меньше, так как в обычном режиме используется простейшая динамическая тень для единственного персонажа — Лары. В последнем случае никакой зависимости производительности от изменения рассматриваемой настройки нет. Так что в обычном режиме тени отключать нет смысла совсем, а в «nextgen» я бы советовал сделать это на сравнительно слабых системах. Так как в сложных сценах частота кадров будет слишком низкой, а дополнительный прирост производительности на треть как раз может дать столь нужные кадры в секунду.

  • Reflections(Off/On) — как понятно из названия, это настройка, включающая и выключающая отражения. Больше всего ее влияние заметно на водных поверхностях и на блестящем полу, например, в доме Лары в тренировочном зале. Отражения динамические и очень качественные, соответствующие буферы обновляются каждый кадр и рывков не наблюдается. Параметр сильно влияет на реалистичность отображения водных поверхностей, но на слабых системах его можно отключить, чтобы получить хорошую прибавку производительности.
Reflections Off     Reflections On

Изменение производительности рендеринга при отключении отражений в режиме «nextgen» и максимальных настройках составило 15% на тестовой системе. Это достаточно большая цифра, которой не стоит пренебрегать, если скорости не хватает и частота кадров падает существенней всего именно на уровнях с большим количеством водных поверхностей. В обычном режиме и минимальных настройках включение отражений дает снижение FPS на 6-7% для тестовой системы. Вероятно, на слабых системах разница будет еще больше, так как расчет отражений предъявляет повышенные требования и к объему локальной видеопамяти и производительности пиксельных и текстурных блоков.

  • Water Effects(Off/On) — настройка, включающая некие эффекты водной поверхности. Судя по моим опытам, ее влияние распространяется только на визуализацию водных поверхностей в обычном режиме, а в «Next generation content» я не нашел никакой визуальной разницы, не было ее и в производительности. В обычном режиме при включении настройки на поверхности воды появляется достаточно странно выглядящая примитивная рябь:
Water Effects Off     Water Effects On

Хотя это лучше, чем гладкая ровная поверхность при отключенной настройке, понравиться такая вода может не всем. Влияние от включения таких «волн» на производительность в обычном режиме — менее 5%. Настройка, пригодная только для тех случаев, когда или ровная вода раздражает, или когда не нравятся такие «волны». Ничего интересного сам по себе данный эффект не представляет.

На тестовой системе с установленными видеокартами NVIDIA GeForce 7800 GTX или ATI RADEON X1800 XL, играбелен режим «Next generation content» с остальными включенными настройками, в том числе антиалиасингом и анизотропной фильтрацией, в разрешении 1024x768. Играбелен с некоторыми оговорками — в игре есть уровни с большими открытыми пространствами (например, Казахстан), где частота кадров в режиме «nextgen» недостаточно высока. Среднее количество кадров в секунду по всей игре превышает 40 FPS, минимальное значение опускается ниже 10 (это общая проблема режима «nextgen», не слишком сильно влияющая на играбельность, так как тормоза проявляются в течение нескольких минут в самом начале уровня). На системах среднего уровня, начиная с NVIDIA GeForce 7600 GS/GT и ATI RADEON X1600 PRO/XT, придется выключить режим «nextgen», оставив остальные настройки включенными. К сожалению, разработчики не предусмотрели ничего среднего для таких пользователей, им придется довольствоваться или тормозами в «nextgen» или некрасивой и нетехнологичной картинкой в обычном режиме. Налицо явный недостаток оптимизации 3D производительности.

Дополнительные возможности настройки

Все настройки игры хранятся в системном реестре Windows, нужные нам ключи располагаются по адресу: HKEY_CURRENT_USER\Software\Crystal Dynamics\Tomb Raider: Legend\Graphics

При помощи этих ключей можно изменить настройки качества игры, доступные в меню и некоторые из скрытых. Многие из значений копируют те, что есть в меню настройки графики в игре. Так, параметр «Fullscreen Anti-Aliasing» в игре соответствует ключу реестра «EnableFSAA», а «Water Effects» — ключу «EnableWaterFX». Не все настройки представлены в меню, некоторые из них там отсутствуют в явном виде или существуют в виде одной обобщающей настройки. Рассмотрим наиболее любопытные настройки:

  • DisableDriverManagement — похоже, что настройка отключает менеджмент ресурсов графического драйвера. На тестовой системе это дает снижение производительности на 18-20%, но, возможно, будет полезно для других систем.
  • DisableDynamicTextures — настройка, отключающая «динамические текстуры». Сложно сказать, что имеется в виду под динамическими текстурами, так как настройка не оказывает никакого влияния на качество картинки. Установка значения в «0» вызывает снижение производительности на 10%, а по умолчанию параметр выставлен в «1», что соответствует большей производительности.
  • DisableHardwareDXTC — эта настройка отключает использование сжатых текстур, использование текстурной видеопамяти при ее выставлении в значение «1» возрастает. Но производительность тестовой системы при этом не меняется или меняется незначительно, а качество картинки значительно ухудшается, артефакты DXTC сжатия становятся еще более заметными. Не совсем понятно, из-за чего это происходит, вероятно, используется менее качественный распаковщик, встроенный в DirectX, по сравнению с аппаратным декомпрессором видеочипов.

    DisableHardwareDXTC
  • DisableHardwareShadowMaps — данный параметр отключает использование специальных текстурных форматов для карт теней с возможностью фильтрации. Выставленное в «1» значение снижает производительность примерно на 15-20% с одновременным ухудшением качества картинки (фильтрация полностью отсутствует). Так это выглядит:

    DisableHardwareShadowMaps
  • UseLowResDepthOfField — первая реально полезная настройка из реестра, которая заставляет игру использовать буфер меньшего разрешения для расчета постэффекта DOF. Для владельцев слабых систем, не желающих отказываться от данного эффекта, она может быть полезной, так как снижает нагрузку на пиксельные блоки и блоки ROP, а также предъявляет пониженные требования к пропускной способности памяти. На тестовой системе разница в производительности была незначительна.
  • UseShader20 и UseShader30 — наиболее интересные настройки, отвечающие за использование так называемого «Next generation content». По умолчанию обе устанавливаются в «1» на видеокартах с поддержкой Shader Model 3.0, но применение шейдеров версии 3.0 можно отключить, оставив шейдеры 2.0, что может быть полезно на многих системах. При отключении шейдеров версии 3.0 производительность повышается незначительно, средний FPS на тестовой системе вырос меньше, чем на 5%, но от самых неприятных притормаживаний не остается и следа, минимальная частота кадров значительно выросла. Правда, вместе с этим исчезли такие продвинутые эффекты, как отражения и карты нормалей на поверхности воды горных рек и динамические волны на спокойных поверхностях, вроде воды в бассейнах, но это не так страшно.




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

iXBT BRAND 2016

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

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

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

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