第2回.Standard Shaderを使う
●はじめに
今回はUnity5から導入された、Standard Shaderの使い方を解説していきます。
●Standard Shaderってなんですか?
一言でいえば、何でも描ける万能のShaderです。
Unity4以前は、DiffuseShaderやTransparentShaderなど大量のShaderがあり、Materialの設定時にそれぞれ適切なものを選択していました。
Unity5からは物理ベースレンダリング(PBR:Physically Based Rendering)が導入され、一つのShaderで現実世界の様々な材質を表現できるようになりました。それがStandard Shaderです。
Unity4以前に使われていたShaderはLegacyShader(時代遅れのシェーダー)と分類され残ってはいるものの、基本的に使用しません。

●物理ベースレンダリング以前
レガシーシェーダーが普通だった時代(Xbox~PS3,Xbox360中期までの頃)は、みんなが好き勝手に現実世界を表現しようと、表現したい要望に対して様々なテクニックを編み出していきました。たとえば…
- プラスティックに光沢を入れたい => Specular Shader
- クリーチャーの肌の凸凹を表現したい => Bumped Diffuse Shader
- クルマの車体に周囲を映り込ませたい => Reflective Diffuse
- ネオンを光らせたい => Self-Illumin Diffuse
このように、表現したい一つ一つの項目に対して新しいShaderが作られていたのです。このやり方の問題は
- 表現の項目が一つずつ追加されていくので、組み合わせの種類が膨大になること
- Shaderによって表現する項目に一貫性が無いので、リアルではないこと。違うシーンで同じマテリアルを使いまわせないこと
- Shaderに一貫性が無いのでシーン全体の雰囲気をまとめるのが難しい
などがあります。
| レガシーシェーダーでは全体の雰囲気を合わせるのが難しく、一貫性のないバラバラな絵になりがち。画風の異なるイラストレーターがそれぞれ好き勝手に描いているような状態。 |
●物理ベースレンダリング
レガシーシェーダーには上記のような問題があり、昔の記事を見ると結構みんなそれで困っているのがわかります。そこに救世主として登場したのが物理ベースレンダリングです。
難しいことは言いません。一言でいえば
| 現実の物理現象を基準に、画風を統一しましょう!という考え方。現実世界は一つなので必ず統一されるし、物理現象を元にしているので結果リアリティも向上する。 |
アニメ制作における作画監督のようなもの、と例えればよいでしょうか。それまで少し自由すぎたのです。
●マテリアルを作る
小難しい話はこれくらいにして、実際に使ってみましょう。
- UnityのProjectウィンドウ(無ければメニューのWindow->Projectで表示)右側の好きな場所で右クリック
- 右クリック->Create->MaterialでMaterialが生成されます。
- 分かりやすい名前に変えます。ゆっくりダブルクリックするか、F2キーを押して入力状態に入り、"Plastic"と入力します。
- InspectorウィンドウにPlasticマテリアルが表示されていると思います。

●オブジェクトにマテリアルを割り当てる
- Hierarchyウィンドウを右クリックして、3D Object->Sphereを選択し球(Sphere)をシーン上に生成します
- Sphereを選択した状態では、InspectorウィンドウにSphereのプロパティが表示されます
- Mesh Rendererコンポーネントが開いてなければ、左の▽をクリックして開きます
- Materialsを開きます
- MaterialsのElement 0に、先ほど作成したPlasticマテリアルをProjectウィンドウからドラッグします
- 割り当てが完了しました
●Plasticマテリアルを調整する
- Sphereを選択し、Inspectorウィンドウに表示されていることを確認します
- Plasticのマテリアルボール(プレビュー表示)を探し、▽で開きます
- このプラスチックは不透明なので、Rendering ModeはOpaqueのままです
- Albedoのカラーパレットをクリックして、好きな色を設定してみましょう
- プラスチックは金属ではないので、Metallicは0にします
- Smoothnessを調整して表面の仕上げ(ざらざらツルツル)を自由に設定してみましょう
- マテリアルが完成しました

●パラメータ説明列挙
このようにStandard Shaderには沢山パラメータがありますが、一つずつ説明します。
ただ列挙しただけなので、あまり真面目に読む必要はありません。
まず一番上のRendering Modeですが、これは素材のタイプを選択します。
| Rendering Mode | 解説 |
|---|---|
| Opaque | 不透明な素材。最もよく使う。 |
| Cutout | 不透明だが、アルファ付きテクスチャで穴を開けられる素材。フェンスや木の葉など、ポリゴンで作るには大変な部分に用いる。 |
| Fade | 半透明な素材。同時に反射も透明になるので、物理的に正しくない。UIなど非現実的なものに用いる。 |
| Transparent | 半透明な素材。物理的に正しい反射をする。ガラスなどに用いる。 |
次にMain Mapsの下にあるパラメータですが
| Main Maps | 解説 |
|---|---|
| Albedo | 素材の色(+透明度orスムースネス)を指定する |
| Metallic | 素材の金属、非金属を指定する |
| Smoothness | 素材表面の滑らかさ(つるつる、ざらざら)を指定する |
| NormalMap | 法線マップを指定する |
| HeightMap | 視差マッピング用の高さマップを指定する |
| Occlusion | 遮蔽マップ(AO)を指定する。奥まったところや、傷などを暗くするのに用いる。 |
| Detail Mask | セカンダリマップの適用量をマスクで指定する。標準では全適用 |
| Emission | 解説 |
|---|---|
| Emission(チェックボックス) | 発光するかどうか指定する |
| Color | 発光の色と強さを指定する |
| Global Illumination | GIやライトマップベイクに影響する手法を選択する |
| Tiling | テクスチャのタイリング(スケール)を指定する |
| Offset | テクスチャのオフセットを指定する |
| Secondary Maps | 解説 |
|---|---|
| Detail Albedo | 詳細(ズームアップ)な色を指定 |
| Normal Map | 詳細(ズームアップ)な法線を指定 |
| Tiling | テクスチャのタイリング(スケール)を指定する |
| Offset | テクスチャのオフセットを指定する |
| UV Set | セカンダリマップで使用するUVチャネルを指定する |