使用 Visual Studio 中的图像内容管道导出丰富的纹理格式
本文介绍如何使用图像内容管道导出纹理,例如包含 mipmap 或预乘 alpha 的纹理,甚至是那些可用于 Direct2D 或 JavaScript 应用的纹理。
导出包含 mipmap 的纹理
在项目生成阶段,图像内容管道可从源图像生成 mipmap。 若要实现某些效果,有时必须手动指定每个 MIP 级别的图像内容。 无需手动指定每个 MIP 级别的图像内容时,在生成时生成 mipmap 可确保 mipmap 内容一直保持同步。还可避免在运行时生成 mipmap 的性能成本。
本文介绍:
将源映像配置为由图像内容管道进行处理。
配置图像内容管道,生成 mipmap。
导出 mipmap
Mipmapping 为 3D 游戏或应用中的带纹理图面提供自动屏幕空间细节层次。 它可通过预先计算纹理的向下采样版本,增强游戏或应用的渲染性能。 通过预先计算下采样版本,每次采样时,就不必对整个纹理进行向下采样。
导出包含 mipmap 的纹理
从基本纹理开始。 加载现有图像文件或创建一个。 若要支持 mipmap,请指定一个宽度和高度尺寸都是 2 的同次幂的纹理,如 64x64、256x256 或 512x512。
配置刚刚创建的纹理文件,使其由图像内容管道进行处理。 在“解决方案资源管理器”中,打开创建的纹理文件的快捷菜单,然后选择“属性”。 在“配置属性”>“常规”页上,将“项目类型”属性设置为“图像内容管道” 。 请确保将“内容”属性设置为“是”,并且将“从生成中排除”设置为“否”。 选择“应用”。
将出现“图像内容管道”配置属性页。
配置图像内容管道,生成 mipmap。 在“配置属性”>“图像内容管道”>“常规”页上,将“生成 Mip”属性设置为“是(/generatemips)” 。
选择“确定” 。
生成项目后,图像内容管道会将源图像从工作格式转换为指定的输出格式(包括 MIP 级别)。 将结果复制到项目的输出目录。
导出包含自左乘的 alpha 的纹理
图像内容管道可从源图像生成预乘 Alpha 纹理。 这些纹理比不包含预乘 alpha 的纹理更易于使用且更可靠。
本文档演示了这些活动:
将源映像配置为由图像内容管道进行处理。
配置图像内容管道以生成预乘 alpha。
预乘 Alpha
预乘 Alpha 相对于常规非预乘 Alpha 来说具有若干优点,因为它通过透明度(允许通过的底色的量)来分离纹素添加的颜色(纹素添加到场景中的颜色),更好的体现了现实世界与物理材质的光线交互。 使用预乘 Alpha 的一些优点为:
与预乘 Alpha 混合的是一种结合性运算,无论按何种顺序混合纹理,混合多个半透明纹理的结果都是相同的。
因为混合预乘 Alpha 具有结合性,所以简化了半透明对象的多通渲染。
通过使用预乘 Alpha,可以同时实现纯附加混合(通过将 Alpha 设置为零)和线性内插混合。 例如,在粒子系统中,附加混合火粒子可能会成为通过使用线性内插混合成的半透明烟粒子。 如果没有预乘 Alpha,将需要在烟粒子之外单独绘制火粒子,并修改绘图调用间的呈现状态。
使用预乘 Alpha 时,纹理拥有更高的压缩质量,并且它们不显示变色的边缘(或“晕轮效应”),这种边缘会在混合不使用预乘 alpha 的纹理时出现。
创建使用预乘 Alpha 的纹理
从基本纹理开始。 加载现有图像文件或创建一个。
配置纹理文件,使其由图像内容管道进行处理。 在“解决方案资源管理器”中,打开纹理文件的快捷菜单,然后选择“属性”。 在“配置属性”>“常规”页上,将“项目类型”属性设置为“图像内容管道” 。 请确保将“内容”属性设置为“是”,并且将“从生成中排除”设置为“否”,然后选择“应用”按钮。 将出现“图像内容管道”配置属性页。
配置图像内容管道,生成预乘 Alpha。 在“配置属性”>“图像内容管道”>“常规”页上,将“转换为预乘 Alpha 格式”属性设置为“是 (/generatepremultipliedalpha)” 。
选择 “确定” 按钮。
生成项目后,图像内容管道将源图像从工作格式转换为指定的输出格式,其中包括将图像转换为预乘 Alpha 格式,该结果将复制到项目的输出目录中。
使用 Direct2D 或 JavaScript 应用导出纹理以供使用
图像内容管道可以生成与 Direct2D 的内部呈现约定兼容的纹理。 这种类型的纹理适合在使用 Direct2D 的应用和使用 JavaScript 创建的 UWP 应用中使用。
本文档演示了这些活动:
将源映像配置为由图像内容管道进行处理。
配置图像内容管道以生成可在 Direct2D 或 JavaScript 应用中使用的纹理。
生成块压缩的 .dds 文件。
生成预乘的 Alpha。
禁用 mipmap 生成。
Direct2D 中的呈现约定
Direct2D 的上下文中使用的纹理必须符合这些 Direct2D 内部呈现约定:
Direct2D 通过使用预乘的 Alpha 实现透明度和半透明度。 与 Direct2D 一起使用的纹理必须包含预乘的 Alpha,即使该纹理不使用透明度或半透明度也是如此。
必须通过使用以下块压缩格式之一以 .dds 格式应用纹理:
BC1_UNORM 压缩
BC2_UNORM 压缩
BC3_UNORM 压缩
mipmap 不受支持。
创建与 Direct2D 呈现约定相兼容的纹理
从基本纹理开始。 加载现有图像或创建新图像。 若要支持 .dds 格式的块压缩,请指定宽度和高度为 4 的倍数(例如,100x100、128x128 或 256x192)的纹理。 由于不支持 mipmapping,因此纹理无需为正方形,并且大小无需为 2 的幂。
配置纹理文件,使其由图像内容管道进行处理。 在“解决方案资源管理器”中,打开创建的纹理文件的快捷菜单,然后选择“属性”。 在“配置属性”>“常规”页上,将“项目类型”属性设置为“图像内容管道” 。 请确保将“内容”属性设置为“是”,并且将“从生成中排除”设置为“否”,然后选择“应用”按钮。 将出现“图像内容管道”配置属性页。
将输出格式设置为块压缩的格式之一。 在“配置属性”>“图像内容管道”>“常规”页上,将“压缩”属性设置为“BC3_UNORM 压缩 (/compress:BC3_UNORM)” 。 根据具体需求,还可以选择任何其他的 BC1、BC2 或 BC3 格式。 Direct2D 当前不支持 BC4、BC5、BC6 或 BC7 纹理。 有关不同 BC 格式的详细信息,请参阅 Block Compression (Direct3D 10)(块压缩 (Direct3D 10))。
注意
指定的压缩格式确定图像内容管道生成的文件的格式。 这不同于“图像编辑器”中源映像的“格式”属性,该“格式”属性确定存储在磁盘上时源映像文件的格式 - 即工作格式。 通常情况下,不需要已压缩的工作格式。
配置图像内容管道以生成使用预乘的 Alpha 的输出。 在“配置属性”>“图像内容管道”>“常规”页上,将“转换为预乘 Alpha 格式”属性设置为“是 (/generatepremultipliedalpha)” 。
配置图像内容管道,使其不生成 mipmap。 在“配置属性”>“图像内容管道”>“常规”页上,将“生成 Mip”属性设置为“否” 。
选择 “确定” 按钮。
生成项目时,图像内容管道会将源图像从工作格式转换为指定的输出格式(转换包括生成预乘 Alpha),并且结果将被复制到项目的输出目录。
相关内容
访问使用纹理和图像,详细了解如何使用 Visual Studio 中的图像编辑器创建或修改 DirectX 应用开发中使用的纹理和图像。