Unity3D中枚举类型UnityEngine.Experimental.Rendering.GraphicsFormat详解
Table of Contents
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
在Unity中,UnityEngine.Experimental.Rendering.GraphicsFormat
枚举类型定义了多种图形格式,用于描述纹理、渲染目标等的像素格式。每种格式都有不同的通道数、每个像素的字节数以及适用场景。以下是 GraphicsFormat
中每个值的具体含义、通道数、每个像素的字节数等详细信息:
1. 常用图形格式
枚举值 | 含义 | 通道数 | 每个像素字节数 | 描述 |
---|---|---|---|---|
None | 无格式 | - | - | 未定义格式。 |
R8_UNorm | 单通道 8 位无符号归一化 | 1 | 1 | 适用于单通道数据,如灰度图。 |
R8_SNorm | 单通道 8 位有符号归一化 | 1 | 1 | 适用于单通道有符号数据。 |
R8_UInt | 单通道 8 位无符号整数 | 1 | 1 | 适用于单通道无符号整数数据。 |
R8_SInt | 单通道 8 位有符号整数 | 1 | 1 | 适用于单通道有符号整数数据。 |
R16_UNorm | 单通道 16 位无符号归一化 | 1 | 2 | 适用于单通道高精度数据。 |
R16_SNorm | 单通道 16 位有符号归一化 | 1 | 2 | 适用于单通道高精度有符号数据。 |
R16_UInt | 单通道 16 位无符号整数 | 1 | 2 | 适用于单通道高精度无符号整数数据。 |
R16_SInt | 单通道 16 位有符号整数 | 1 | 2 | 适用于单通道高精度有符号整数数据。 |
R16_SFloat | 单通道 16 位有符号浮点数 | 1 | 2 | 适用于单通道高精度浮点数数据。 |
R32_UInt | 单通道 32 位无符号整数 | 1 | 4 | 适用于单通道超高精度无符号整数数据。 |
R32_SInt | 单通道 32 位有符号整数 | 1 | 4 | 适用于单通道超高精度有符号整数数据。 |
R32_SFloat | 单通道 32 位有符号浮点数 | 1 | 4 | 适用于单通道超高精度浮点数数据。 |
R8G8_UNorm | 双通道 8 位无符号归一化 | 2 | 2 | 适用于双通道数据,如法线贴图的 XY 通道。 |
R8G8_SNorm | 双通道 8 位有符号归一化 | 2 | 2 | 适用于双通道有符号数据。 |
R8G8_UInt | 双通道 8 位无符号整数 | 2 | 2 | 适用于双通道无符号整数数据。 |
R8G8_SInt | 双通道 8 位有符号整数 | 2 | 2 | 适用于双通道有符号整数数据。 |
R16G16_UNorm | 双通道 16 位无符号归一化 | 2 | 4 | 适用于双通道高精度数据。 |
R16G16_SNorm | 双通道 16 位有符号归一化 | 2 | 4 | 适用于双通道高精度有符号数据。 |
R16G16_UInt | 双通道 16 位无符号整数 | 2 | 4 | 适用于双通道高精度无符号整数数据。 |
R16G16_SInt | 双通道 16 位有符号整数 | 2 | 4 | 适用于双通道高精度有符号整数数据。 |
R16G16_SFloat | 双通道 16 位有符号浮点数 | 2 | 4 | 适用于双通道高精度浮点数数据。 |
R32G32_UInt | 双通道 32 位无符号整数 | 2 | 8 | 适用于双通道超高精度无符号整数数据。 |
R32G32_SInt | 双通道 32 位有符号整数 | 2 | 8 | 适用于双通道超高精度有符号整数数据。 |
R32G32_SFloat | 双通道 32 位有符号浮点数 | 2 | 8 | 适用于双通道超高精度浮点数数据。 |
R8G8B8A8_UNorm | 四通道 8 位无符号归一化 | 4 | 4 | 适用于 RGBA 颜色数据。 |
R8G8B8A8_SNorm | 四通道 8 位有符号归一化 | 4 | 4 | 适用于 RGBA 有符号数据。 |
R8G8B8A8_UInt | 四通道 8 位无符号整数 | 4 | 4 | 适用于 RGBA 无符号整数数据。 |
R8G8B8A8_SInt | 四通道 8 位有符号整数 | 4 | 4 | 适用于 RGBA 有符号整数数据。 |
R16G16B16A16_UNorm | 四通道 16 位无符号归一化 | 4 | 8 | 适用于 RGBA 高精度数据。 |
R16G16B16A16_SNorm | 四通道 16 位有符号归一化 | 4 | 8 | 适用于 RGBA 高精度有符号数据。 |
R16G16B16A16_UInt | 四通道 16 位无符号整数 | 4 | 8 | 适用于 RGBA 高精度无符号整数数据。 |
R16G16B16A16_SInt | 四通道 16 位有符号整数 | 4 | 8 | 适用于 RGBA 高精度有符号整数数据。 |
R16G16B16A16_SFloat | 四通道 16 位有符号浮点数 | 4 | 8 | 适用于 RGBA 高精度浮点数数据。 |
R32G32B32A32_UInt | 四通道 32 位无符号整数 | 4 | 16 | 适用于 RGBA 超高精度无符号整数数据。 |
R32G32B32A32_SInt | 四通道 32 位有符号整数 | 4 | 16 | 适用于 RGBA 超高精度有符号整数数据。 |
R32G32B32A32_SFloat | 四通道 32 位有符号浮点数 | 4 | 16 | 适用于 RGBA 超高精度浮点数数据。 |
B8G8R8A8_UNorm | 四通道 BGRA 8 位无符号归一化 | 4 | 4 | 适用于 BGRA 颜色数据。 |
B8G8R8A8_SNorm | 四通道 BGRA 8 位有符号归一化 | 4 | 4 | 适用于 BGRA 有符号数据。 |
B8G8R8A8_UInt | 四通道 BGRA 8 位无符号整数 | 4 | 4 | 适用于 BGRA 无符号整数数据。 |
B8G8R8A8_SInt | 四通道 BGRA 8 位有符号整数 | 4 | 4 | 适用于 BGRA 有符号整数数据。 |
B8G8R8X8_UNorm | 四通道 BGRA 8 位无符号归一化(无 Alpha) | 4 | 4 | 适用于 BGRA 颜色数据(无 Alpha 通道)。 |
B8G8R8X8_SNorm | 四通道 BGRA 8 位有符号归一化(无 Alpha) | 4 | 4 | 适用于 BGRA 有符号数据(无 Alpha 通道)。 |
B8G8R8X8_UInt | 四通道 BGRA 8 位无符号整数(无 Alpha) | 4 | 4 | 适用于 BGRA 无符号整数数据(无 Alpha 通道)。 |
B8G8R8X8_SInt | 四通道 BGRA 8 位有符号整数(无 Alpha) | 4 | 4 | 适用于 BGRA 有符号整数数据(无 Alpha 通道)。 |
R10G10B10A2_UNorm | 四通道 RGBA,RGB 各 10 位,A 2 位 | 4 | 4 | 适用于高精度 RGB 和低精度 Alpha 数据。 |
R10G10B10A2_UInt | 四通道 RGBA,RGB 各 10 位,A 2 位 | 4 | 4 | 适用于高精度 RGB 和低精度 Alpha 无符号整数数据。 |
R11G11B10_UFloat | 三通道 RGB,R 和 G 各 11 位,B 10 位 | 3 | 4 | 适用于 HDR 数据,节省内存。 |
D16_UNorm | 16 位深度 | 1 | 2 | 适用于深度缓冲区。 |
D24_UNorm_S8_UInt | 24 位深度 + 8 位模板 | 2 | 4 | 适用于深度和模板缓冲区。 |
D32_SFloat | 32 位深度 | 1 | 4 | 适用于高精度深度缓冲区。 |
D32_SFloat_S8_UInt | 32 位深度 + 8 位模板 | 2 | 5 | 适用于高精度深度和模板缓冲区。 |
2. 总结
GraphicsFormat
提供了多种图形格式,适用于不同的场景和平台。- 通道数 和 每个像素的字节数 是选择图形格式时的重要参数。
- 浮点格式(如 R16_SFloat、R32G32B32A32_SFloat)适用于高精度数据存储,如 HDR 贴图或物理模拟数据。
- 深度/模板格式(如 D24_UNorm_S8_UInt、D32_SFloat_S8_UInt)适用于深度和模板缓冲区。
根据具体需求(如平台、内存占用、图像质量等),选择合适的图形格式。
以下是 UnityEngine.Experimental.Rendering.GraphicsFormat 和 UnityEngine.TextureFormat 枚举类型的对应关系表格。表格中列出了常见格式的映射关系,包括通道数、位深度、是否压缩等关键信息。
GraphicsFormat 与 TextureFormat 对应关系表
TextureFormat | GraphicsFormat | 通道数 | 位深度/压缩方式 | 描述 | 是否精确对应 |
---|---|---|---|---|---|
Alpha8 | R8_UNorm |
1 | 8 位无符号归一化 | 单通道 Alpha 数据,例如遮罩纹理。 | ✅ |
ARGB4444 | B4G4R4A4_UNormPack16 |
4 | 16 位 (4x4) | 低精度 ARGB 格式,每通道 4 位。 | ✅ |
RGB24 | R8G8B8_UNorm |
3 | 24 位 (8x3) | 无 Alpha 的 RGB 颜色数据。 | ✅ |
RGBA32 | R8G8B8A8_UNorm |
4 | 32 位 (8x4) | 标准 RGBA 颜色数据。 | ✅ |
RGB565 | B5G6R5_UNormPack16 |
3 | 16 位 (5-6-5) | 压缩 RGB 格式,绿色通道精度更高。 | ✅ |
DXT1 | BC1_RGB_UNormBlock |
3 | DXT1 压缩 | 不透明或 1 位 Alpha 的压缩格式。 | ✅ |
DXT5 | BC3_UNormBlock |
4 | BC3 压缩 | 带完整 Alpha 通道的压缩格式。 | ✅ |
RGBA4444 | R4G4B4A4_UNormPack16 |
4 | 16 位 (4x4) | 低精度 RGBA 格式,每通道 4 位。 | ✅ |
RGBAHalf | R16G16B16A16_SFloat |
4 | 64 位 (16x4) | 半精度浮点 HDR 数据。 | ✅ |
BC4 | BC4_UNormBlock |
1 | BC4 压缩 | 单通道(如高度图)压缩格式。 | ✅ |
BC5 | BC5_UNormBlock |
2 | BC5 压缩 | 双通道(如法线贴图)压缩格式。 | ✅ |
BC6H | BC6H_SFloatBlock |
3 | BC6H 压缩 | HDR 压缩格式,支持浮点数据。 | ✅ |
BC7 | BC7_UNormBlock |
4 | BC7 压缩 | 高质量 RGBA 压缩格式。 | ✅ |
ETC_RGB4 | ETC2_RGB8_UNormBlock |
3 | ETC2 压缩 | 兼容 Android 的 RGB 压缩格式。 | ✅ |
ETC2_RGBA8 | ETC2_RGBA8_UNormBlock |
4 | ETC2 压缩 | 兼容 Android 的 RGBA 压缩格式。 | ✅ |
ASTC_4x4 | ASTC_4x4_UNormBlock |
4 | ASTC 压缩 | 高质量 ASTC 压缩格式(4x4 块)。 | ✅ |
PVRTC_RGB2 | PVRTC1_2_RGB_UNormBlock |
3 | PVRTC1 压缩 | iOS 低质量 RGB 压缩格式。 | ✅ |
PVRTC_RGBA2 | PVRTC1_2_RGBA_UNormBlock |
4 | PVRTC1 压缩 | iOS 低质量 RGBA 压缩格式。 | ✅ |
PVRTC_RGB4 | PVRTC1_4_RGB_UNormBlock |
3 | PVRTC1 压缩 | iOS 中等质量 RGB 压缩格式。 | ✅ |
PVRTC_RGBA4 | PVRTC1_4_RGBA_UNormBlock |
4 | PVRTC1 压缩 | iOS 中等质量 RGBA 压缩格式。 | ✅ |
R16 | R16_UNorm |
1 | 16 位无符号整数 | 单通道高精度数据(如深度图)。 | ✅ |
RFloat | R32_SFloat |
1 | 32 位浮点 | 单通道超高精度浮点数据(如物理模拟)。 | ✅ |
RGBAFloat | R32G32B32A32_SFloat |
4 | 128 位浮点 | 四通道超高精度浮点数据(如科学计算)。 | ✅ |
DXT1Crunched | BC1_RGB_UNormBlock (压缩后) |
3 | DXT1 压缩 | 压缩后的 DXT1 格式,文件更小。 | ⚠️ 近似 |
DXT5Crunched | BC3_UNormBlock (压缩后) |
4 | BC3 压缩 | 压缩后的 DXT5 格式,文件更小。 | ⚠️ 近似 |
备注
-
压缩格式:
BC1-7
、ETC2
、ASTC
和PVRTC
是不同平台的压缩标准。BC
系列主要用于 PC/主机,ETC2
和ASTC
用于移动端,PVRTC
用于 iOS。
-
浮点格式:
R16G16B16A16_SFloat
(RGBAHalf)和R32G32B32A32_SFloat
(RGBAFloat)用于 HDR 或科学计算。
-
弃用格式:
- 部分旧格式(如
YUY2
)在GraphicsFormat
中没有直接对应项,建议使用新格式替代。
- 部分旧格式(如
-
平台兼容性:
- 具体支持情况需参考 Unity 官方文档。
示例代码:格式转换
// 将 TextureFormat 转换为 GraphicsFormat
TextureFormat oldFormat = TextureFormat.RGBA32;
GraphicsFormat newFormat = GraphicsFormatUtility.GetGraphicsFormat(oldFormat, false);
// 将 GraphicsFormat 转换为 TextureFormat
GraphicsFormat modernFormat = GraphicsFormat.R8G8B8A8_UNorm;
TextureFormat legacyFormat = GraphicsFormatUtility.GetTextureFormat(modernFormat);
通过此表格,可以快速找到新旧格式之间的映射关系,确保在升级项目或优化性能时选择合适的格式。