[Unity Shader]モバイルプラットフォームで正しく表示されない理由として考えられるもの:
Possible Reasons
まず、モバイルGPUはターゲットプラットフォームをサポートしていません。
ここでは、グラフィックAPIの特定の携帯電話GPUサポートを参照する必要があります。以下は、Unityの公式ドキュメントでサポートされている#pragmaターゲットの説明です。
サポートされているシェーダーモデルのリストは次のとおりです。機能のセットが大幅に増えています(場合によっては、プラットフォーム/ GPU要件が高くなっています)。
#pragma target 2.0
- Unityでサポートされているすべてのプラットフォームで動作します。 DX9シェーダーモデル2.0。
- 限られた量の算術およびテクスチャ命令8つの補間器頂点テクスチャサンプリングなし導関数なし フラグメントシェーダー
明示的ではありません LOD
テクスチャサンプリング。#pragma target 2.5(デフォルト)
- 3.0ターゲット(以下を参照)とほぼ同じですが、補間器が8つしかなく、明示的なLODテクスチャサンプリングがない点が異なります。
- WindowsPhoneのDX11機能レベル9.3にコンパイルします。
#pragma target 3.0
- DX9シェーダーモデル3.0:微分命令、テクスチャLODサンプリング、10個の補間器、より多くの数学/テクスチャ命令が許可されます。
- DX11機能レベル9.xGPU(ほとんどのWindows Phoneデバイスなど)ではサポートされていません。
- 存在するドライバー拡張機能と使用される機能によっては、一部のOpenGL ES2.0デバイスで完全にサポートされていない場合があります。
#pragma target 3.5(またはes3.0)
- OpenGL ES 3.0機能(D3Dプラットフォーム上のDX10 SM4.0、ジオメトリシェーダーなし)。
- DX11 9.x(WinPhone)、OpenGL ES2.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コンソールでサポートされています。
- 計算シェーダー、ランダムアクセステクスチャ書き込み、アトミックなどがあります。ジオメトリまたはテッセレーションシェーダーはありません。
#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ではサポートされていません。
- DX11 + SM5.0、OpenGL 4.1 +、OpenGL ES 3.1 + AEP、Vulkan、Metal(ジオメトリなし)、PS4 / XB1コンソールでサポートされています。
#pragma target 5.0
- DX11シェーダーモデル5.0。
- SM5.0より前のDX11、4.3より前のOpenGL(Macなど)、OpenGL ES 2.0 / 3.0 / 3.1、Metalではサポートされていません。
- DX11 + SM5.0、OpenGL 4.3 +、OpenGL ES 3.1 + AEP、Vulkan、Metal(ジオメトリなし)、PS4 / XB1コンソールでサポートされています。
要するに、シェーダーのプラグマは、電話の統合GPUサポートのOpenGLバージョンに対応するプラットフォームを説明します。
サポートされていない場合、シェーダーの最後のフォールバックステートメントにより、シェーダーに奇妙な問題が発生する可能性があります。
特定のデバイスに対応するGPUモデルは、CPUラダー図と検索対象に移動でき、BaiduGPUはAPIプラットフォームに対応します。
次に、#pragmaによるプラットフォームサポートの拒否
プロジェクトで見つかった問題は、私が注意深く見ていなかったかどうかわかりませんでした---次のように:
#pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2 exclude_renderers
除外...カリング...つまり、後で記述されたものはそれをサポートしません。 AndroidプラットフォームのグレとiOSの金属がすべて削除されているので、パッケージ化後に間違いなく問題になります...
それを保持し、当分の間これを覚えておいてください。 。