Выбираем видеокарту. Часть 2

Сегодня мы продолжим рассказ о характеристиках видеокарт (начало см. в «МБ» №25’2006) и узнаем, как общаются между собой графическое приложение и видеокарта.

Спасительные шейдеры
Игра общается с видеокартой на собственном языке. Его называют программным интерфейсом приложения (API). Это позволяет разработчикам игр не задумываться, какая именно видеокарта стоит у пользователя (ну, или почти не задумываться). А покупателю не нужно проверять длинный список совместимых с игрой видеокарт (да, в начале 90-х было и такое) – достаточно оценить лишь минимальные и рекомендуемые требования. Так что стандарты – это очень хорошо.
Конечно же, игра общается с видеокартой не напрямую, а посредством драйвера. Он переводит инструкции API в собственные команды конкретного графического процессора, выполняя, по сути, роль интерпретатора. В это таинство производители графических чипов, к сожалению, никого не посвящают (как, впрочем, и в детали архитектуры GPU). В отличие от разработчиков центральных процессоров, производители GPU отсылают разработчиков приложений к стандартным API. Так что с центральным процессором можно общаться напрямую, через стандартные команды x86, а с графической картой – только через драйвер. Почему и важно обновлять драйверы – зачастую с новым драйвером игра начинает работать быстрее (впрочем, бывает и наоборот): производители GPU постоянно оптимизируют трансляторы (причем, зачастую «затачивая» их на конкретные игры).
На заре потребительских 3D-ускорителей массово использовалось два API: Glide от 3Dfx и Open GL от команды независимых разработчиков. Первый канул в Лету, вытесненный вездесущей Microsoft со своим Direct3D, входящим в пакет DirectX и претерпевшим за годы своего существования множество изменений (как вы знаете, сейчас в ходу девятая версия DirectX). Второй существует до сих пор и придерживается заданных на заре своего существования стандартов. Современные видеокарты поддерживают оба этих API, так что беспокоиться не нужно.
Но возникает вопрос: почему многострадальные API Direct3D и набор его команд вытерпели аж девять итераций? Дело в том, что ускорители последние десять лет бурно развивались, и разработчики внедряли одну функцию за другой. Действительно, лишняя галочка на коробке с видеокартой в конкурентной борьбе не помешает. Так были введены туман, вывод неровностей поверхности, разные виды фильтрации и т.д. Но что такое новые функции, если их не поддерживают ни игры, ни API? Вот и пошла гонка вооружений. Каждый DirectX получал все новые и новые функции, число команд росло. Но не может же так быть до бесконечности? Мы попросту упремся в очень сложный код и реализацию одного и того же, но разными способами. Выход был найден: разработчикам игр дали возможность программировать GPU не через драйвер, а напрямую, отсылая в чип небольшие программы на специальном языке. Эти программы были названы шейдерами. Их условно делят на вершинные и пиксельные, выполняющиеся на соответствующих этапах нашей задачи (вывод 3D‑мира на плоскость экрана). Как и DirectX, за последние несколько лет шейдеры многократно совершенствовались. Сегодня новые видеокарты поддерживают Shader Model 3.0 – то есть третью версию шейдеров. Благодаря шейдерам программисты могут создавать такие эффекты, о которых раньше можно было только мечтать. Например, правдоподобный мех или красивую воду. Да и старые эффекты теперь можно реализовать через шейдеры. Перед программистами открылась свобода творчества: они больше не ограничены скудностью команд API. А графический процессор стал по-настоящему программируемым.
Говоря о шейдерах, мы не будем вдаваться в детали. Правило таково: чем свежее версия, тем лучше. Покупайте ту карту, которая поддерживает Shader Model 3.0. Дело в том, что третья версия шейдеров позволяет реализовывать наиболее красочные эффекты, которые было слишком накладно воспроизводить посредством второй версии из-за сильного падения производительности. Да и на старых играх эффект будет положительным: драйверы видеокарты часто берут старый код шейдера, который игра «закачивает» в видеокарту, оптимизируют – и выполняют уже новую версию этого шейдера. Некоторые считают подобные операции жульничеством, но мы так не думаем. Все, что идет на пользу потребителю – хорошо.

Хитрые игры
Часто приходится слышать: «На моей видюхе идет и Doom 3, и Far Cry; зачем мне ее апгрейдить?» Вся соль здесь в хитрых (или, точнее, – умных) играх. Влезьте в шкуру разработчика. Ему нужно продать продукт. При этом нужно обеспечить высокое качество на мощных картах, чтобы их владельцы остались довольны красочной картинкой. И сделать так, чтобы игра все же шла на дешевых медленных видеокартах, даже интегрированных. Ваши действия? Поступают следующим образом: в игру вводится несколько путей кода, которые работают в зависимости от мощности видеокарты. На старых видеокартах работает максимально облегченный код, без теней и многих других эффектов. Да, игра пойдет и на слабой видеокарте, но сможете ли вы насладиться качеством картинки? Тот еще вопрос. Забавно, но часто слышишь: «Какие там красоты в Far Cry?! В той же Quake III картинка ярче и сочнее». Оказывается, человек играл на какой-нибудь GeForce4 MX, которой просто не по силам вытянуть нормальную картинку. Поэтому если ваша карта слабая, вы получите заветные 30 fps, но заведомо проиграете по визуальному качеству. Если же видеокарта – мощная, то игра включает все доступные эффекты, исполняя самый тяжелый поток кода. Частично функциями качества можно управлять в меню игры, но – далеко не всегда, и обычно не всеми. Поток кода выбрать вы все равно не сможете (по крайней мере, легальными средствами).
Вывод: наслаждаться свежими играми во всей красе вы сможете только на видеокартах последних поколений.

Продолжение следует...


Рекомендуем почитать: