Unity 中使用的着色语言
着色器数据类型和精度

着色器编译目标级别

When writing either Surface Shaders or regular Shader Programs, the HLSL source can be compiled into different “shader models”. Higher shader compilation targets allow using more modern GPU functionality, but might make the shader not work on older GPUs or platforms.

Compilation target is indicated by #pragma target name directive, for example:

# pragma target 3.5

默认编译目标

默认情况下,Unity 将着色器编译为几乎支持的最低目标(“2.5”);处于 DirectX 着色器模型 2.0 和 3.0 之间。其他一些编译指令使着色器自动 编译成更高的目标:

  • Using a geometry shader (#pragma geometry) set compilation target to 4.0.
  • Using tessellation shaders (#pragma hull or #pragma domain) sets compilation target to 4.6.

支持的 #pragma 目标名称

以下是支持的着色器模型列表,其中包含大致增加的功能集(在某些情况下对于平台/GPU 的要求更高):

#pragma target 2.0

适用于 Unity 支持的所有平台。DX9 着色器模型 2.0。 有限数量的算术和纹理指令;8 个插值器;没有顶点纹理采样;片元着色器中没有衍生指令;没有显式的 LOD 纹理采样。

#pragma target 2.5(默认值)

  • 几乎与 3.0 目标相同(见下文),例外之处是仍然只有 8 个插值器,并且没有显式的 LOD 纹理采样。
  • Compiles into SM3.0 on DX9, and DX11 feature level 9.3 on Windows Phone.

#pragma target 3.0

  • DX9 着色器模型 3.0:衍生指令,纹理 LOD 采样,10 个插值器,允许更多的数学/纹理指令。
  • 在 DX11 功能级别 9.x GPU(例如大多数 Windows Phone 设备)上不支持。
  • 某些 OpenGL ES 2.0 设备可能无法完全支持,具体取决于存在的驱动程序扩展和使用的功能。

#pragma target 3.5(或 es3.0)

  • OpenGL ES 3.0 功能(D3D 平台上的 DX10 SM4.0,只是没有几何着色器)。
  • Not supported on DX9, DX11 9.x (WinPhone), OpenGL ES 2.0.
  • 在 DX11+、OpenGL 3.2+、OpenGL ES 3+、Metal、Vulkan 和 PS4/XB1 游戏主机上支持。
  • 着色器、纹理数组等中的本机整数运算。

#pragma target 4.0

  • DX11 着色器模型 4.0。
  • Not supported on DX9, DX11 9.x (WinPhone), OpenGL ES 2.0/3.0/3.1, Metal.
  • 在 DX11+、OpenGL 3.2+、OpenGL ES 3.1+AEP、Vulkan 和 PS4/XB1 游戏主机上支持。
  • 具有几何着色器以及 es3.0 目标所具有的一切功能。

#pragma target 4.5(或 es3.1)

  • OpenGL ES 3.1 功能(D3D 平台上的 DX11 SM5.0,只是没有曲面细分着色器)。
  • Not supported on DX9, DX11 before SM5.0, OpenGL before 4.3 (i.e. Mac), OpenGL ES 2.0/3.0.
  • 在 DX11+ SM5.0、OpenGL 4.3+、OpenGL ES 3.1、Metal、Vulkan 和 PS4/XB1 游戏主机上支持。
  • 有计算着色器、随机访问纹理写入、原子等。没有几何着色器和曲面细分着色器。

#pragma target 4.6(或 gl4.1)

  • OpenGL 4.1 功能(D3D 平台上的 DX11 SM5.0,只是没有计算着色器)。这基本上是 Mac 支持的最高 OpenGL 级别。
  • Not supported on DX9, DX11 before SM5.0, OpenGL before 4.1, OpenGL ES 2.0/3.0/3.1, Metal.
  • Supported on DX11+ SM5.0, OpenGL 4.1+, OpenGL ES 3.1+AEP, PS4/XB1 consoles.

#pragma target 5.0

  • DX11 着色器模型 5.0。
  • Not supported on DX9, DX11 before SM5.0, OpenGL before 4.3 (i.e. Mac), OpenGL ES 2.0/3.0/3.1, Metal.
  • Supported on DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1 consoles.

请注意,所有 OpenGL 类平台(包括移动平台)都被视为“支持着色器模型 3.0”。WP8/WinRT 平台(DX11 功能级别 9.x)被视为仅支持着色器模型 2.5。

另请参阅

Unity 中使用的着色语言
着色器数据类型和精度