Похоже, что Microsoft, а не производители графических карт, стала движущей силой последнего поколения видеокарт. Появление DirectX 8 API вынудило производителей видеокарт выпускать продукты, которые совместимы с этой технологией, а это значит, что многие "инновации" видеокарт далеко не такие уж инновационные, а просто соответствуют спецификациям Microsoft DirectX 8.
nVidia уже выпустила продукт, поддерживающий DirectX 8. В числе поддерживаемых фич есть 2 активно расхваливаемые в последнее время: пиксельные и вертексные шейдеры. Появление поддержки шейдеров high-end видеокартами помимо GeForce3 оставалось лишь вопросом времени. Похоже, что этот процесс начался: состоялся анонс новой технологии ATI.
Хотя состоялся не полный анонс продукта, у нас была возможность поговорить с представителями ATI относительно их технологии Radeon 2, которая обещает не только обеспечение совместимости с DirectX 8, но и с DirectX 8.1. Сегодня мы поговорим о ATI SMARTSHADER, которая является реализацией технологий пиксельных и вершинных шейдеров DirectX 8.1.
Пиксельные и вершинные шейдеры позволяют превратить графический процессор с фиксированным набором функций в программируемый. Шейдеры способны скомпилировать и запустить низкоуровневой код подобно CPU. Предыдущие поколения графических процессоров использовали фиксированные функции для расчета трансформаций и освещения, текстурирования, фильтрации, операций блендинга. При введении новых возможностей требовалась не только их реализация в API, графические процессоры также должны были быть запрограммированы для выполнения этих операций. Пиксельные и вершинные шейдеры дают новый путь к модифицированию вертексной и пиксельной информации, позволяя графическому процессору манипулировать этими данными без потери скорости.
Вершинные шейдеры по существу являются небольшими программами, которые модифицируют вертексные данные. Ключевые преимущества вершинных шейдеров заключаются в том, что благодаря им можно создавать множество эффектов, таких, как процедурные деформации (procedural deformations), теневые объемы (shadow volumes), системы частиц (particle systems), эффекты линз (lens effects), скиннинг с использованием палитры (palette skinning), интерполяцию кейфреймов (keyframe interpolation).
Эффект | Описание | Пример |
Процедурные деформации | Позволяют изменять форму объектов посредством математических вычислений | Анимированный пузырь (это круглый такой, и не надо этого гнусного хихиканья!) |
Теневые объемы | Вершинные шейдеры создают прозрачные объемы, которые находятся за объектами напротив источников света, создавая реалистичные тени | Сцена с несколькими источниками света и реалистичными тенями |
Рендеринг меха (fur rendering) | Создает реалистичный мех/шерсть | Пушистый кролик |
Системы частиц | Анимирует большое количество частиц, назначая и модифицируя физические свойства, такие, как масса, скорость, ускорение, etc. | Создание огня, искр, взрывов |
Эффект линз | Искажает форму объектов, чтобы имитировать видимость их через линзы | Обзор объекта из оптического прицела |
Скиннинг с использованием палитры | Позволяет создавать персонажей, используя скелетную анимацию со множеством "костей" (bones) для их естественного передвижения, etc. | Реалистичная анимация персонажей |
Продвинутая интерполяция кейфреймов | Эффекты анимации и морфинга создаются путем смешения двух или более кейфреймов | Анимация выражения лица, синхронизация движений губ в такт речи |
Пример процедурной деформации
Пример использования теневых объемов
Как и вершинные шейдеры, пиксельные шейдеры являются небольшими программами, которые изменяют атрибуты отдельных пикселей. Изменение информации об отдельных пикселях позволяет создавать очень реалистичное освещение. Программируемость пиксельных шейдеров позволяет разработчикам создавать свои собственные эффекты и алгоритмы затенения. Из-за большого количества пикселей, присутствующих в рендерещяйся сцене, операции пиксельных шейдеров намного проще, чем операции вертексных шейдеров, поскольку должны быть произведены вычисления над гораздо большим числом элементов в сцене.
При разработке графического чипа GeForce3 nVidia опиралась на спецификации Mirosoft DirectX 8.0 API. Новая технология ATI SMARTSHADER является шагом вперед, т.к. имеется поддержка DirectX 8.1 API и ATI обещает еще более реалистичные эффекты.
Вообще-то, единственным отличием DirectX 8.0 от DirectX 8.1 является версия пиксельных шейдеров. DirectX 8.0, на спецификации которого опиралась nVidia при разработке своего nfiniteFX engine, имеет поддержку пиксельных шейдеров 1.1, в то время, как DirectX 8.1 имеет поддержку пиксельных шейдеров версии 1.4. В следующей таблице представлены отличия между пиксельными шейдерами версии 1.1 и 1.4:
Параметры | Pixel Shader 1.1 | Pixel Shader 1.4 |
Максимум входных текстур | 4 | 6 |
Максимальная длина программы | 12 инструкций (до 4 сэмплингов текстур, 8 операций смешения цветов) | 22 инструкции (до 6 сэммплингов текстур, 8 адресаций текстур, 8 операций смешения цветов) |
Набор инструкций | 13 операций адресации, 8 операций с цветом | 12 операций адресации/операций с цветом |
Режимов адресации текстур | 40 | виртуально не ограничено |
Как вы видите, пиксельные шейдеры версии 1.4 обеспечивают большее количество возможных комбинаций благодаря большему числу режимов адресации текстур. Это стало возможным из-за увеличенного количества основных инструкций, что дает большее число их возможных комбинаций.
Новые спецификации пиксельных шейдеров поднимают их программируемость на новый уровень. Таблица со списком эффектов, возможных только в DirectX 8.1 с пиксельными шейдерами 1.4, представлена ниже:
Эффект | Описание | Пример |
Настоящее затенение по алгоритму Фонга | Выполняет сложные математические вычисления над пикселями для точного освещения/затенения, учитывая свойства материала и света | Реалистичный рендеринг материалов |
Анизотропное освещение | Использует функции двунаправленного отраженного распространения (BRDF Lighting) для определения того, как свет падает на поверхность в зависимости от угла обзора | Более реалистичное освещение волос |
Продвинутое рельефное текстурирование | Позволяет создавать bump карты, отбрасывающие тени, а также комбинировать несколько bump карт | Круги на воде, созданные ветром и упавшим в воду объектом |
Процедурные текстуры | Использует математические вычисления для создания текстур, которые не нужно хранить в памяти, т.к. они создаются графическим чипом | Создание мраморных колонн без использования текстур |
Затенение по Фонгу
Анизотропное освещение
Продвинутое рельефное текстурирование
Процедурные текстуры
Другим преимуществом пиксельных шейдеров 1.4 является то, что Microsoft переработала язык, на котором пишутся шейдеры. Есть две части пиксельных шейдеров: шейдер адресации и шейдер цвета. Шейдер адресации выполняет до 8 математических операций над текстурами и адресацией. Шейдер цвета может состоять из 8 инструкций, которые смешивают и модифицируют значения цвета. В DirectX 8.0 языки программирования этих частей пиксельного шейдера были различными. В DirectX 8.1 проще писать программы адресации и шейдеры цвета.
Апдейт #1:
Хотя nVidia не прокомментировала ситуацию относительно DirectX 8.1, они могут прокомментировать заявление о том, что только SMARTSHADER engine имеет функции, упомянутые выше.
nVidia поддерживает вышеупомянутые эффекты пиксельных шейдеров 1.4, судя по продемонстрированным демкам GeForce3. Затенение по Фонгу работает при использовании nfiniteFX engine на GeForce3 с момента релиза карты. Хотя ATI заявляет, что только они могут выполнять вычисления для "правильного" затенения по Фонгу, nVidia утверждает, что сейчас нет стандартной формулы для алгоритма затенения. Между прочим, в Zoltar GeForce3 demo используется затенение по Фонгу, работающее на хардверном уровне.
Анизотропное освещение для создания реалистично выглядящих волос используется в nVidia fur demo и при этом сочетается с возможностью рендеринга меха благодаря вертексным шейдерам. Согласно nVidia, информация о том, что только SMARTSHADER engine поддерживает этот эффект, неверна.
Техника продвинутого рельефного текстурирования также доступна благодаря nfiniteFX engine. Движок может без проблем создавать тени для bump карт и также поддерживает смешение нескольких bump карт. Способность GeForce3 выполнять эти функции видна в демке Zoltar.
И, наконец-то, nVidia может использовать процедурные текстуры. Хотя демки или скриншота, подтверждающих это, нет, nVidia скоро собирается представить их.
Апдейт #2:
Недавно nVidia предоставила нам некоторую информацию, касающуюся совместимости GeForce3 с DirectX 8.1. Видимо, DirectX 8.1 поддерживает две версии пиксельных шейдеров: 1.2/1.3 и 1.4. ATI SMARTSHADER поддерживает пиксельные шейдеры 1.4, а nVidia nfiniteFX engine - 1.2/1.3, которые также поддерживаются DirectX 8.1. Сейчас у нас нет информации относительно отличий пиксельных шейдеров версии 1.2/1.3 от 1.4, но факт остается фактом - GeForce3 поддерживает пиксельные шейдеры версии 1.3 и, соответственно, совместим с DirectX 8.1.
Пока сложно сказать. Сейчас разработка игр длится очень долго и трудно предвидеть, когда появятся игры, заточенные под DirectX 8. Подобное уже было - вспомните ситуацию с аппаратным T&L несколько лет назад. Производители обещали, что T&L изменит игры, станет возможным использовать большее количество полигонов, игры станут более реальными. Ну, и через год что-нибудь изменилось? Были игры, оптимизированные под хардверный T&L, но на картах без T&L engine почти все они работали одинаково. Мы до сих пор ждем того дня, когда играм потребуется T&L или они будут выглядеть лучше при его использовании. Не повторится ли эта же история и с пиксельными/вершинными шейдерами?
При поддержке Microsoft и стандартизации, которую они создали, можно надеяться, что в играх действительно будут использоваться преимущества шейдеров, вопрос только когда?
ATI утверждает, что к моменту появления их карт уже будут существовать игры, в которых используются преимущества SMARTSHADER. По заверениям компании, их продукт следующего поколения будет готов к концу лета, так что ждать осталось немного. Вот только ждать нужно не только следующий продукт ATI, но и игры с поддержкой шейдеров.
ATI SMARTSHADER имеет прекрасные возможности, т.к. поддерживает DirectX 8.1 и обратно совместим с DirectX 8.0, но когда же появятся игры с поддержкой всех возможностей DirectX 8.1? Пока все новые эффекты мы видели лишь в технологических демках, но, вообще-то, хотелось бы поскорее увидеть их в играх. Что касается nVidia, то несомненно, их следующий продукт будет иметь поддержку DX 8.1 и пиксельных шейдеров 1.4.
А нам с вами осталось ждать, чтобы увидеть преимущества SMARTSHADER над nfiniteFX engine от nVidia. Вопрос даже не стоит, какая из этих технологий лучше, хочется лишь надеяться, что все расхваливаемые преимущества будут использованы.