Developer

【初心者Unity】マテリアルとは
2021.01.31
Lv1

【初心者Unity】マテリアルとは

1.マテリアルとは


Materialとは「材質・素材」というような意味を持つ言葉です。
その名の通り、マテリアルはゲームオブジェクトの材質を表現するため仕組みになります。
マテリアルは下図のようにゲームオブジェクトのインスペクタービューに表示されるためコンポーネントと誤解されがちですが、正確にはコンポーネントではありません。

マテリアルは色や質感と言ったデータの集まり(パッケージ)であり、上図でいうMesh Rendererの一項目の値として設定されるものです。
本記事では、このマテリアルを操作することによってゲームオブジェクトの色や模様を変更する方法を解説するとともに、マテリアルで設定可能な項目についても概説していきたいと思います。

2.マテリアルの作成


マテリアルはゲームオブジェクトの材質を表現するものですので、当然適用対象となるゲームオブジェクトが必要となります。
今回はデフォルトのSphereオブジェクトを使用して、マテリアル操作を行っていきます。

作成したSphereオブジェクトのインスペクタービューを見てみると、既にDefault-Materialが使用されています。
このようにあらかじめ用意されているオブジェクトにはDefault-Materialが適用されていることがありますが、
通常のマテリアルとは操作が異なることに注意してください。
本来、マテリアルはインスペクタービュー上で色や質感のパラメータを変化させることが可能ですが、Default-Materialに関してはそれができません。
Default-Materialのパラメータはスクリプトからの操作でのみ再設定が可能となります。
ですので、このままの状態でゲームオブジェクトの色等を変化させたい場合はスクリプトを用意してあげる必要があるのですが、今回はゲームオブジェクトに新しいマテリアルをアタッチし、それを操作していく方法で設定していきたいと思います。
スクリプトからの操作だけではなく、GUIでの操作も解説したいですしね。

それでは、ゲームオブジェクトに新しいマテリアルをアタッチする手順から見ていきましょう。
プロジェクトビューで右クリックして、「Create」→「Material」でファイルを作成します。
作成したファイルをSphereのインスペクタービューにドラッグ&ドロップします。
より厳密に言うならば、Mesh RendererのMaterials > Element 0 にドロップします。

すると、「Default-Material」から新規作成したマテリアルに置き換わります。
ちなみに、Mesh RendererのMaterials項目は配列になっていまして、Sizeの値を増やすことでマテリアルを複数セットすることが可能になります。

3.色の設定方法


次に、新規作成したマテリアルを操作していく手順について。
■インスペクタービューから操作する方法
プロジェクトビューで作成したマテリアルのファイルをクリックします。
インスペクタービューが選択したマテリアルのものに切り替わります。

ゲームオブジェクトの色や模様を変えたい場合はAlbedoを設定します。

まずは色の変え方から。2つ方法があります。
①Albedoの横の長方形をクリックすると、以下のようなカラーピッカーが表示されます。

ここから設定したい色を選べば完了です。
ちなみに、RGBのカラーパレット下にあるAという項目で透明度も指定できます。

②Albedo右端のスポイトをクリックすることでも設定出来ます。
スポイトマークを一度クリックすると、スポイトモードになります。
その状態で、デスクトップ画面上の任意の箇所をクリックすると、クリックした箇所の色がコピーされます。
(通常のクリック扱いにはならないので、安心してクリックしてください!)

以下サイトのようなカラーチャートと組み合わせて使用すれば、簡単に欲しい色合いが設定できる便利な機能になります。
マテリアルチャート – Unity マニュアル

次に模様の設定方法について。
適当な画像ファイルをプロジェクトビューにドラッグ&ドロップします。
Albedo左側の⦿ボタンをクリックすると、Select Textureのウィンドウが表示されます。

ここで先ほど移動させた画像ファイルを選択します。
するとゲームオブジェクトの表面に画像が貼り付けられたように表示されます。

このように単なる色味だけではなく、複雑な模様も設定することが可能です。

■スクリプトから操作する方法
Rendererコンポーネント経由でマテリアルのカラー等に直接アクセスします。
以下は一例として、スペースキーを押すと赤色に変化するようなスクリプトを記述しています。

// 中に記述された処理が一定間隔で繰り返し実行される
void Update() {
    // もし入力したキーがSpaceキーならば、中の処理を実行する
    if (Input.GetKey(KeyCode.Space)) {
        // Rendererコンポーネントのmaterialのcolorを呼び出し
        // Colorクラスのred(=赤色のRGBデータ)を値にセットする
        gameObject.GetComponent<Renderer>().material.color = Color.red;
    }
}

4.質感の設定方法


マテリアルでは金属光沢等の質感も設定が可能です。
変更する項目は以下です。

Metallic 値が大きいほど金属的になります。逆に、革などの非金属素材を表現する場合は値を小さくします。
より正確に言えば、周囲のオブジェクトの色(間接光)をどれだけ映し込むかを制御します。
値が小さければ素材本来の色(Albedo)が表面色となり、値が大きければ周囲のオブジェクトからの反射光が表面色となります。
Smoothness 値が大きいほど滑らかな表面ということになります。これは反射光(光沢)にも影響します。
具体的には、
・値が低いほど表面が凸凹=多方向に反射(拡散反射・ディフューズ反射と言います)
・値が大きいほど表面が滑らか=一方向に反射(鏡面反射・スペキュラ反射と言います)
というような表現になります。

下図はMetallicの値を増やし、周囲の景色を映し込んだSphereオブジェクトです。
Smoothnessの値はMaxなのでつやつやです。


以上、マテリアルの基本的な設定方法でした。
今回紹介した項目はマテリアル操作の中でもかなり基礎的な内容になります。
この他にもシェーダー等の項目を変更することで、表現の幅はググっと広がります。
その内記事を出そうと思いますので、お楽しみに。

 
 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次