ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - Material と Shader

初めに

 Material(マテリアル)を使って、オブジェクトの表面をどのように描画するか定義することができます。Shader(シェーダー)は描画方法を記述したプログラムであり、1つの Material に1つのシェーダーを設定します。本記事では、Material と Shader とはどのようなものかまとめます。



Material(マテリアル)

Materialとは

 Material(マテリアル)は、直訳すると「物質、素材」を意味します。Unity においては、オブジェクトの表面の色や光沢、張り付けるテクスチャなど、描画する方法を定義するために使用されます。

(色を変える)

(テクスチャを貼る)

Material の作り方

 Assets 内で右クリック > Create > Material をクリックすることで、Material を作成することができます。

Shader の確認、変更

 Inspector から Material の Shader を確認することができます。デフォルトでは、下の画像のように Standard という Material になっています。

 Shader の部分をクリックすると、Shader を変更することができます。

※デフォルトで用意されている Shader を使うことも、作ることもあります。

オブジェクトの Material を変更する方法

 下の画像のように、Material の設定部分か Add Component に Material をドラッグ&ドロップすることで Material を変更することができます。

 Inspector からオブジェクトにアタッチされている Material とその Material のShader が確認できます。

Shader

Shader とは

 Shader(シェーダー)は描画方法を記述したプログラムであり、1つの Material に1つのシェーダーを設定します。

 Assets 内では、下の画像のようなアイコンで表示されます。

 開くと、プログラミングであることが確認できます。

Shader の作り方

 Assets 内で右クリック > Create > Shader から選択して、Shader を作ります。


Standard

 石、木、ガラス、プラスチック、金属など「現実世界」のオブジェクトをレンダリングするのに使用されます。

(Rendering Mode)

Rendering Mode 説明
Opaque デフォルト。透明な部分のない、一般的な固形のオブジェクトに適している。
Cutout このモードでは、半透明の領域は存在せず、テクスチャは100%不透明か、まったく見えなくなるか、どちらかになる。葉っぱや穴だらけでボロボロの服などの素材を形作るのに便利。
Fade オブジェクトが鏡面反射光や反射を含んでいる場合でも、透明度の値を使ってオブジェクトを完全にフェードアウトすることができます。このモードは、オブジェクトのフェードインやフェードアウトをアニメーション化する場合に便利です。反射やハイライトもフェードアウトするので、透明なプラスチックやガラスのような透過素材を写実的にレンダリングするのには適していない。
Transparent 透明なプラスチックやガラスなどの現実的な透明なマテリアルのようなレンダリングに適している。このモードでは、マテリアル自体は、(テクスチャのアルファチャンネルとティントカラーのアルファに基づいた)透明度の値になる。しかし、本物の透明なマテリアルの場合と同様に、反射や照明のハイライトは、完全な明快さで表示されたままになる。

(Albedo)
 テクスチャ、色、α値を設定できます。

docs.unity3d.com

(Specular)
Specular setup を使用するときにのみ表示されます。反射の色合いや鏡面反射の強度などの制御ができます。

docs.unity3d.com

(Metallic)
 表面の反射性などを変更できます。metallic パラメータにより、表面がどの程度、金属感があるかを設定できます。
docs.unity3d.com

(Smoothness)
 表面の滑らかさを表しており、Specular、Metallic の両方で使われています。Smoothness の値が高いほど、表面が滑らかで、光が反射しやすくなります。
docs.unity3d.com

(Normal map)
 実際のジオメトリで表現されているかのように光を捉えるモデルに、隆起、溝、傷などの表面の詳細を追加できる特別な種類のテクスチャのことです。

docs.unity3d.com

(Height map)
 通常、法線マップとあわせて使用され、テクスチャマップで大きな凸凹や突起を描画しなくてはいけないモデル表面に、ディティールを追加するために使われます。
docs.unity3d.com

(Occlusion)
 モデルのどの部分が、どれくらいの強さの間接照明を受けるか、を設定するために使用されます。グレースケール画像で、白は間接照明をすべて受けるエリアを示し、黒は間接照明を受けないエリアを示します。

docs.unity3d.com

(Emission)
 Emission (放出) は、表面から放出するライトの色と強さを制御します。

 HDR Color でライトの色と強度(Intensity)を変更できます。

Global Illumination では、このマテリアルから放出されたライトが近隣の他のゲームオブジェクトを照らすライトにどのように影響するかを指定することができます。

Global Illumination 説明
Realtime Unity は、シーンの Realtime グローバルイルミネーションの計算に、このマテリアルが発光したライトを加えます。つまり、このライトは、移動しているゲームオブジェクトを含む近隣のゲームオブジェクトの照明に影響します。
Baked このマテリアルからの発光は、シーンの静的ライトマップにベイクされます。そのため、近隣の静的ゲームオブジェクトはこのマテリアルによって照らされているように見えます。ライトプローブを使用している場合は、動的ゲームオブジェクトも影響を受けます。

docs.unity3d.com

docs.unity3d.com

Lit・Unlit

 Lit は光源の影響をうける Shader です。また、Unlit は光源の影響をうけない Shader です。

Diffuse

 拡散反射を意味します。光を考慮する Shader で表面が滑らかすぎないもの。

最後に

  • Material はオブジェクトの表面の色や光沢、張り付けるテクスチャなど、描画する方法を定義するために使用される
  • Shader は描画方法を記述したプログラムであり、1つの Material に1つのシェーダーを設定する
  • Shader に使われるパラメータや用語は記事内の Standard の部分を参考にしてください