以下は、Unity が使用するシェーダーモデルのリストと、それぞれが対応する #pragma require の値の組み合わせです。
注意Unity のシェーダーモデルは、DirectX のシェーダーモデルや OpenGL のバージョン要件と似ていますが、完全に対応しているわけではありません。説明をよく読んで、違いを確実に理解してください。
| 値 | 説明 | サポート | 相当する #pragma require 値 |
|---|---|---|---|
2.0 |
DirectX シェーダーモデル 2.0 に相当。 計算とテクスチャの指示に制限あり。Interpolator 8 個、頂点テクスチャサンプリングなし、フラグメントシェーダーのデリバティブなし、明示的 LOD テクスチャサンプリングなし。 |
Unity がサポートするすべてのプラットフォームで動作します。 | 該当なし |
2.5 |
3.0 とほぼ同じですが、Interpolator が 8 個しかなく、明示的な LOD テクスチャサンプリングもありません。 | DirectX 11 機能レベル 9 以降 OpenGL 3.2 以降 Vulkan Metal |
derivatives |
3.0 |
DirectX シェーダーモデル 3.0 に相当。 . |
DirectX 11 機能レベル 10 以降 OpenGL 3.2 以降 OpenGL ES 3.0 以降 Vulkan Metal |
2.5 のすべてに加えて、interpolators10 samplelod fragcoord
|
3.5 |
OpenGL ES 3.0 に相当。 |
DirectX 11.0 機能レベル 10 以降 OpenGL 3.2 以降 OpenGL ES 3 以降 Vulkan Metal |
3.0 のすべてに加えて、interpolators15 mrt4 integers 2darray instancing
|
4.0 |
DirectX シェーダーモデル 4.0 に相当。ただし、8 つの MRT のサポート要件なし。 | DirectX 11.0 機能レベル 10 以降 Desktop OpenGL 3.x OpenGL ES 3.1 OpenGL ES 3.1 + Android 拡張機能パック (AEP) OpenGL 3.2 以降 Vulkan Metal (ジオメトリステージが定義されていない場合) |
3.5 のすべてに加えて、geometry
|
gl4.1 |
OpenGL 4.1 に相当。 | Desktop OpenGL 4.1 シェーダーモデル 4.0 + テッセレーションにより、macOS 10.9 の機能と一致。 |
4.0 のすべてに加えて、cubearray tesshw tessellation msaatex
|
4.5 |
OpenGL ES 3.1 に相当。 | DirectX 11 機能レベル 11 以降 OpenGL 4.3 以降 OpenGL ES 3.1 Vulkan Metal |
3.5 のすべてに加えて、compute randomwrite msaatex
|
4.6 |
OpenGL 4.1 に相当。 Mac でサポートされている OpenGL の最高レベルです。 |
DirectX 11 機能レベル 11 以降 OpenGL 4.1 以降 OpenGL ES 3.1 + AEP Vulkan Metal (ジオメトリステージが定義されておらず、ハルまたはドメインステージが定義されていない場合) |
4.0 のすべてに加えて、cubearray tesshw tessellation msaatex
|
5.0 |
DirectX シェーダーモデル 5.0 に相当。ただし、32 の Interpolator またはキューブマップ配列のサポート要件なし。 | DirectX 11 機能レベル 11 以降 Desktop OpenGL 4.2 以降 OpenGL 4.3 以降 OpenGL ES 3.1 + AEP Vulkan Metal (ジオメトリステージが定義されておらず、ハルまたはドメインステージが定義されていない場合) |
4.0 のすべてに加えて、compute randomwrite msaatex tesshw tessellation
|
コンソールプラットフォームでのシェーダーモデルのサポートについては、プラットフォーム別のドキュメントを参照してください。
注:
mrt8 が、シェーダーモデル 5.0 には interpolators32 と cubearray が含まれています。Unity には、互換性を高めるために、これらの機能は含まれていません。これらの機能を必須にするには、明示的に #pragma require ディレクティブを使用してください。geometry を必要とするターゲットを使用しているが、シェーダーがジオメトリステージを定義していない場合、Unity はコンパイル時に geometry を要件リストから削除します。tessellation を必要とするターゲットを使用しているが、シェーダーがハルまたはドメインステージを定義していない場合、Unity はコンパイル時に tessellation を要件リストから削除します。