[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の金属がすべて削除されているので、パッケージ化後に間違いなく問題になります...

それを保持し、当分の間これを覚えておいてください。 。