3DGiТоги декабрь 2001 года — Влияние технологии 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:



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




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

3DGiТоги декабря 2001 года: S3TC/FXT1

3DGiТоги декабрь 2001 года — Влияние технологии 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:



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