3DGiТоги январь 2002 года - Влияние технологии S3TC (FXT1) на качество и скорость
Ввиду того, что в настоящее время технология компрессии текстур S3TC широко применяется, и де-факто признана
стандартом работы для многих карт, нет никакого смысла в дальнейшем сравнивать работу "без" и "с"
S3TC (и так всем понятно, что включение по возможности этой технологии у видеокарт, обладающих таковой, даст
определенные дивиденды). Мы лишь коснемся случая с NVIDIA-процессорами, которые имеют некоторый изъян в реализации
S3TC, но который, впрочем, успешно лечится.
Как известно, игры типа Quake3 в стандартной поставке не имеют предварительно сжатых и специально обработанных текстур, при
активизации S3TC(FXT1) происходит автокомпрессия текстур, при этом визуально получаемая картинка смотрится по-разному у карт,
поддерживающих сжатие текстур.
Поэтому мы можем сравнить качество автокомпрессии на видеочипсетах, "понимающих" сжатие текстур, а также
оценить прибавку в производительности (тестирование проводилось на примере Quake3 при максимальных установках качества:
NVIDIA GeForce 256/2/3
Без поддержки S3TC: C активизацией S3TC:
Разницу можно увидеть даже на маленьких скриншотах, и она не в пользу использования S3TC.
Мы видим, что включение S3TC у NVIDIA GeForce-чипсетов хоть и приносит плоды повышения
производительности, но портит основательно качество.
Проблема низкого качества сжатых текстур на чипах GeForce2/3 связана
с неприятной особенностью аппаратной распаковки текстур, упакованных в формате 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" или
непосредственно к автору. А еще лучше - оттуда скачать RivaTuner, при помощи которого можно тонко настроить работу
видеокарты на базе NVIDIA-процессоров.
Возвращаясь к S3TC-Fix, должен сказать, что эта коррекция несколько уменьшает прирост производительности при активизации S3TC, что, впрочем, вполне естественно.
За улучшение качества почти всегда приходится платить скоростью.
Во второй части обсуждения 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
|