シェーダーの概要
ビルトイン シェーダガイド

マテリアルとシェーダ

Unityの Materials および Shaders には密接な関係があります。シェーダは使用できるプロパティやアセットを定義するコードを含みます。マテリアルによりプロパティを調整し,アセットを割り当てできます。

シェーダはマテリアルを通じて実装されます。
シェーダはマテリアルを通じて実装されます。

新規のマテリアルを作成するにはメインメニューまたは Project View から Assets->Create->Material を使用します。マテリアルを作成した後はオブジェクトに適用して Inspector でプロパティを微調整できます。オブジェクトに適用するには Project View から Scene または Hierarchy のいずれかのオブジェクトにドラッグ&ドロップします。

マテリアル プロパティのセット

特定のマテリアルに使用させたいシェーダを選択できます。インスペクタの Shader ドロップダウンを拡張して新しいシェーダを選択します。選択するシェーダによって,変更することが出来るプロパティが示されます。プロパティには,カラー,スライドバー,テクスチャ,数字,またはベクトルがあります。もし Scene 上のアクティブなオブジェクトにマテリアルを適用した場合,オブジェクトに対するプロパティ変更がリアルタイムで行われることが画面で確認できます。

Texture をプロパティに適用する方法が二つあります。

  1. プロジェクトビューからテクスチャのボックスの上にドラッグ&ドロップします。
  2. Select ボタンをクリックして,表示されるドロップダウンリストからテクスチャを選択します。

各々の Texture には配置オプションが二つ利用可能です:

プロパティ: 特徴:
Tiling 異なるテクスチャ上でスケールします。
Offset テクスチャをスライドします。

ビルトイン シェーダ

ビルトイン シェーダ のセットがUnityエディターとともにインストールされています。80以上のシェーダが利用可能です - ゲームオブジェクトのテクスチャに使用される主要なものは次の分類に当てはまります:-

  • 法線: 不透明のテクスチャオブジェクト向け。
  • 透明: 部分的に透明のオブジェクト向け。テクスチャのアルファチャンネルにより透明度合いを定義。
  • 透明カットアウト: 完全に不透明および完全に透明な領域がある,例えばフェンスのようなオブジェクト。
  • 自己発光: 光を発光する部分のあるオブジェクト。
  • 鏡面: 環境 Cubemap を反射する不透明なオブジェクト。

各々のグループで,ビルトイン シェーダは,シンプルな VertexLit (頂点ライティング) から複雑な Parallax Bumped with Specular (視差バンプ鏡面)まで複雑さに幅があります。シェーダのパフォーマンスについてはビルトイン シェーダの パフォーマンスのページ を参照下さい。

主要なゲームオブジェクトのシェーダに加えて,特殊な目的のための分類がいくつかあります:-

  • FX: ライティングおよび水のエフェクト。
  • GUI: グラフィカル ユーザ インタフェース 表示。
  • Nature: 樹木および地形。
  • Particles: パーティクルシステム エフェクト。
  • Render FX: Skybox シェーダ。
  • Toon: カートゥーン(漫画)風のレンダリング。

さらに,これらのシェーダのいくつかはモバイルデバイスで使用できる特殊バージョンをもっています。 Also, some of these shaders have special versions for use with mobile devices.

シェーダ技術詳細

Unityには大規模なシェーダシステムがあり,ゲーム内のグラフィックの見栄えを微調整できます。次のように動作します

シェーダはゲーム内のシェーディングの見栄えを判断する計算式を定義します。任意のシェーダについて,複数のプロパティがあります(典型的にはテクスチャ)。シェーダは Material を通じて実装されていて,個別の GameObject に直接アタッチされています。マテリアルの中で,シェーダを選択して,それからシェーダにより使用されるプロパティ(通常はテクスチャおよびカラー,しかしプロパティは異なることがあります)を定義します。

これはやや複雑であるため,ワークフロー図を見てみます:

このグラフの左側は Carbody Shader があります。2つの異なるシェーダがここから作成されます: Blue car Material および Red car Material です。各々のマテリアルは2つのテクスチャが割り当てされています。Car Texture は車のメイン テクスチャおよび Color FX texture を定義します。シェーダによって,最終的に2つのトーンでペイントされた車の見栄えとなるよう,これらのプロパティが使われます。これは赤い車のフロントで見られます: カメラを向いた側は黄色で角度が広がるほっど紫にフェードします。車のマテリアルは2つの車にアタッチされます。車のホイール,ライト,およびウィンドウはこのカラー変化のエフェクトがなく,したがって異なるマテリアルを使用する必要があります。グラフの最下部には Simple Metal Shader があります。Wheel Material はこのシェーダを使用しています。同じCar Texture が使用されているにも関わらず,最終結果は,マテリアルで使用されるシェーダが異なるために,車のボディーとは大きく異なることに留意して下さい。

より具体的には,シェーダが定義するのは:

  • オブジェクトをレンダリングする手法。これはエンドユーザのグラフィックス カードにより異なる手法を用いることを含みます。
  • レンダリングに用いられる頂点およびフラグメントプログラム
  • マテリアルの中で割り当てすることができるテクスチャプロパティ
  • マテリアルの中で割り当てすることができるカラーおよび数字の設定

マテリアルが定義するのは:

  • レンダリングで用いられるテクスチャ
  • レンダリングで用いられるカラー
  • シェーダでレンダリングに必要なその他のアセット,例えばキューブマップ

シェーダはグラフィックス プログラマにより記述されることを意図しています。ShaderLab 言語を用いて作成されていて,かなりシンプルです。しかし,シェーダを幅広い グラフィックス カード で動作するようにすることはややこしい作業でありグラフィックスについて相当に網羅的な知識が必要です。

いくつかのシェーダはUnityに内蔵されていて,いくつかは Standard Assets ライブラリに含まれます。シェーダの詳細については Built-in Shader Guide を参照下さい。

シェーダーの概要
ビルトイン シェーダガイド