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:

       

       

Разница просто бросается в глаза. Причем играбельность при таком переключении страдать может только в сверхвысоких разрешениях.




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

3DGiТоги августа 2001 года: S3TC/FXT1

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:

       

       

Разница просто бросается в глаза. Причем играбельность при таком переключении страдать может только в сверхвысоких разрешениях.