Unityのシェーダーは、基本的にテクスチャのようなパラメーターを使用してシェーダーコードを組み合わせて Material (マテリアル) を介して使用されます。シェーダー/マテリアル関係の詳しい説明はマテリアルの作成と使用で読むことができます。
マテリアルプロパティーは、マテリアルが選択されているかマテリアルの使用されている ゲームオブジェクト を選択している場合、Inspector に表示されます。マテリアルのインスペクターは次のようになります。
各マテリアルは、マテリアルに使用されている特定のシェーダーに応じてインスペクターの見た目に少し違いが出ます。シェーダー自体がインスペクターの中で調節可能なプロパティーの種類を決めています。マテリアルインスペクターについての詳細は マテリアル を参照してください。シェーダーがマテリアルを介して実装されていることを覚えておいてください。シェーダーがインスペクターに表示されプロパティーを定義している一方、それぞれのマテリアルが実際にスライダー、カラー、テクスチャから調整されたデータを持っています。最も重要なことは、単一のシェーダーが複数のマテリアルで使用することができるということです。しかし、単一のマテリアルでは、複数のシェーダーを使用することはできません。
ゲームの全体的なパフォーマンスに影響する要素はたくさんあります。このページは 旧シェーダーコード に絞ってパフォーマンスの考慮事項を説明します。シェーダーのパフォーマンスは主に 2 つのことに大きく影響を受けます。シェーダー自体と、プロジェクトあるいは特定のカメラにより使用される Rendering Path です。自分でシェーダーを記述する際のパフォーマンスの秘訣については シェーダーを書く場合のパフォーマンスのヒント のページを参照してください。
Unity でサポートされているレンダリングパスのうち、Deferred Shading と Vertex Lit がもっともパフォーマンスを予見できます。Deferred Shading では各オブジェクトは一般にどのようなライトに影響を受けるかに関わらず 2 回描画されます。同様に Vertex Lit で各オブジェクトは 1 回だけ描画されます。すなわちシェーダーのパフォーマンスの違いは使用してるテクスチャの数とどのような計算を行うかに依存します。
Forward レンダリングパスではシェーダーのパフォーマンスはシェーダー自体とシーンのライト 両方 に影響を受けます。次のセクションは詳細について説明します。パフォーマンス観点から 2 つの基本的なカテゴリがあり、Vertex-Lit と Pixel-Lit です。
Forward レンダリングパスの Vertex-Lit シェーダーは常に Pixel-Lit シェーダーより安価です。これらのシェーダーはメッシュ頂点にもとづいてライティングを計算します。このため、オブジェクトにいくつライトが照らされていても、描画するのは 1 回のみとなります。
Pixel-Lit シェーダーは描かれたピクセルごとに最終的なライティングを計算します。このため、オブジェクトは環境光とディレクショナルライトを得るために 1 回描画され、追加のライティングごとに 1 回描画する必要があります。計算式は N 回のレンダリングパスであり、N はオブジェクトに最終的に照らされるピクセルライトの数です。これにより CPU の処理、グラフィックカードへの命令発信、頂点とピクセルを描画するグラフィックスカード、の負荷が増加します。スクリーンに表示される Pixel-lit オブジェクトの大きさもまた描画速度に影響します。オブジェクトが大きいほど描画に時間がかかります。
このためピクセル Lit シェーダーはパフォーマンスコストが大きいですが、そのコストにより素晴らしい効果が得られます。代表的な名前だけ挙げても影、法線マッピング、見栄えの良いスペキュラーハイライトや ライトクッキーなどあります。
ライトを強制的に、ピクセル (“重要”) あるいは、頂点/SH (“さして重要でない”) のモードに、切り替えることができることを覚える必要があります。Pixel-Lit シェーダーに照らされる頂点ライトはオブジェクトの頂点と全体で計算され、レンダリングコストあるいはライトに伴う映像エフェクトには加えられません。
旧シェーダーコード について、おおよそ次の順序にしたがって複雑さが増加します。
さらに、Unity はモバイルプラットフォーム向けのシンプルなシェーダーをいくつか“Mobile”カテゴリーの下に用意しています。これらシェーダーは他のプラットフォームでも良く動作するため、このシンプルさ (例えば、近似のスペキュラー、マテリアルごとのカラーサポートなし、等) を活用するため、是非とも試してみてください。
各シェーダーに行った特定の簡素化を確認するには、Built-in shaders パッケージの .shader
ファイルを見てください。情報はファイルの一番上のコメント内にリストされています。
以下のように変更例のいくつかは、複数のモバイルシェーダーに共通です。
AlphaTest
と ColorMask
をサポートしません。Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.