
マテリアルとシェーダーに関するその他のベストプラクティス
Tutorial
intermediate
+0XP
0 mins
Unity Technologies
このチュートリアルでは、3D モバイルアプリケーションのマテリアルとシェーダーを最適化する際のその他のベストプラクティスを紹介します。
1. シェーダーはシンプルにする
オーバードローが避けられない場合は、シェーダーをできる限りシンプルにします。以下の原則を心に留めておくようにしてください。
- できる限りシンプルなシェーダー(unlit シェーダーなど)を使用し、不要な機能の使用を避けます。
- パーティクル用に設計された Unity の組み込みのシェーダーを使用します。
- オーバードローを最小化するため、ゲーム内のパーティクルの数とサイズを減らします。
2. プロファイルシェーダーの複雑性
テクスチャサンプラーや透過度などの機能を追加すると、シェーダーがさらに複雑になり、レンダリングに影響が及ぶ可能性があります。シェーダーのプロファイリングは頻繁に行うことをおすすめします。
Arm では、それを行うための、Mali オフラインシェーダーコンパイラーや Streamline などのツールを提供しています。ただし、これらのツールを活用するには、グラフィックスに関する高度な知識が要求されます。
3. 頂点シェーダーの数学演算
プロジェクトでは、頂点シェーダーとフラグメントシェーダーを組み合わせて、特定の外観を生み出すことが一般的です。
頂点シェーダーは各頂点に適用され、ピクセルシェーダーは各ピクセルに適用されます。通常、画面には頂点よりも多くのピクセルがレンダリングされます。つまり、ピクセルシェーダーは頂点シェーダーよりも頻繁に実行されます。このことから、可能な時にはいつでもピクセルシェーダーから頂点シェーダーに計算を移動しておくことをおすすめします。
通常、演算を頂点シェーダーに移動することは、処理データをピクセルシェーダーに移行することを意味します。これは一般的に優れたアイデアですが、Tiler の使用率がボトルネックにならないように注意を払っておかなければなりません。通常どおり、最適化を終えたら、特定の状況下に最適なソリューションを見極めるため、さらにプロファイリングを行う必要があります。
4. 複雑な数学演算の使用を避ける
シェーダー内の数学演算では、目標とする外観と動作をカスタマイズします。
しかし、これらの数学演算のパフォーマンスコストはそれぞれ異なります。したがって、使用には注意を払わなければなりません。より複雑な演算には、sin()、pow()、cos()、divide()、noise() などがあります。
加算や乗算などの基本的な演算は、比較的高速に処理できます。時間のかかる数学演算の数は、できる限り少なくすることが最適です。使用する複雑な数学演算の数は、GLES 2.0 を使用しているデバイスなどの古いデバイスでは少なくする必要があります。
5. まとめ
シェーダーコードの最適化方法にはさまざまなものがありますが、重大なボトルネックがある場所を把握するためには、アプリケーションをプロファイリングする必要があります。プロファイリングは、最適化の実施前後の効果を比較する場合にも推奨されます。次のチュートリアルでは、SRP Batcher を使用し、Unity でシェーダーとマテリアルを最適化する方法の例を解説します。