Unityで使用するシェーダー言語
シェーダーのデータ型と精度

シェーダーコンパイルターゲットレベル

When writing either Surface Shaders or regular Shader Programs, the HLSL source can be compiled into different “shader models”. To allow the use of more modern GPI functionality, you must use higher shader compilation targets.

Note: Using higher shader compilation targets may prevent the shader from working on older GPUs or platforms.

Indicate the compilation target by using the #pragma target name directive. For example:

# pragma target 3.5

デフォルトコンパイルターゲット

デフォルトで、Unity はシェーダーをほとんど最低レベルの適応ターゲット (2.5) でにコンパイルします。これは、だいたい DirectX シェーダーモデル 2.0 と 3.0 の間と同等です。 他のコンパイラディレクティブはシェーダーを自動的により高いターゲットにコンパイルします。

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

Any shader not explicitly setting a function entry point through #pragma for geometry, hull or domain shaders will downgrade internal shader capability requirements. This allows non-DX11 targets with broader run-time and feature differences to be more compatible with the existing shader content.

For example, Unity supports tessellation shaders on Metal graphics, but Metal doesn’t support geometry shaders. Using #pragma target 5.0 is still valid, as long as you don’t use geometry shaders.

適用される #pragma ターゲット名

以下は、サポートされるシェーダーモデルとその増強される性能 (場合によっては、より高性能のプラットフォームや GPU が必要) の一覧です。

#pragma target 2.0

  • Unity でサポートされるすべてのプラットフォームに使用できます。DX9 シェーダーモデル 2.0
  • 制限された計算とテクスチャの指示。Interpolator 8個、頂点テクスチャサンプリング 無し、フラグメントシェーダーのデリバティブ 無し、明示的 LOD テクスチャサンプリング 無し。

#pragma target 2.5 (デフォルト)

  • 依然として補間が 8 しかない点、明白な LOD テクスチャサンプリングがない点 を除いて 3.0 ターゲットとほとんど同じ (後述を参照)
  • Windows Phone で DX11 フィーチャーレベル 9.3 にコンパイルします。

#pragma target 3.0

  • DX9 シェーダーモデル 3.0。デリバティブ指示、テクスチャ LOD サンプリング、Interpolator 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、ジオメトリシェーダーのみ含まれない)
  • 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
  • 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、テッセレーションシェーダーのみ含まれない)
  • SM5.0 より前の DX11 、4.3 より前の OpenGL (つまり Mac) 、OpenGL ES 2.0/3.0 はサポートされません。
  • DX11 以降の SM5.0、OpenGL 4.3 以降の OpenGL ES 3.1、Metal、Vulkan、PS4/XB1 コンソールでサポートされます。
  • コンピュートシェーダー、ランダムアクセステクスチャ書き込み、atomics などが含まれます。ジオメトリシェーダーとテッセレーションシェーダーは含まれません。

#pragma target 4.6 (または gl4.1)

  • OpenGL 4.1 機能 (D3D プラットフォームの DX11 SM5.0、コンピュートシェーダーのみ含まれない)。基本的には、これが最高レベル。 Mac にサポートされる OpenGL レベル
  • SM5.0 より前の DX11、4.1 より前の OpenGL、OpenGL ES 2.0/3.0/3.1、Metal ではサポートされません。
  • Supported on DX11+ SM5.0, OpenGL 4.1+, OpenGL ES 3.1+AEP, Vulkan, Metal (without geometry), PS4/XB1 consoles.

#pragma target 5.0

  • DX11 シェーダーモデル 5.0.
  • SM5.0 より前の DX11、4.3 より前の OpenGL (つまり Mac)、 OpenGL ES 2.0/3.0/3.1、Metal ではサポートされません。
  • Supported on DX11+ SM5.0, OpenGL 4.3+, OpenGL ES 3.1+AEP, Vulkan, Metal (without geometry), PS4/XB1 consoles.

(モバイルを含む) すべての OpenGL のようなプラットフォームは “シェーダーモデル 3.0 相当の能力を持つ” ものとして扱われることに注意してください。WP8/WinRT プラットフォーム(DX11 フィーチャーレベル 9.x)はシェーダーモデル 2.5 相当の能力のみを持つものとして扱われます。

参照


  • 2018–03–20 編集レビュー を行って修正されたページ
  • Shader #pragma directives added in Unity 2018.1 NewIn20181
  • Tessellation for Metal added in 2018.1
Unityで使用するシェーダー言語
シェーダーのデータ型と精度