2012-04-02 2 views
1

Когда производительность сохраняется в памяти, мы (неохотно) используем сжатие текстуры. Артефакты, введенные сжатием, могут быть более или менее приемлемыми. каковы различные возможности, которые могут применяться на исходном уровне изображения, чтобы свести к минимуму артефакты, введенные алгоритмом сжатия. В моей текущей ситуации большинство артефактов видно при использовании градиентов.сжатие текстуры dxt4

+0

Какие артефакты? Какой компрессор вы используете? Какой формат сжатия вы используете для своих данных? О каких изображениях вы говорите? Ваш вопрос слишком расплывчатый, чтобы получить ответ в этой форме. –

+0

Что вы за отзыв. Ниже приведены некоторые подробности: я пробовал nvcompress и nvdxt, dxt {1..5}, я пытаюсь добавить ссылки на некоторые сжатые изображения, чтобы показать все артефакты. – ohmy

ответ

4

DXT-сжатие - это все об интерполяции или градиентах, если хотите. Однако вы должны хорошо понимать, что именно он делает. Сжатие DXT является компромиссом, оно предлагает довольно плохое качество при довольно плохом сжатии, но делает, предлагая некоторую компрессию и практически тривиально реализуется в аппаратных средствах и работает практически нулевой стоимостью. Вот почему он используется.

Есть несколько способов улучшить качество, но если проблемы с качеством не приемлемы, единственное решение - не использовать DXT. (Кроме того, DXT4, которые у вас есть в названии вашего вопроса является не очень широко используется, это DXT5-предварительно умноженном)

Прежде всего, отметим, что:

  • DXT кодирует цвета 4х4 блоков текселей по сохраняя два цвета 5: 6: 5 и интерполируя по этой линии в пространстве RGB. Интерполяция квантована на 2 бита, поэтому у вас есть только 4 значения для каждого пикселя.
  • Альфа-канал в DXT4/5 хранит два 8-битовых альфа-значения и использует 3-битные интерполяторы.
    • DXT2/3 использует явный 4-разрядный альфа-канал texel (т. Е. Не интерполирует между некоторыми выбранными 8-битными значениями).
    • DXT1 может финтировать 1-битный альфа-канал, но это трюк сортировки/кодирования и другая история.
  • Невозможно получить чистый серый цвет в DXT без преобразования в другое цветовое пространство (из-за хранения конечных точек 5: 6: 5).

Это означает, что DXT может в принципе (более или менее) отлично воспроизводят многие горизонтальные, вертикальные или диагональные 1D градиенты, которые не имеют слишком резкие изменения, но это совершенно не в состоянии воспроизвести большинство других моделей (хотя это обычно может воспроизводить что-то близкое).
Например, если у вас есть 2D-градиент или повернутый градиент, нет никакого способа (кроме как по чистому совпадению!), Что существует пара двух цветов, которые позволят всему блоку 4x4 интерполировать красиво. Кроме того, поскольку интерполяция квантована только на 4 варианта, подавляющее большинство «нечетных поворотов» просто не может быть закодировано и не может сочетаться с разными комбинациями цветов. Однако для большинства «натуральных» текстур это приемлемо.

Компрессор DXT, как правило, пытается найти наилучшую посадку в ячейке 4x4 (хотя некоторые компрессоры будут/могут делать что-то еще). Это может привести к ступенчатости градиентов, даже если градиент внутри ячейки представлен хорошо.

Что вы можете сделать о ЦТС является:

  • Использование различных компрессоров и выбрать лучший результат. Существует по меньшей мере 3 разных (не грубой силы) стратегии, используемые разными компрессорами, что дает совершенно разные результаты.
  • Скачайте библиотеку crunch. Для него тоже есть компрессор графического интерфейса Windows.Хотя хруст в первую очередь нацелен на создание файлов меньшего размера (после сжатия zip), и он, наконец, связан техническими ограничениями формата блока DXT, он использует необычную технику поиска, которая учитывает гораздо больший диапазон. Это может Быть может, что ему удастся дать один или другой из ваших градиентов лучший вид.
  • Избегайте градиентов, которые являются 2D или не выровнены по отношению к u/v или диагонали, потому что вы знаете, что их невозможно кодировать.
  • Преобразование естественных изображений в цветное пространство, отличное от RGB, перед сжатием. YCoCg и YCbCr могут быть кандидатами или преобразованием JPEG-LS. Человеческий глаз не одинаково чувствителен во всех отношениях. Некоторые ошибки менее очевидны. Использование другого цветового пространства использует это.
  • Используйте альфа-канал для наиболее важного канала, если вам не нужна альфа, поскольку вы знаете, что он имеет 8-битное разрешение конечной точки (вместо 5/6) и 3-битные интерполяторы вместо 2 бит. В противном случае используйте зеленый для самого важного канала, так как он имеет еще один бит.
  • Для рисованных текстур вы можете попробовать использовать 5: 6: 5 согласованных цветов, которые, по крайней мере, дадут идеальные хиты для них. Хотя для «нарисованных» текстур (что-то похожее на комикс) DXT - очень неразумный выбор в целом.
  • Для случаев, когда качество просто не режет его, не используйте DXT (да, это звучит как глупый совет, но это действительно так ... если он не подходит, не используйте его).
Смежные вопросы