3DGiТоги август 2001 года - Влияние технологии S3TC (FXT1) на качество и скорость
Рассмотрим весьма интересную проблематику использования технологии компрессии текстур в OpenGL. Фирмы NVIDIA и ATI в свое
время лицензировали использование S3TC у компании S3 и внедрили эту технологию в свои ICD OpenGL. 3dfx использует для сжатия
текстур в OpenGL свой метод FXT1.
Как известно, игры типа Quake3 в стандартной поставке не имеют предварительно сжатых и специально обработанных текстур, при
активизации S3TC(FXT1) происходит автокомпрессия текстур, при этом визуально получаемая картинка смотрится по-разному у карт,
поддерживающих сжатие текстур.
Поэтому мы можем сравнить качество автокомпрессии на некоторых видеочипсетах, "понимающих" сжатие текстур, а также
оценить прибавку в производительности (тестирование проводилось на примере Quake3 при максимальных установках качества:
1. S3 Savage4/Savage2000
Без поддержки S3TC: C активизацией S3TC:
Качество хоть и пострадало, но некатастрофично. Прирост по скорости имеется, особенно в 32-битном цвете (см. диаграммы ниже).
2. NVIDIA GeForce 256 (а также все остальные более новые чипсеты)
Без поддержки S3TC: C активизацией S3TC:
Разницу можно увидеть даже на маленьких скриншотах, и она не в пользу использования S3TC.
Мы видим, что включение S3TC у NVIDIA GeForce-чипсетов хоть и приносит плоды повышения
производительности, но портит основательно качество.
Проблема низкого качества сжатых текстур на чипах GeForce / GeForce2 GTS связана
с неприятной особенностью аппаратной распаковки текстур, упакованных в формате DXT1. При распаковке
таких текстур чип оперирует с 16-битным текселем. Такая реализация декомпрессии приводит к бандингу при
распаковке текстур, которые содержат плавные цветовые градиенты (именно этот эффект мы и наблюдаем на
текстурах неба в Quake III). Качество сжатых текстур на чипах GeForce / GeForce2 можно повысить, если
использовать вместо формата DXT1 форматы DXT2 - DXT5. Это не доставит абсолютно никаких проблем
разработчикам игр, и потребует от них очень незначительного изменения кода игры (замена одного идентификатора).
Разумеется, что такой метод подойдёт только к играм, которые не содержат прекомпрессированных S3TC текстур,
и используют сжатие текстур в реальном времени. (Например Quake III: Arena, Soldier of Fortune и т.д.)
Начиная с версии Детонатора 6.47 NVIDIA решила эту проблему на уровне драйверов. В секции OpenGL
появился ключ S3TCQuality, который равен 0 по умолчанию. Этот ключ действует на реалтаймовую
упаковку текстур. Установка этого ключа в 1 приводит к тому, что OpenGL драйвер начинает упаковывать текстуры
в формат DXT3 вместо формата DXT1.
Если вас не хочется возиться с Registry или у вас Detonator более младших версий, то вы можете сходить на
сайт "NVIDIA World",
где вам могут предложить иной способ: использовать набор патчей S3TC Fix Pack2 (автор Алексей Николайчук aka Unwinder (AlexUnwinder@mail.ru) совместно с Алексеем Берилло aka SomeBody Else)
для улучшения качества S3TC текстур. Эти патчи немного модифицируют OpenGL игры, заставляя их использовать
вместо DXT1 другой формат сжатия. В S3TC Fix Pack 2 входят патчи для игр Quake III: Arena, Soldier of fortune, а так же
универсальный патч для любых OpenGL приложений.
Алексей написал утилиту, которая правит код в Quake3.exe, заставляя использовать иные алгоритмы распаковок.
После такого исправления мы получаем в том же Quake3 следующее:
Как мы видим, хоть артефакты и остались, они уже не столь явны, и картинка в целом схожа с той, что можно видеть
на ATI RADEON. За всеми подробностями данного исследования я прошу обращаться на сайт "Мир NVIDIA" или
непосредственно к автору.
Однако эта коррекция несколько уменьшает прирост производительности при активизации S3TC, что, впрочем, вполне естественно.
За улучшение качества почти всегда приходится платить скоростью.
3. 3dfx Voodoo4/5
Без поддержки FXT1: C активизацией FXT1:
Качество автокомпрессии очень хорошее, даже замечаний практически нет.
При превосходном качестве технология FXT1 дает существенный прирост в производительности (см. диаграммы ниже).
4. ATI RADEON
Без поддержки S3TC: C активизацией S3TC:
Качество графики при автокомпрессии определенно портится, однако не столь критично, как у NVIDIA-чипсетов.
Производительность возросла, особенно в 32-битном цвете, а ухудшение качества графики при
активизации S3TC не столь значительно, поэтому включение режима автокомпрессии приветствуется.
5. STM KYRO/KYRO II
Без поддержки S3TC: C активизацией S3TC:
Качество графики при автокомпрессии несколько портится, однако не катастрофично.
А вот производительность возросла просто колоссально! Это самый лучший результат в этом плане среди всех
процессоров, поддерживающих S3TC.
Теперь посмотрим, а что дает активизация этой технологии в плане производительности всех
перечисленных видеокарт:
А ниже приведены диаграммы зависимости прироста по скорости в
процентах от типа видеочипсета в разных разрешениях:
Абсолютная шкала
Логарифмическая шкала
Абсолютная шкала
Логарифмическая шкала
Видно, что наибольшее увеличение в производительности при активизации S3TC дают карты KYRO/KYRO II, затем - RADEON SDR, а также
прекрасные плоды для видеокарт Voodoo4/5 принесла технология FXT1 от 3dfx.
Разумеется, самые лучшие приросты наблюдаются в 32-битном цвете, поскольку у многих видеокарт сильное падение производительности при
переходе на 32-битный цвет возникает вследствие нехватки пропускной способности локальной видеопамяти, а технология компрессии текстур
несколько разгружает память видеокарт.
Во второй части обсуждения S3TC в OpenGL я хочу напомнить, что данная технология себя показывает во всей красе при наличии специальных
компрессированных текстур, то бишь в играх, оптимизированных под S3TC, либо на дополнительных уровнях "под S3TC", как например,
Quake3-уровнях, выпущенных фирмой Diamond Multimedia для рекламы Savage2000, и ныне успешно используемых и с чипсетами от NVIDIA:
Вот в данном случае мы видим, что досадная ошибка в автокомпрессии у GPU от NVIDIA не мешает насладиться всей красотой точной графики.
А вот то, что мы можем видеть на RADEON:
Текстуры все взяли и пропали. Так что, если уж автокомпрессия у RADEON работает на "ура", то использование массивов сжатых
текстур у этого чипа вызывает трудности. Такая же ситуация и у KYRO/KYRO II.
В Сети имеется "специальный" OpenGL-драйвер для игры
Unreal Tournament, который позволяет использовать прилагаемые к игре текстуры в формате
S3TC. До какого-то момента только пользователи чипсетов от S3 могли наслаждаться этой
красотой, так как создатели игры в то время включили поддержку этих текстур только через S3 Metal.
И вот, владельцы карт, у которых в OpenGL есть поддержка S3TC (NVIDIA GeForce/GeForce2,
ATI RADEON, KYRO/KYRO II) могут скачать этот драйвер,
установить патч к Unreal Tournament версии версии 4.28 или более старшей, и
настроить игру на работу под OpenGL. Разумеется, надо иметь либо лицензионную игру со вторым CD-диском с большими текстурами, либо
где-то этот "бонус" переписать.
Более того, сама фирма Epic Games наконец-то выпустила драйвер для Direct3D, позволяющий в этом режиме также активизировать S3TC.
Этот драйвер можно скачать здесь.
И вот имеем следующее. Слева - скриншоты, полученные в Direct3D-версии игры без S3TC, а
справа - с S3TC:
Разница просто бросается в глаза. Причем играбельность при таком переключении страдать может только в сверхвысоких разрешениях.
Комментарии? Поправки? Дополнения? Anvakams@ixbt.com
|