D3D12渲染技术之纹理数据源

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxw167/article/details/82829106

为游戏创建纹理的最流行的方法是让美工在Photoshop或其他图像编辑器中制作它们,然后将它们保存为图像文件,如BMP,DDS,TGA或PNG。 游戏应用程序将加载时的图像数据加载到ID3D12Resource对象中, 对于实时图形应用程序,DDS(DirectDraw表面格式)图像文件格式是首选,因为它支持GPU本身理解的各种图像格式; 特别是,它支持可由GPU解压缩的压缩图像格式。
当美工完成纹理制作时,它们会导出到DDS文件,以用于游戏应用程序。
下面介绍DDS图片:
DDS格式是3D图形的理想选择,因为它支持专门用于3D图形的特殊格式和纹理类型, 它本质上是为GPU构建的图像格式。 例如,DDS纹理支持3D图形开发中使用的以下功能:
1、mipmap
2、可压缩的
3、cubemap
4、体积纹理
DDS格式可以支持不同的像素格式, 像素格式由DXGI_FORMAT枚举类型的成员描述; 但是,并非所有格式都适用于DDS纹理。 通常,对于未压缩的图像数据,将使用以下格式:
1、DXGI_FORMAT_B8G8R8A8_UNORM
2、DXGI_FORMAT_R16G16B16A16_FLOAT
虚拟世界的纹理数百个,纹理的GPU内存需求迅速增加(请记住,我们需要将所有这些纹理保留在GPU内存中以便快速应用它们)。 为了帮助减轻这些内存需求,Direct3D支持压缩纹理格式:BC1,BC2,BC3,BC4,BC5,BC6和BC7。
压缩纹理只能用作渲染管道的着色器阶段的输入,而不能用作渲染目标。
因为块压缩算法适用于4×4像素块,所以纹理的尺寸必须是4的倍数。

同样,这些格式的优点是它们可以压缩存储在GPU内存中,然后在需要时由GPU即时解压缩,存储压缩在DDS文件中的纹理的另一个好处是它们也占用较少的硬盘空间。

创建DDS文件

如果不熟悉图形编程,如果不熟悉DDS,如果更习惯使用BMP,TGA或PNG等格式,以下是将传统图像格式转换为DDS格式的两种方法:
1、NVIDIA为Adobe Photoshop提供了一个插件,可以将图像导出为DDS格式。 该插件可在
https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop获得。 在其他选项中,它允许指定DDS文件的DXGI_FORMAT,并生成mipmap。
2、Microsoft提供了一个名为texconv的命令行工具,可用于将传统图像格式转换为DDS。 此外,texconv程序可用于更多,例如调整图像大小,更改像素格式,生成mipmap甚至更多。 可以在以下网站

https://directxtex.codeplex.com/wikipage?title=Texconv&referringTitle=Documentation找到文档和下载链接。

以下示例是输入BMP文件bricks.bmp,并以格式BC3_UNORM输出DDS文件bricks.dds并生成具有10个mipmap的mipmap链。

texconv -m 10 -f BC3_UNORM treeArray.dds

Microsoft提供了一个名为texassemble的附加命令行工具,用于创建存储纹理数组,体积贴图和立方体贴图的DDS文件。 我们将在后面部分使用此工具。 其文档和下载链接可以在
https://directxtex.codeplex.com/wikipage?title=Texassemble&referringTitle=Documentation找到。

Visual Studio 2015具有内置的图像编辑器,除了其他流行的格式外,还支持DDS文件。 我们可以将图像拖到Visual Studio 2015中,它应该在图像编辑器中打开它, 对于DDS文件,可以查看mipmap级别,更改DDS格式以及查看各种颜色通道。

猜你喜欢

转载自blog.csdn.net/jxw167/article/details/82829106