このページには、特に GPU パフォーマンスが制限されているモバイルプラットフォームにおいて、ランタイムパフォーマンスを向上させるためのシェーダーの最適化に関する情報が含まれています。
複雑な計算を避けるには、以下のような処理を行います。
pow、log、sin などのリソース負荷の高い関数の代わりにルックアップテクスチャを使用します。normalize や dot などの Unity HLSL 関数を使用します。これにより、ドライバーがより適切なコードを生成できるようになります。シェーダーが計算を繰り返さないようにするために、以下のような処理を行います。
ワールド空間座標とテクスチャ座標を除くすべての変数に対して、float の代わりに half を使用します。詳細は、シェーダーで 16 ビット精度を使用するを参照してください。
Unity はサフィックスをサポートしないため、2.0h などの値は完全な float になります。つまり、GPU が計算を行う際に、他の値を float に変換したり戻したりしなければならない場合があります。これにより、シェーダーの速度が低下する可能性があります。
これを回避するには、サフィックスの代わりにキャストを使用します。例えば、2.0h の代わりに half(2.0) を使用します。
シェーダーの速度低下を回避するには、リソース負荷の高い以下の方法を避けます。
discard メソッドモバイル GPU が早期に深度テストを使用してレンダリングをスピードアップできるように、フラグメントシェーダーで深度バッファに書き込まないようにします。
深度テストの詳細については、ShaderLab コマンド:: ZTest を参照してください。