こんにちわ、横浜すみっこクリエイター
です。Unityでゲームを制作して販売するまでの軌跡を描くゆにすち!の入門編です!
コンポーネントから指定して参照するマテリアル。今回はゲームオブジェクトに彩りと素材感を与えてくれる、そんなマテリアルにフォーカスを当てて解説したいと思います。
ゆにすち!シリーズとは
このシリーズではUnityでSTEAM販売を目指す!略してゆにすち!と銘打ち、モデリングもプログラミングも企画も販売も何から何までぜ~んぶド素人の が、PCゲームを考え、制作して、販売するまでの風景を履歴として残していくものです。
この入門編では、Unityの基本的な使い方やゲームの構造について学んでいきます。
この記事のポイント!
- マテリアルは、素材感を決めるアセット
- 未割り当てモデルは、デフォルトマテリアルが適用
- プロジェクトウィンドウの右クリックで作成
- オブジェクトへの適用は、ドラッグ&ドロップ
- 色・光沢感・透明度・輝度の設定方法を紹介
- レンダリングパイプライン間での互換性はない
Contents
マテリアルとは
![ゆにすち(マテリアルの良し悪しがゲームのクオリティを左右します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQTOYSpIl1kwqtkdbf2OJlFgtn-qChfW-1W3kAlrf2bnUTMPt8uZiOYQVEYKrKSdk9bw4iUN52AoQ2tbIBsM5ONaelJqQzhTc6ljbIBTja3uaKHyKm2aoAVna2iAtQpcNzS9S6-drrqh4RLDeB5zJjY2Tu_hgLJu78EC_IJtU4gGtNt1U-Yo5WCFS9/s833/001.png)
マテリアルは、ゲーム画面に表示されるモデルの素材感を決めるためのアセットです。ゲームオブジェクトの見た目に関する設定ができ、色や光沢感、表面の凹凸などを表現することができます。
マテリアルの良し悪しが、ユーザー体験そのものであって、ゲームクオリティを大きく左右することになります。しっかりと押さえておきたいところです。
デフォルトマテリアル
![ゆにすち(マテリアルが割り当てられていない場合は、デフォルトマテリアルを参照します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZHg9ZxLJJpwkYhlZ1n5D7kr71otmwcSYyCvJnQaegOrvB69An5oPfvf5oroO_YOaa4jF3KbwR8X_crYofIS9JVnwHNjTvSjK0cIREXBID6pip8mmjKTUP_TA__UoV3Hlsv3me2b8W7K-ifi2uDtf4JiweXJbY6jY0IR9Bke57D00TAQICobfulHZk/s883/002.png)
プリミティブオブジェクトを作成すると、Unityが用意しているデフォルトマテリアルが自動的に参照されます。マテリアルが割り当てられていないゲームオブジェクトは、デフォルトマテリアルを参照するようになっているためです。
上の図はキューブオブジェクトと、そこから参照しているデフォルトマテリアルのパラメーターを表示しています。 *
デフォルトマテリアは、白っぽいマットな質感の見た目となっています。デフォルトマテリアルの持つプロパティは、マニュアルで作成するマテリアルと同じですが、グレーアウトされていて編集はできません。
この解説では、HDRPを使用してます。HDRP以外のレンダリングパイプラインの場合、設定可能なプロパティ値が異なります。詳細は後述します。マテリアルの作成と適用
作成・適用の流れ
次に、マテリアルの作成とゲームオブジェクトへの適用についてです。
マテリアルはアセットとして作成します。そのアセットをゲームオブジェクトのコンポーネントから参照して関連付けします。
作成したマテリアルは、各プロパティを変更することができます。
![ゆにすち(先にマテリアルとゲームオブジェクトを関連付けておくと、確認しながら編集できます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5WtLvklPwJgn4jWxVcDsjPGjIaWEjAU0NezNNo_7Q-vbo4LBb5OMfrIhIJOKjG-nq2XUJYTRlWejQ-XHwhJ0HJjlauOIrhVMjO4s77xobv-k1V2HeHj1eOwhIhS5VYxu5MMVRlofeT-kbsJomRwcdpPIeVxcwu1ZWLjWAyCZljTkIC_Qz53yRPlwA/s833/003.gif)
マテリアルとゲームオブジェクトの関連付けは、アセットのプロパティの設定前でも設定後でも、設定の途中であっても結果は同じになります。ただ、マテリアルアセットを作成したら、そのままゲームオブジェクトに関連付けしてしまうのがオススメです。なぜなら、上の図のようにプロパティ値の変更がゲームオブジェクトにリアルタイムに反映されるようになり、光源の影響などを含めた直観的な開発ができるからです。
マテリアルの作成
![ゆにすち(実際にマテリアルを作成してみます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdeYsaqRfD7duf3FpDPcjU04PuJE639g_Pgl43NAj6xfJSLBq3BFiKYZ1Puvy_R20Uwil4jke-6M1qNcPjSYMxAEkG00N1mK2yQ4EZB9xjvaAgA2QrnMniuJP2Ls-3E1i6Tc6Qkg7Ogb1bHznoL8rhL6SPFQ-RwZ8QcxVD1zZHEJ1Z8S_yD04sRyj7/s833/004.png)
では、実際にマテリアルを作成してみましょう。プロジェクトウィンドウ上で右クリック、表示されるコンテキストメニューから作成 > マテリアルを選択します。
![ゆにすち(作成したマテリアルアセットのプロパティです)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcZ8A98Th1nc3VFFQOlt31nttVmSjson35MavESRtaLlKemKYA6WOHA-ggvSlfF3kPav2Ob3Hnx8CkM--AIVhep09Gta5JS_M1iYWeShwf7dPuX6Z5nW8nF9Veaf_2Caujmbi8P7jfhXFfT3DGWDJr1cAJFc_pJpQnaSHXrmzZI7T6Qs86UyxH9E3S/s583/005.png)
作成したマテリアルアセットを選択している状態でインスペクターウィンドウを確認すると、そのマテリアルのプロパティ値が編集可能な状態で並んでいることが分かります。
ゲームオブジェクトへの適用
マテリアルをゲームオブジェクトに適用して関連付けするには、次の2通りの方法があります。
- コンポーネントから指定
- アセットをドラッグ&ドロップ *
![ゆにすち(「Mesh Renderer」コンポーネントから指定します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq2xQTG7m4BwbBVbqC12BVfVGtZ8gJeuemTUehpPdIOhL5j0NiBehtjoiAETcHApjx3XKzb-knVj2gCZAOlqU4iQMyRdHkeo7EPdVPkE7aG14LvX1Y4b1_S-kWzMhhxF4wpiaAucKUhUBzT8HmVHdRZwuEfpnd7-v54Xf55M5i7Dpd4AgaNho05jli/s833/006.gif)
1つ目は、コンポーネントから指定する方法です。
インスペクターウィンドウで、「Mesh Renderer」コンポーネント内の「Materials」グループから要素のをクリックします。マテリアルを選択から、適用したいマテリアルアセットを選択します。
![ゆにすち(マテリアルアセットをゲームオブジェクトにドラッグ&ドロップします)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz4Prtcpfm8vlCSjzP346ZVlekFk79Kx2kisliUUKJF-bJ86w0BqK5aXPiCDmDu65SwSkUKogkHDxL3SoCW0CQCtL3KzBDBQ6psNmG6D29GZl58Lw1RDUkGiLnryHPPRxtmW6P5RdZsNq_ifMeG4OvHC9SI1pvBm5DXWvgTPBLK4EUYGaEVud3kFtQ/s833/007.gif)
2つ目は、アセットをドラッグ&ドロップする方法です。
プロジェクトウィンドウで適用したいマテリアルアセットを選び、シーンビューのゲームオブジェクトにドラッグ&ドロップします。
この方法でのドロップ先は、シーンビューだけでなく、ヒエラルキーウィンドウ内のゲームオブジェクト、またはインスペクターウィンドウのコンポーネントの「マテリアル選択」としても、同じ結果が得られます。
これで関連付けができました。適用した瞬間、色がより白っぽく変化していると思います。作成したマテリアルの初期値とデフォルトマテリアルのプロパティ値とで色と光沢度が少し異なっているためです。
マテリアルのプロパティ
できることの一例を紹介
では次に、マテリアルのプロパティ値を変更して見た目を変更してみましょう。
一度にすべてを理解する必要はないので、今の時点で理解しておきたいプロパティを中心に、やりたいことベースで紹介します。
HDRP/Litシェーダーで解説しています。シェーダーについては、意味がわからなくても大丈夫です。色を変える
![ゆにすち(「Base Map」のカラーピッカーから色を変更します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNsfXhGg9fVTdOtRzWHrc8wEBwBxAqLqZ8okEXQss8gKj5yhyrrvWwPSwT8ttywzcXy30MAR4oSGZRPozSOPpiCqfSvBlBUIPpcyLi72DgDUhJcBariM5lkJK06zgx75M8SiXJlAnJ2pRmhoIRWgmumQBQwPpcV0q2EXtLN9GT7s37B4wJxZVUuq9l/s833/008.gif)
マテリアルアセット選択状態で、インスペクターウィンドウからサーフェス入力グループのBase Mapをクリックします。カラーピッカーがポップアップするので、色を選択します。
色はHSVやRGBのほか、HEX値やスポイトツールで指定できます。
光沢感を出す
![ゆにすち(「Metallic」と「Smoothness」のスライダーで光沢感を変更します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqkQWYS47BTEYwS7sjj0DMptn89xCzUilTxtXxsQh9fJU7bgEq2ZrgMOuKhnogrWXrvCZFPPyOFoWC1eRjIZizc3UQPtA8PMxBL-UcC9OSznYIh-_gaPGdVvZI6T3FpqigN9FFb1PWLRbJJqpU9ob2V_KeP6tm5zDt4kGpVzq6WeaBl4r6gDtQ01om/s833/009.gif)
マテリアルアセット選択状態で、インスペクターウィンドウからサーフェイス入力グループのMetallicとSmoothnessの数値を変更することで、光沢感を調整することができます。
![ゆにすち(「Metallic」のスライダーで金属質感を調整します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsZvM-uNcjL-Ljei2Ps84boAv2k2dWGS-FFO7JOiyDOyCCHVtChoML9BZX9mJP8AbUbMNGKlvd51ZBxOgGGKDNz1BOQDyteDmoDH6cldJKD6UgNsx_qxVlvcWmsqvGPAFLGWHibmrA4huo6Wrmmh2maKxldGmxIvNhtnSqMjLj9dA-Cef_YvnFF28h/s833/010.gif)
Metallicの値を変更することで、金属的な質感を調整します。値は0から1の範囲で、スライダーまたは直接入力で設定することができ、1に向かって金属質感が増していきます。
![ゆにすち(「Smoothness」のスライダーでなめらさかを調整します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEEu-IWtubaX1Iy-vGy66rDCdztf89qylMYWXxy5_Ez6LHkIcAMNOr7oc1BOoI1ECqtWBMXg3jteH3_Iyl-X4oqMmLPnkbrGXIgWh2t03ZCmxM9rwvsngXnXiUZQjLUZYurN0IwodEvWX1ASu_Y3M6jyh7kqH4hF2QX5J-b8dWpdHkkU8Im5P0ESjI/s833/011.gif)
Smoothnessの値を変更することで、なめらかさを調整します。値は0から1の範囲で、スライダーまたは直接入力で設定することができ、1に向かってなめらかさが増していきます。
発光させる
ゲームオブジェクトが光を放つには、「自ら光を発する発光」と「光を跳ね返す反射」がありますが、ここで設定するのは発光の項目です。恒星などの熱源・光源のような自己発光する物体を表現するのに適しています。
![ゆにすち(「放出入力」を設定することで自己発光を調整できます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ0bQJA0_6kgMWHuKQjOS88Fupi2zVgcVxTBrtS7wx-68y0obfz0vfmEHhiP6ynhjevmLd1ixQ_15KES2kVfcNwNPRhKFfHFwjb3cgVxioeThPKnoIglkzs5lGLn49-XdoFkaKoBU7BnZiPc17kxWfpKadPjj_BpC_kv2aRfS3nadMkFEUjNw-mI1g/s833/012.gif)
マテリアルアセット選択状態で、インスペクターウィンドウから放出入力を設定することで、ゲームオブジェクト自身が光が発するようになります。
設定方法は次の2通りです。
- 露出値で設定する
- HDRカラーで設定する
ここでは露出値で設定する方法を紹介します。
まず、放出入力グループのUse Emmition IntennsityをONにします。
次にEmissive Mapのカラーピッカーから発光させたい色を指定します *1。続いてEmission Intensityの単位をEV100に変更し、値を徐々に大きくして輝度を調整します *2。
1:色はHSVやRGBのほか、HEX値やスポイトツールで指定できます。 2:Nitsのままでも良いですが、大きな値が必要なので、EV100に変更しています。透明にする
![ゆにすち(「サーフェスオプション」の「Surface Type」と「サーフェス入力」の「Base Map」で透明度を調整します)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDtxPZ-aCdmrP3gCNofnF8vFfkMdOF6FwvM6uQgEYIEdivwmI1oBZFlD181ckMv_vMLt80KRzK8B4otmZNYKeM3mEnT-Samo5V8HWdoqyxgzYATFb0ZrqzuhVcVeWgBiIg9UF1WKSTrHlvb0a_onAMsyXBvSxh8zYYKxoUd2S35BjN8-1I1-UUhY6T/s833/013.gif)
ゲームオブジェクトを透明にするには、2つの手順が必要です。
- サーフェスオプショングループのSurface TypeをTransparentに変更する
- サーフェス入力グループのBase MapのカラーピッカーからAの値を下げる
テクスチャを表示させる
![ゆにすち(画像を取り込んで「Base Map」に適用させます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_NqI1OIaKQfQlM5p_CSdMGfCOy0LRf2aMA0uiiMVfuhuQLQHlqqphqIf78rB4xPT1kc9Y4SsTf9fXwy_j9GrFIOoKrYRsop-BropB9nJ6TGivyBtiygu1nXeERFPXTLtzyg5zmRcb9mzfWN2Q36GKuR3ERkxhedrPZPBpq2kQF7XA9534i40ade8Z/s833/014.gif)
ゲームオブジェクトの表面にテクスチャを表示させるには、画像ファイルをインポートし、マテリアルの「Base Map」に適用させます。
テクスチャとは、ゲームオブジェクトに影響を及ぼす画像のことと理解しておけばよいです。
まず、画像ファイルをインポートします。エクスプローラーから画像ファイルをプロジェクトウィンドウにドラッグ&ドロップすることでインポートが可能です。
Unityで対応している画像のファイル形式は、公式によると「BMP、EXR、GIF、HDR、IFF、JPG、PICT、PNG、PSD、TGA、TIFF」となっています。次に、マテリアル選択状態でインスペクターウィンドウからサーフェス入力グループのBase Mapの左側の (四角部)に、追加したテクスチャをドラック&ドロップします。またはBase Mapの左にある をクリックしてSelect Textureダイアログから画像を選択します。
これでマテリアルに画像が表示されたと思います。
複雑な形状のゲームオブジェクトにテクスチャを貼り付ける場合は、ポリゴンの展開図であるUVマップと画像のUV位置を合わせて表示を調整する作業が入ります。Unity以外のツールも使用しての作業になるので、別途解説の機会を設けるつもりです。
表面にデコボコをつける
![ゆにすち(ノーマルマップ画像を取り込んで、「Normal Map」に適用させます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ_IA21ChJkgb4cgwbsNnegzSuCR18HKPtI2WZ_yLXUBQoLhiAcMdu6evrJj5zRkXHM3iGAfxjET6zC5rNQxZRhHr62Qu8cOODhKteAOwejiGZ3g2kZoSLN7DsmKfyoFIekTLgvfW8sEuvUCRcM9-KTyz9CdK2xXc-fLcQSF4cBN61A_K60YGA348e/s833/015.gif)
ゲームオブジェクトの表面に凹凸をつけるための特殊なテクスチャをバンプマップといい、その1つであるノーマルマップを用いてデコボコをつけます。
ノーマルマップは、Unityで作成することができず、blenderなどほかのツールが必要となります。前述のUVマップと同様に、あらためて解説したいと思います。
今回はイメージだけでもつかめるように、あらかじめノーマルマップを用意しておきました。こちらからダウンロードして使用してみてください。
ダウンロードしたら、後は「テクスチャを表示させる」での手順とほとんど一緒です。画像をプロジェクトウィンドウにドラッグ&ドロップしてサーフェス入力グループのNormal Mapの左側の (四角部)に、追加したテクスチャをドラック&ドロップします。またはNormal Mapの左にある をクリックしてSelect Textureダイアログから画像を選択します。
これで表面に凹凸がついたと思います。
特筆すべきは、表面の形状を変更したわけではなく、見た目だけが変わったということです。ノーマルマップを適用したゲームオブジェクトは、光の影響もうまく計算して、あたかも表面が別の形状になったように表現します。が、実際のポリゴンには何ら影響を及ぼしておらず、モデル上には凹凸がないため、深い角度から面をのぞくと平らな面であることがバレてしまうので注意が必要です。一方で、描画負荷を抑えつつディテールを表現できるというメリットもあります。
レンダリングパイプライン間での互換性
少し難しい話なので、読み飛ばしても問題ありません。
![ゆにすち(「HDRP」に「Built-in RP」のマテリアルを適用した場合、ピンク色に表示されます)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKBvZtO5AEs9DlN8R5XHJeZYWX6QZwtacSI1VcswcoyuKJeoCeIFnQuwnSc5U1eO5W8Lu-6ejMV-plmjL9K9asoIc7pW_f8-1vExjXTstRSo0zuio6Z3Rs36-PoSVNND8POQeLmhkS6ooSO2WlbJ7wwV_1OiMwIjPZBQusb8VlwcwQJmys08qtlSJ0/s587/016.png)
実はマテリアルは、レンダリングパイプライン間で非互換となっています。アセット作成手順はどのパイプラインでも共通ですが、生成されるマテリアルが異なります。また、パイプラインを越えて適用しようとしても、うまく表示できません。上の図のように、ピンク色で表示されてしまいます。
![ゆにすち(「HDRP」と「Built-in RP」とではマテリアルに差があります)](http://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZcEJWNvVfeKCCaXrrql5eOc6QvIj5rLeJiBCQ9yQ8c38jT93A3lhTT--ca4S2khnZbbuFI_NWRcpc0CzuED_riv84-Akm959SR8UDWr5SP_Ee8LAc-Bq71SxKTcc-kCr0LTmOx0q57lGeSfG5L42Wqt2oOPEF-C7p2s4RdPuG19GyRbzxOrq1ysD-/s833/017.png)
今回はHDRPを前提に解説し、上の図の左のようなプロパティを持っていました。一方でBuilt-in RPでマテリアルを作成すると、右のようになり項目が一致していません。そもそも、レンダリングパイプラインごとに表現したい次元が異なるので、互換性がないのです。
もう少しだけ正確にいうと、マテリアルそのものではなくShaderがそれぞれ独自となっているため、互換性がないということになります。まとめ
今回は、ゲームクオリティにダイレクトに効いてくる「マテリアル」について、解説しました。
マテリアルを作成して、プロパティ値を変更することで、ゲームオブジェクトの見栄えを変えることができたと思います。見た目に関わる記事でしたので、モチベーションも上がりますね。パラメータをいろいろいじって遊び倒してみてください!
次回予告
Next time on... これでコピペの手間知らず。「プレハブ」を使いこなそう!
次回は、超便利!プレハブについて解説します。同じゲームマテリアルを100個作った後に、間違いに気付いたとき、「コレ、、、全部手作業で直すの。。。?!」なんて心配は不要になります!
では、今回はこの辺で。
コメント
コメントを投稿