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.GraphicsFormatUnityEngine.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 格式,文件更小。 ⚠️ 近似

备注

  1. 压缩格式

    • BC1-7ETC2ASTCPVRTC 是不同平台的压缩标准。
    • BC 系列主要用于 PC/主机,ETC2ASTC 用于移动端,PVRTC 用于 iOS。
  2. 浮点格式

    • R16G16B16A16_SFloat(RGBAHalf)和 R32G32B32A32_SFloat(RGBAFloat)用于 HDR 或科学计算。
  3. 弃用格式

    • 部分旧格式(如 YUY2)在 GraphicsFormat 中没有直接对应项,建议使用新格式替代。
  4. 平台兼容性


示例代码:格式转换

// 将 TextureFormat 转换为 GraphicsFormat
TextureFormat oldFormat = TextureFormat.RGBA32;
GraphicsFormat newFormat = GraphicsFormatUtility.GetGraphicsFormat(oldFormat, false);

// 将 GraphicsFormat 转换为 TextureFormat
GraphicsFormat modernFormat = GraphicsFormat.R8G8B8A8_UNorm;
TextureFormat legacyFormat = GraphicsFormatUtility.GetTextureFormat(modernFormat);

通过此表格,可以快速找到新旧格式之间的映射关系,确保在升级项目或优化性能时选择合适的格式。

kumakoko avatar
kumakoko
pure coder
comments powered by Disqus