Real-Time Rendering——6.2.6 Texture Compression纹理压缩(DXTC,BC,ETC,PVRTC,ASTC)

One solution that directly attacks memory and bandwidth problems and caching concerns is fixed-rate texture compression. By having the GPU decode compressed textures on the fly, a texture can require less texture memory and so increase the effective cache size. At least as significant, such textures are more efficient to use, as they consume less memory bandwidth when accessed. A related but different use case is to add compression in order to afford larger textures. For example, a non-compressed texture using 3 bytes per texel at 512的2次幂 resolution would occupy 768 kB. Using texture compression, with a compression ratio of 6 : 1, a 1024的2次幂 texture would occupy only 512 kB.

 

一个直接解决内存和带宽问题以及缓存问题的解决方案是固定速率纹理压缩。通过让GPU动态解码压缩纹理,纹理需要的纹理内存更少,从而增加了有效的缓存大小。至少同样重要的是,这样的纹理使用起来更有效,因为它们在被访问时消耗更少的内存带宽。一个相关但不同的用例是添加压缩以提供更大的纹理。例如,在512的2次幂分辨率下,每个纹理元素使用3个字节的非压缩纹理将占用768 kB。使用纹理压缩,压缩比为6 : 1,1024的2次幂纹理将只占用512 kB。

There are a variety of image compression methods used in image file formats such as JPEG and PNG, but it is costly to implement decoding for these in hardware (though see Section 19.10.1 for information about texture transcoding). S3 developed a scheme called S3 Texture Compression (S3TC) [1524], which was chosen as a standard for DirectX and called DXTC—in DirectX 10 it is called BC (for Block Compression).Furthermore, it is the de facto standard in OpenGL, since almost all GPUs support it. It has the advantages of creating a compressed image that is fixed in size, has independently encoded pieces, and is simple (and therefore fast) to decode. Each compressed part of the image can be dealt with independently from the others. There are no shared lookup tables or other dependencies, which simplifies decoding.

在JPEG和PNG等图像文件格式中使用了多种图像压缩方法,但在硬件中实现这些方法的解码成本很高(尽管有关纹理代码转换的信息,请参见第19.10.1节)。S3开发了一种称为S3纹理压缩(S3TC) [1524]的方案,它被选为DirectX的标准,并被称为DXTC——在DirectX 10中,它被称为BC(用于块压缩)。此外,它是OpenGL中事实上的标准,因为几乎所有的GPU都支持它。它的优点是创建大小固定的压缩图像,具有独立编码的部分,并且解码简单(因此快速)。图像的每个压缩部分都可以独立于其他部分进行处理。没有共享的查找表或其他依赖关系,这简化了解码。

There are seven variants of the DXTC/BC compression scheme, and they share some common properties. Encoding is done on 4 × 4 texel blocks, also called tiles.Each block is encoded separately. The encoding is based on interpolation. For each encoded quantity, two reference values (e.g., colors) are stored. An interpolation factor is saved for each of the 16 texels in the block. It selects a value along the line between the two reference values, e.g., a color equal to or interpolated from the two stored colors. The compression comes from storing only two colors along with a short index value per pixel.

DXTC/BC压缩方案有七种变体,它们有一些共同的属性。编码是在4 × 4纹理像素块上完成的,也称为拼贴。每个块被单独编码。编码基于插值。对于每个编码量,存储两个参考值(例如,颜色)。为块中的16个纹理元素中的每一个保存插值因子。它沿着两个参考值之间的线选择一个值,例如,等于或从两个存储的颜色插值的颜色。压缩来自于只存储两种颜色以及每个像素的短索引值。

The exact encoding varies between the seven variants, which are summarized in Table 6.1. Note that “DXT” indicates the names in DirectX 9 and “BC” the names in DirectX 10 and beyond. As can be read in the table, BC1 has two 16-bit reference RGB values (5 bits red, 6 green, 5 blue), and each texel has a 2-bit interpolation factor to select from one of the reference values or two intermediate values. This represents a 6 : 1 texture compression ratio, compared to an uncompressed 24-bit RGB texture. BC2 encodes colors in the same way as BC1, but adds 4 bits per texel (bpt) for quantized (raw) alpha. For BC3, each block has RGB data encoded in the same way as a DXT1 block. In addition, alpha data are encoded using two 8-bit reference values and a per-texel 3-bit interpolation factor. Each texel can select either one of the reference alpha values or one of six intermediate values. BC4 has a single channel, encoded as alpha in BC3. BC5 contains two channels, where each is encoded as in BC3.

七种变体之间的确切编码各不相同,总结在表6.1中。请注意,“DXT”表示DirectX 9中的名称,“BC”表示DirectX 10及更高版本中的名称。从表中可以看出,BC1有两个16位参考RGB值(5位红色、6位绿色、5位蓝色),每个纹理元素有一个2位插值因子,用于从参考值之一或两个中间值中进行选择。与未压缩的24位RGB纹理相比,这表示6 : 1的纹理压缩比。BC2以与BC1相同的方式编码颜色,但是为量化(原始)alpha增加了每纹理元素4位(bpt)。对于BC3,每个块的RGB数据编码方式与DXT1块相同。此外,使用两个8位参考值和每个纹理像素3位插值因子对alpha数据进行编码。每个纹理元素可以选择一个参考alpha值或六个中间值中的一个。BC4有一个单通道,在BC3编码为alpha。BC5包含两个通道,每个通道都像BC3一样进行编码。

Table 6.1. Texture compression formats. All of these compress blocks of 4 × 4 texels. The storage column show the number of bytes (B) per block and the number of bits per texel (bpt). The notation for the reference colors is first the channels and then the number of bits for each channel. For example,RGB565 means 5 bits for red and blue while the green channel has 6 bits. 

表6.1。纹理压缩格式。所有这些压缩4 × 4纹理像素的块。存储栏显示每个块的字节数(B)和每个纹理元素的位数(bpt)。参考颜色的符号首先是通道,然后是每个通道的位数。例如,RGB565表示红色和蓝色为5位,而绿色通道为6位。

BC6H is for high dynamic range (HDR) textures, where each texel initially has 16-bit floating point value per R, G, and B channel. This mode uses 16 bytes, which results in 8 bpt. It has one mode for a single line (similar to the techniques above) and another for two lines where each block can select from a small set of partitions.Two reference colors can also be delta-encoded for better precision and can also have different accuracy depending on which mode is being used. In BC7, each block can have between one and three lines and stores 8 bpt. The target is high-quality texture compression of 8-bit RGB and RGBA textures. It shares many properties with BC6H,but is a format for LDR textures, while BC6H is for HDR. Note that BC6H and BC7 are called BPTC FLOAT and BPTC, respectively, in OpenGL. These compression techniques can be applied to cube or volume textures, as well as two-dimensional textures.

BC6H用于高动态范围(HDR)纹理,其中每个纹理元素最初在每个R、G和B通道中具有16位浮点值。这种模式使用16字节,结果是8 bpt。它有一种单线模式(类似于上面的技术),另一种双线模式,其中每个块可以从一小组分区中进行选择。两种参考颜色也可以进行delta编码以获得更高的精度,并且根据所使用的模式也可以具有不同的精度。在BC7中,每个块可以有一到三行,存储8 bpt。目标是8位RGB和RGBA纹理的高质量纹理压缩。它与BC6H共享许多属性,但它是LDR纹理的格式,而BC6H是HDR纹理的格式。注意,BC6H和BC7在OpenGL中分别被称为BPTC浮点和BPTC。这些压缩技术可以应用于立方体或体积纹理,以及二维纹理。

The main drawback of these compression schemes is that they are lossy. That is,the original image usually cannot be retrieved from the compressed version. In the case of BC1–BC5, only four or eight interpolated values are used to represent 16 pixels.If a tile has a larger number of distinct values in it, there will be some loss. In practice,these compression schemes generally give acceptable image fidelity if correctly used.

这些压缩方案的主要缺点是它们是有损耗的。也就是说,原始图像通常不能从压缩版本中检索。在BC1–BC5的情况下,仅使用四个或八个插值来表示16个像素。如果图块中有大量不同的值,将会有一些损失。实际上,如果正确使用,这些压缩方案通常给出可接受的图像保真度。

One of the problems with BC1–BC5 is that all the colors used for a block lie on a straight line in RGB space. For example, the colors red, green, and blue cannot be represented in a single block. BC6H and BC7 support more lines and so can provide higher quality.

BC1–BC5的一个问题是,用于一个块的所有颜色都位于RGB空间中的一条直线上。例如,红色、绿色和蓝色不能在单个块中表示。BC6H和BC7支持更多线路,因此可以提供更高的质量。

For OpenGL ES, another compression algorithm, called Ericsson texture compression (ETC) was chosen for inclusion in the API. This scheme has the same features as S3TC, namely, fast decoding, random access, no indirect lookups, and fixed rate. It encodes a block of 4×4 texels into 64 bits, i.e., 4 bits per texel are used.The basic idea is illustrated in Figure 6.21. Each 2 × 4 block (or 4 × 2, depending on which gives best quality) stores a base color. Each block also selects a set of four constants from a small static lookup table, and each texel in a block can select to add one of the values in this table. This modifies the luminance per pixel. The image quality is on par with DXTC.

对于OpenGL ES,API中选择了另一种压缩算法,称为Ericsson texture compression (ETC)。该方案具有与S3TC相同的特征,即快速解码、随机访问、无间接查找和固定速率。它将4×4纹理元素的块编码成64位,即每个纹理元素使用4位。基本思想如图6.21所示。每个2 × 4块(或4 × 2,取决于哪个给出最好的质量)存储一个基色。每个块还从一个小的静态查找表中选择一组四个常数,并且块中的每个纹理元素可以选择添加该表中的一个值。这修改了每个像素的亮度。画质和DXTC不相上下。

Figure 6.21. ETC (Ericsson texture compression) encodes the color of a block of pixels and then modifies the luminance per pixel to create the final texel color. 

图6.21。ETC (Ericsson纹理压缩)对像素块的颜色进行编码,然后修改每个像素的亮度,以创建最终的纹理元素颜色。

In ETC2, included in OpenGL ES 3.0, unused bit combinations were used to add more modes to the original ETC algorithm. An unused bit combination is the compressed representation (e.g., 64 bits) that decompresses to the same image as another compressed representation. For example, in BC1 it is useless to set both reference colors to be identical, since this will indicate a constant color block, which in turn can be obtained as long as one reference color contains that constant color. In ETC, one color can also be delta encoded from a first color with a signed number, and hence that computation can overflow or underflow. Such cases were used to signal other compression modes. ETC2 added two new modes with four colors, derived differently,per block, and a final mode that is a plane in RGB space intended to handle smooth transitions. Ericsson alpha compression (EAC) compresses an image with one component (e.g, alpha). This compression is like basic ETC compression but for only one component, and the resulting image stores 4 bits per texel. It can optionally be combined with ETC2, and in addition two EAC channels can be used to compress normals (more on this topic below). All of ETC1, ETC2, and EAC are part of the OpenGL 4.0 core profile, OpenGL ES 3.0, Vulkan, and Metal.

在包含在OpenGL ES 3.0中的ETC2中,未使用的位组合用于向原始ETC算法添加更多模式。未使用的比特组合是压缩表示(例如,64比特),其被解压缩为与另一压缩表示相同的图像。例如,在BC1中,将两种参考颜色设置为相同是无用的,因为这将指示恒定颜色块,只要一种参考颜色包含该恒定颜色,就可以获得该恒定颜色块。在ETC中,一种颜色也可以用带符号的数字从第一种颜色进行增量编码,因此计算可能上溢或下溢。这种情况被用于指示其他压缩模式。ETC2增加了两种新模式,每块有四种不同的颜色,最后一种模式是RGB空间中的一个平面,用于处理平滑过渡。Ericsson alpha压缩(EAC)用一个分量(例如,alpha)压缩图像。这种压缩类似于基本的ETC压缩,但只针对一个分量,结果图像每个纹理元素存储4位。它可以选择与ETC2结合,此外,两个EAC通道可用于压缩法线(下面将详细介绍)。所有ETC1、ETC2和EAC都是OpenGL 4.0核心配置文件、OpenGL ES 3.0、Vulkan和Metal的一部分。

Compression of normal maps (discussed in Section 6.7.2) requires some care. Compressed formats that were designed for RGB colors usually do not work well for normal xyz data. Most approaches take advantage of the fact that the normal is known to be unit length, and further assume that its z-component is positive (a reasonable assumption for tangent-space normals). This allows for only storing the x- and y-components of a normal. The z-component is derived on the fly as

法线贴图的压缩(在6.7.2节中讨论)需要一些小心。为RGB颜色设计的压缩格式通常不适用于普通的xyz数据。大多数方法利用了法线已知为单位长度的事实,并进一步假设它的z分量是正的(这是切线空间法线的合理假设)。这允许只存储法线的x和y分量。z分量的推导过程如下

This in itself results in a modest amount of compression, since only two components are stored, instead of three. Since most GPUs do not natively support three-component textures, this also avoids the possibility of wasting a component (or having to pack another quantity in the fourth component). Further compression is usually achieved by storing the x- and y-components in a BC5/3Dc-format texture. See Figure 6.22.Since the reference values for each block demarcate the minimum and maximum xand y-component values, they can be seen as defining a bounding box on the xy-plane.The three-bit interpolation factors allow for the selection of eight values on each axis,so the bounding box is divided into an 8 × 8 grid of possible normals. Alternatively,two channels of EAC (for x and y) can be used, followed by computation of z as defined above. 

这本身会导致适度的压缩,因为只存储了两个组件,而不是三个。由于大多数GPU本身不支持三组件纹理,这也避免了浪费一个组件的可能性(或者必须在第四个组件中打包另一个数量)。进一步的压缩通常通过在BC5/3Dc格式的纹理中存储x和y分量来实现。见图6.22。由于每个块的参考值划分了最小和最大的x轴和y轴分量值,它们可以被视为在xy平面上定义了一个边界框。三位插值因子允许在每个轴上选择八个值,因此边界框被划分为一个8 × 8的可能法线网格。或者,可以使用EAC的两个通道(用于x和y ),然后按照上述定义计算z。

Figure 6.22. Left: the unit normal on a sphere only needs to encode the x- and y-components. Right: for BC4/3Dc, a box in the xy-plane encloses the normals, and 8 × 8 normals inside this box can be used per 4 × 4 block of normals (for clarity, only 4 × 4 normals are shown here). 

图6.22。左图:球体上的单位法线只需要对x和y分量进行编码。右图:对于BC4/3Dc,xy平面中的一个框包围法线,这个框内的8 × 8法线可以用于每个4 × 4法线块(为了清楚起见,这里只显示了4 × 4法线)。

On hardware that does not support the BC5/3Dc or the EAC format, a common fallback [1227] is to use a DXT5-format texture and store the two components in the green and alpha components (since those are stored with the highest precision). The other two components are unused.

在不支持BC5/3Dc或EAC格式的硬件上,一个常见的后备[1227]是使用DXT5格式纹理,并将这两个分量存储在绿色和alpha分量中(因为这些分量以最高精度存储)。其他两个组件未使用。

PVRTC is a texture compression format available on Imagination Technologies’hardware called PowerVR, and its most widespread use is for iPhones and iPads.It provides a scheme for both 2 and 4 bits per texel and compresses blocks of 4 × 4 texels. The key idea is to provide two low-frequency (smooth) signals of the image,which are obtained using neighboring blocks of texel data and interpolation. Then 1 or 2 bits per texel are used in interpolate between the two signals over the image.

PVRTC是Imagination Technologies公司名为PowerVR的硬件上提供的一种纹理压缩格式,它最广泛的用途是用于iPhones和iPads。它为每个纹理元素提供2和4位的方案,并压缩4 × 4纹理元素的块。关键思想是提供图像的两个低频(平滑)信号,这是使用纹理像素数据的相邻块和插值获得的。然后,在图像上的两个信号之间的插值中,使用每个纹理元素1或2比特。

Adaptive scalable texture compression (ASTC) [1302] is different in that it compresses a block of n × m texels into 128 bits. The block size ranges from 4 × 4 up to 12 × 12, which results in different bit rates, starting as low as 0.89 bits per texel and going up to 8 bits per texel. ASTC uses a wide range of tricks for compact index representation, and the numbers of lines and endpoint encoding can be chosen per block. In addition, ASTC can handle anything from 1–4 channels per texture and both LDR and HDR textures. ASTC is part of OpenGL ES 3.2 and beyond.

自适应可伸缩纹理压缩(ASTC) [1302]的不同之处在于,它将一块n × m纹理元素压缩为128位。块大小的范围从4 × 4到12 × 12,这导致不同的比特率,从低至每个纹理元素0.89比特到高至每个纹理元素8比特。ASTC使用了各种各样的技巧来实现紧凑的索引表示,并且可以为每个块选择行数和端点编码。此外,ASTC可以处理任何从1-4通道的纹理和LDR和HDR纹理。ASTC是OpenGL ES 3.2及更高版本的一部分。

All the texture compression schemes presented above are lossy, and when compressing a texture, one can spend different amounts of time on this process. Spending seconds or even minutes on compression, one can obtain substantially higher quality;therefore, this is often done as an offline preprocess and is stored for later use. Alternatively,one can spend only a few milliseconds, with lower quality as a result,but the texture can be compressed in near real-time and used immediately. An example is a skybox (Section 13.3) that is regenerated every other second or so,when the clouds may have moved slightly. Decompression is extremely fast since it is done using fixed-function hardware. This difference is called data compression asymmetry, where compression can and does take a considerably longer time than decompression.

上面介绍的所有纹理压缩方案都是有损的,当压缩一个纹理时,人们可能会在这个过程中花费不同的时间。在压缩上花费几秒甚至几分钟,可以获得高得多的质量;因此,这通常作为离线预处理来完成,并存储起来以备后用。或者,可以仅花费几毫秒,结果质量较低,但是可以接近实时地压缩纹理并立即使用。一个例子是天空盒(13.3节),当云可能轻微移动时,它大约每隔一秒重新生成一次。解压缩速度极快,因为它是使用固定功能的硬件完成的。这种差异被称为数据压缩不对称,压缩可能并且确实比解压缩花费更长的时间。

Kaplanyan [856] presents several methods that can improve the quality of the compressed textures. For both textures containing colors and normal maps, it is recommended that the maps are authored with 16 bits per component. For color textures,one then performs a histogram renormalization (on these 16 bits), the effect of which is then inverted using a scale and bias constant (per texture) in the shader. Histogram normalization is a technique that spreads out the values used in an image to span the entire range, which effectively is a type of contrast enhancement. Using 16 bits per component makes sure that there are no unused slots in the histogram after renormalization,which reduces banding artifacts that many texture compression schemes may introduce. This is shown in Figure 6.23. In addition, Kaplanyan recommends using a linear color space for the texture if 75% of the pixels are above 116/255, and otherwise storing the texture in sRGB. For normal maps, he also notes that BC5/3Dc often compresses x independently from y, which means that the best normal is not always found. Instead, he proposes to use the following error metric for normals:

Kaplanyan [856]提出了几种可以提高压缩纹理质量的方法。对于包含颜色和法线贴图的纹理,建议使用每个组件16位来创作贴图。对于颜色纹理,然后执行直方图重正化(在这16位上),然后使用着色器中的比例和偏移常数(每纹理)反转其效果。直方图归一化是一种将图像中使用的值展开到整个范围的技术,这实际上是一种对比度增强。每个分量使用16位确保了在重正化之后直方图中没有未使用的槽,这减少了许多纹理压缩方案可能引入的带状伪像。这如图6.23所示。此外,Kaplanyan建议,如果75%的像素高于116/255,则对纹理使用线性颜色空间,否则将纹理存储在sRGB中。对于法线贴图,他还注意到BC5/3Dc经常独立于y压缩x,这意味着并不总是找到最佳法线。相反,他建议对法线使用以下误差度量:

where n is the original normal and nc is the same normal compressed, and then decompressed. 

其中n是原始法线,nc是压缩然后解压缩的相同法线。

Figure 6.23. The effect of using 16 bits per component versus 8 bits during texture compression.From left to right: original texture, DXT1 compressed from 8 bits per component, and DXT1 compressed from 16 bits per component with renormalization done in the shader. The texture has been rendered with strong lighting in order to more clearly show the effect. (Images appear courtesy of Anton Kaplanyan.) 

图6.23。在纹理压缩期间,每个组件使用16位与8位的效果。从左到右:原始纹理,DXT1从每个组件8位压缩,DXT1从每个组件16位压缩,在着色器中完成了重正化。为了更清楚地显示效果,纹理已经用强光渲染。(图片由Anton Kaplanyan提供。)

It should be noted that it is also possible to compress textures in a different color space, which can be used to speed up texture compression. A commonly used transform is RGB→YCoCg:

应当注意,也可以在不同的颜色空间中压缩纹理,这可以用来加速纹理压缩。一种常用的变换是RGB→YCoCg:

where Y is a luminance term and Co and Cg are chrominance terms. The inverse transform is also inexpensive: 

其中Y是亮度项,Co和Cg是色度项。相反的 转换也很便宜:

which amounts to a handful of additions. These two transforms are linear, which can be seen in that Equation 6.6 is a matrix-vector multiplication, which is linear (see Equations 4.1 and 4.2) in itself. This is of importance since, instead of storing RGB in a texture, it is possible to store YCoCg; the texturing hardware can still perform filtering in the YCoCg space, and then the pixel shader can convert back to RGB as needed. It should be noted that this transform is lossy in itself, which may or may not matter. 

这相当于少量的添加。这两个变换是线性的,可以看出等式6.6是矩阵向量乘法,其本身是线性的(见等式4.1和4.2)。这很重要,因为可以存储YCoCg,而不是在纹理中存储RGB纹理硬件仍然可以在YCoCg空间中执行过滤,然后像素着色器可以根据需要转换回RGB。应当注意,这种变换本身是有损耗的,这可能有关系,也可能没有关系。

There is another reversible RGB→YCoCg transform, which is summarized as

还有另一种可逆的RGB→YCoCg变换,概括如下

where ≫ shifts right. This means that it is possible to transform back and forth between, say, a 24-bit RGB color and the corresponding YCoCg representation without any loss.It should be noted that if each component in RGB has n bits then both Co and Cg have n + 1 bits each to guarantee a reversible transform; Y needs only n bits though. Van Waveren and Casta˜no [1852] use the lossy YCoCg transform to implement fast compression to DXT5/BC3 on either the CPU or the GPU. They store Y in the alpha channel (since it has the highest accuracy), while Co and Cg are stored in the first two components of RGB. Compression becomes fast since Y is stored and compressed separately. For the Co- and Cg-components, they find a twodimensional bounding box and select the box diagonal that produces the best results.Note that for textures that are dynamically created on the CPU, it may be better to compress the textures on the CPU as well. When textures are created through rendering on the GPU, it is usually best to compress the textures on the GPU as well.The YCoCg transform and other luminance-chrominance transforms are often used for image compression, where the chrominance components are averaged over 2 × 2 pixels. This reduces storage by 50% and often works fine since chrominance tends to vary slowly. Lee-Steere and Harmon [1015] take this a step further by converting to hue-saturation-value (HSV), downsampling both hue and saturation by a factor of 4 in x and y, and storing value as a single channel DXT1 texture. Van Waveren and Casta˜no also describe fast methods for compression of normal maps [1853]. 

≫向右移动。这意味着可以在24位RGB颜色和相应的YCoCg表示之间来回转换,而不会有任何损失。应当注意,如果RGB中的每个分量具有n位,则c0和Cg都具有n + 1位,以保证可逆变换;y只需要n个比特。Van Waveren和casta no[1852]使用有损YCoCg变换在CPU或GPU上实现对DXT5/BC3的快速压缩。它们将Y存储在alpha通道中(因为它具有最高的精度),而Co和Cg存储在RGB的前两个分量中。因为Y是分开存储和压缩的,所以压缩变得很快。对于Co和Cg分量,他们找到一个二维边界框,并选择产生最佳结果的框对角线。请注意,对于在CPU上动态创建的纹理,最好也在CPU上压缩纹理。当在GPU上通过渲染创建纹理时,通常最好也在GPU上压缩纹理。YCoCg变换和其他亮度-色度变换常用于图像压缩,其中色度分量在2 × 2像素上求平均值。这减少了50%的存储空间,并且通常工作良好,因为色度往往变化缓慢。Lee-Steere和Harmon [1015]更进一步,将其转换为色调-饱和度-值(HSV),在x和y方向以因子4对色调和饱和度进行下采样,并将值存储为单通道DXT1纹理。Van Waveren和Casta˜ no也描述了压缩法线贴图的快速方法[1853]。

A study by Griffin and Olano [601] shows that when several textures are applied to a geometrical model with a complex shading model, the quality of textures can often be low without any perceivable differences. So, depending on the use case, a reduction in quality may be acceptable. Fauconneau [463] presents a SIMD implementation of DirectX 11 texture compression formats.

Griffin和Olano [601]的一项研究表明,当多个纹理应用于具有复杂着色模型的几何模型时,纹理的质量通常很低,没有任何可察觉的差异。因此,根据用例,质量的降低可能是可以接受的。faucneau[463]提出了DirectX 11纹理压缩格式的SIMD实现。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰子糖莫莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值