Direct3D 12——纹理——DDS

DDS对于3D图形来说毎坤的格式,因为它支 A些专用于3D图形的特殊格式以及纹理頰。从本 质上来讲,它实为一种针对GPU而专门设计的图像格式。例如,DDS纹理满足用于3D图形开发的以下特征:

1.mipmap。
2.GPU能自行解压的压缩格式。
3.纹理数组。
4.立方体图(cube map,也有译作立方体贴图)。
5.体纹理(volume texture,也有译作体积纹理、立体纹理等)。

DDS格式能够支援不同的像素格式。像素格式由枚举类型DXGI_FORMAT中的成员来表示,但是并 非所有的格式都适用于DDS纹理。非压缩图像数据一般会采用下列格式。

1.DXGI_FORMAT_B8G8R8A8_UNORM 或DXGI_FORMAT_B8G8R8X8_UN0RM:适用于低动态范围 (low-dynamic-range)图像。

2.DXGI_FORMAT_R16G16B16A16_FL0AT:适用于高动态范围(high-dynamic-range)图像。

随着虚拟场景中纹理数量的大幅增长,对GPU端显存的需求也在迅速增加(我们需要将 所有的纹理都置于显存当中,以便在程序中快速地运用这些资源)。为了缓解这些内存的需求压力, DirectsD支持下列几种压缩纹理格式(也称作块压缩,block compression )

1.BC1(DXGI_FORMAT_BC1_UNORM):如果我们需要将图片压缩为支持3个颜色通道和仅有1 位(开/关)alpha分量的格式,则使用此格式。

2.BC2 ( DXGI_F0RMAT_BC2_UN0RM ):如果我们需要将图片压缩为支持3个颜色通道和仅有4 位alpha分量的格式,则应用此格式。

3.BC3( DXGI_F0RMAT_BC3_UN0RM ):如果我们需要将图片压缩为支持3个颜色通道和8位alpha 分量的格式,则采用此格式。

4.BC4 ( DXGI_F0RMAT_BC4_UN0RM ):如果我们需要将图片压缩为仅含有1个颜色通道的格式 (如灰度图像),则运用此格式。

5.BC5 ( DXGI_F0RMAT_BC5_UN0RM ):如果我们需要将图片压缩为只支持2个颜色通道的格式, 则使用此格式。

6.BC6 ( DXGI_FORMAT_BC6H_UF16 ):如果我们需要将图片压缩为HDR (高动态范围)图像数 据,则应用此格式。

7.BC7 ( DXGI_F0RMAT_BC7_UN0RM ):此格式用于对RGBA数据进行高质量的压缩。特别是, 此格式可极大地减少因压缩法线图而造成的误差。

经压缩后的纹理只能用于输入到渲染流水线中的着色器阶段,而不能作为渲染目标。

由于块压缩算法(block compression algorithm )要以4x4的像素块为基础进行处理,所以 纹理的尺寸必须为4的倍数。

这些格式的优点是可以使图像以压缩的形式存于显存之中,而在需要时,GPU便能动态 地对它们进行解压。将纹理压缩为DDS文件还有另一个好处,即更节省硬盘空间。

微软提供的DDS工具DirectXTexGitHub地址,在DDSTextureLoader.h/cpp文件里
https://github.com/microsoft/DirectXTK12

你可能感兴趣的:(Direct3D12,3d,图形渲染)