Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
3Dc (FourCC: ATI2), также известный как DXN, BC5 или Block Compression 5, — это алгоритм сжатия данных с потерями для карт нормалей, изобретенный и впервые реализованный компанией ATI. Он основан на более раннем алгоритме DXT5 и является открытым стандартом. В настоящее время 3Dc поддерживается как ATI, так и Nvidia.
3Dc (FourCC : ATI2), also known as DXN, BC5, or Block Compression 5 is a lossy data compression algorithm for normal maps invented and first implemented by ATI. It builds upon the earlier DXT5 algorithm and is an open standard. 3Dc is now implemented by both ATI and Nvidia.
Целевое приложение
Целевое приложение, нормальное картирование, является расширением bump mapping, которое моделирует освещение на геометрических поверхностях путем чтения нормалей поверхности из прямоугольной сетки, аналогичной карте текстур, придавая простым моделям впечатление большей сложности. Однако этот дополнительный канал увеличивает нагрузку на пропускную способность памяти графической системы. Существовавшие ранее алгоритмы сжатия с потерями, реализованные на потребительском 3D-оборудовании, не обладали необходимой точностью для воспроизведения карт нормалей без чрезмерных видимых артефактов, что обосновывало разработку 3Dc.
The target application, normal mapping, is an extension of bump mapping that simulates lighting on geometric surfaces by reading surface normals from a rectilinear grid analogous to a texture map giving simple models the impression of increased complexity. This additional channel however increases the load on the graphics system's memory bandwidth. Pre existing lossy compression algorithms implemented on consumer 3D hardware lacked the precision necessary for reproducing normal maps without excessive visible artefacts, justifying the development of 3Dc.
Алгоритм
Поверхностные нормали — это трёхмерные векторы единичной длины. Из-за ограничения по длине необходимо хранить только два элемента для каждой нормали. Следовательно, входные данные представляют собой массив двумерных значений. Сжатие выполняется блоками 4x4. В каждом блоке два компонента каждого значения сжимаются отдельно. Для каждого блока каждый из двух компонентов имеет палитру из 8 значений. Палитра генерируется на основе двух значений, представляющих начало и конец отрезка, а остальные шесть значений генерируются как линейные комбинации начального и конечного значений. Сжатие достигается путём определения минимального и максимального значений из 16 пикселей, подлежащих сжатию, и сохранения каждого из них в виде 8-битного значения. Затем отдельные элементы в блоке 4x4 хранятся по 3 бита каждый, представляя их положение на линейной шкале из 8 шагов от минимального до максимального значения. 3-битное значение каждого пикселя (индекс палитры) выбирается путём выбора элемента палитры с минимальным расстоянием до исходного значения. Общий объём хранения составляет 128 бит на блок 4x4 с учётом обоих исходных компонентов. В несжатой схеме с аналогичной 8-битной точностью исходные данные составляют 32 8-битных значения для той же области, занимая 256 бит. Таким образом, алгоритм обеспечивает степень сжатия 2:1. Степень сжатия иногда указывается как "до 4:1", поскольку для входных данных часто используется 16-битная точность вместо 8-битной. Это даёт сжатый выходной поток, который буквально в 4 раза меньше входного, но при этом точность оказывается несопоставимой.
Surface normals are three dimensional vectors of unit length. Because of the length constraint only two elements of any normal need to be stored. The input is therefore an array of two dimensional values. Compression is performed in 4×4 blocks. In each block the two components of each value are compressed separately. For each block, each of the two components have a palette of 8 values to choose from. The palettes are generated from two values representing the start and end of a line and the other six values being generated as linear combinations of the start and end values. Compression is natively achieved by finding the lowest and highest values of the 16 pixels to be compressed and storing each of those as an 8 bit quantity. Individual elements within the 4×4 block are then stored with 3 bits each, representing their position on an 8 step linear scale from the lowest value to the highest. Each pixel's 3 bit value (the palette index) would be chosen by choosing the palette entry with the minimum distance from the original values. Total storage is 128 bits per 4x4 block once both source components are factored in. In an uncompressed scheme with similar 8 bit precision, the source data is 32 8 bit values for the same area, occupying 256 bits. The algorithm therefore produces a 2:1 compression ratio. The compression ratio is sometimes stated as being "up to 4:1" as it is common to use 16 bit precision for input data rather than 8 bit. This produces compressed output that is literally 1/4 the size of the input but it is not of comparable precision.
3Dc+
3Dc+ (FourCC: ATI1) (также известный как BC4 или Block Compression 4) может сжимать текстуры, то есть карты освещения, карты теней, HDR-текстуры и свойства материалов. 3Dc+ обеспечивает степень сжатия 2:1 для однокомпонентных (DXT5 alpha) 8-битных целочисленных текстур и 4:1 для карт нормалей и текстур, состоящих из двух 8-битных целочисленных компонентов.
3Dc+ (FourCC: ATI1) (also known as BC4 or Block Compression 4) can compress textures, i. e. light maps, shadow maps, HDR textures and material properties. 3Dc+ provides 2:1 compression ratio with single component (DXT5 alpha) 8 bit integer textures and 4:1 compression ratio with normal maps and textures consisting of two 8 bit integer components