UNREAL→LABØ

Unreal Engine4の情報をまとめます。

【第12回】マテリアル基礎

 

概要

この連載ではブループリントが主体ですが、ここでは番外編としてマテリアルの基礎を学習しておきます。

 

基本的にギミックの作成ではプロトタイプのメッシュを使うことが多く、最終的には他の担当者(アーティスト等)が仕上げることになるかもしれません。しかし、ここである程度マテリアルについて知っておけば、担当者にニュアンスを伝えやすくなって作業しやすくなるはずです。また、既存マテリアルを転用したいときなども、いくらか知識があると便利です。

 

マテリアルとは、メッシュなどに色を付けたり光沢の度合いや透過性などの外観を設定する素材です。

 

さっそく作成してみましょう。

 

 

 

マテリアルを作成する

コンテンツブラウザ上にマテリアル用のフォルダを作成します。

 

f:id:miccak:20210507135105p:plain

 

ここでは「Assets」>「Materials」フォルダという構成にしています。

「追加/インポート」→「マテリアル」を選びます。

f:id:miccak:20210507135300p:plain

 

作成したら任意の名前をつけておきます。

f:id:miccak:20210507135441p:plain

ダブルクリックしましょう。
マテリアルエディタが開きます。

  

f:id:miccak:20210507135727p:plain

 

 図のようなマテリアルエディタが開いたでしょうか?
これがマテリアルエディタです。

 

ブループリントのようなノード形式のビジュアルスクリプトで構成されますが、ブループリントとは使うノードがまったく異なりますので、別のものと考えてください。

 

初期状態では「出力結果(を返す)」ノードのみが存在します。

この受け取りノードに向かって各種構成要素を接続していきます。

 

ベースカラー、メタリック、ラフネス

ベースカラー

基本となる「色味」を追加してみましょう。

 

カラーを定義する「ベースカラー」ピンで「Vector3(RGB値)」を受け取ることができます。

 

RGBがなんなのかという説明は省きます。RGBとは、色の表現法の一種で、赤 (Red)、緑 (Green)、青 (Blue) の三つの原色を混ぜて幅広い色を再現する加法混合の一種です。

 

グラフを右クリックして「Constant3 Vector」を検索して配置します。
キーボードの「3」を押しながら左クリックでも配置可能です。

f:id:miccak:20210507140742p:plain

 

エディタにパレットが表示されている方は、一覧から探しても構いません。

f:id:miccak:20210507140547p:plain

 

「Constant3 Vector」ノードをクリックして選択します。
詳細パネルを確認すると、RGBそれぞれの値を入力可能なことがわかります。

f:id:miccak:20210507140916p:plain

 

値を入力して色味を指定しましょう。
カラーピッカーを使って指定することも可能です。

f:id:miccak:20210507141054p:plain

 

好きな値を入れたら、ノードの出力ピンをベースカラーピンにつなげてください。

f:id:miccak:20210507141330p:plain

 

状態を確定するために、「適用」(コンパイル)ボタンを押しましょう。


プレビューウィンドウで出力結果を確認できるはずです。
なお、「保存」ボタンを押せば「適用」も同時に行います。

 

メタリック

続けて、「メタリック」ピンを使ってみましょう。


これは文字通りメタル感を制御するもので、表面を光沢に演出します。

 

定数ノードを配置します。「Constant」ノードを検索して配置しましょう。
指定値を与える定数のノードです。
(ショートカットで「1」キーを押しながら左クリックでも配置可能です)

f:id:miccak:20210507141803p:plain

 

出力ピンを「Metallic」ピンへ接続して「適用」を押します。

f:id:miccak:20210507142059p:plain


これでメタリック(光沢)が「0」の状態で適用されました。

このままでは、わかりづらいですね。
定数ピンを選択し詳細パネルからValueを「1」に設定して再度「適用」を押してみましょう。

f:id:miccak:20210507142132p:plain

 

プレビューのサーフェスがメタリック風に変わったことがわかりますね。
なおメタリックに指定する値は、0か1の振り切った値が多用されます。

 

ラフネス

つぎに「ラフネス」を変更してみます。


ラフネスは、マテリアルの粗さ度合いを制御します。

先ほどと同じように定数ノードを設置して「ラフネス」ピンに接続します。

 

f:id:miccak:20210507142302p:plain

 

なにもピンが接続されていない状態(デフォルト)のラフネス値は「0.5」です。

 

ピンが接続されたことで、定数で上書きされラフネスが0の状態になりました。
そのせいで、よりメタリック的な表現が強調されて見えますね。

 

好きに値を調整して、保存してください。
続いて、このマテリアルをメッシュへ適用してみましょう。

 

ちなみに、ブループリント同様、ノードや範囲指定でコメントをいれることも可能です。活用してみてください。

f:id:miccak:20210507142536p:plain

 

マテリアルをメッシュに反映する

テスト用のレベルと、スタティックメッシュを用意(配置)してください。

f:id:miccak:20210507143223p:plain

ジオメトリブラシからメッシュを作成しても、任意の既存メッシュを使っていただいて構いません。

スタティックメッシュエディタを開きます。
使用するスタティックメッシュをダブルクリックしてください。

 

エディタ内の、「Material Slots」項目からデフォルトのマテリアルを設定できます。

f:id:miccak:20210507143822p:plain

 

保存して、レベル上のメッシュを確認してみましょう。
反映されたことが確認できるはずです。

 

f:id:miccak:20210507144045p:plain

 

レベルにメッシュを複数個配置して、それぞれにドラッグ&ドロップして直接マテリアルを指定することも可能です。

f:id:miccak:20210507145457g:plain

 

詳細パネルからも指定できます。

f:id:miccak:20210507145554p:plain

 

もちろんレベル上にあるアクタのマテリアルを変更しても、オリジナル(大元のStaticMesh)に設定されたマテリアルが変更されたわけではありません。レベルに配置されたアクタはあくまでも設計図を元にしたコピーと考えておきましょう(以前学習した「インスタンス編集可能な変数」を設定したアクタと同じですね)。

 

同様に、ブループリントに設定したStatic Mesh コンポーネントに対してもマテリアルは適用できます。

 

確認してみましょう。テスト用のアクタを作成します。

f:id:miccak:20210507150457p:plain

 

開いてアクタにStatic Meshを設定してください。

f:id:miccak:20210507151050p:plain

 

この時点でさきほど設定したマテリアルが反映されているのがわかりますね。
詳細パネルの「Materials」項目から個別にマテリアルを設定することも可能です。

 

f:id:miccak:20210507151201p:plain



マテリアルインスタンス

ここまでで基礎的なマテリアルの作成と適用、置き換えることを覚えました。

 

新たにいくつか作成していきたいところですが、マテリアルは調整のたびコンパイルを行う必要があり確認に時間がかかり不便です。そこで、パラメータ調整時にコンパイルが不要な「マテリアルインスタンス」という特殊なマテリアルを学習しておきましょう。


名前は難しいですが、要はパラメータを調整できるマテリアルの「子」のようなものと考えてください。調整のしやすさから、レベルに配置されるメッシュはマテリアルインスタンスが使われることがほとんどです。

 

やってみましょう。

作成するには元になるマテリアルを用意して、変更したい値をパラメータに変更するという作業が必要になります。先ほど作成したマテリアルを使います。

 

マテリアルインスタンスで扱いたいパラメータはパラメータに変換する必要があります。
ベースカラーの値をパラメータに変換します。

Constant 3 Vectorノードを右クリックして「パラメータに変換」を選択してください。

f:id:miccak:20210507151557p:plain

 

パラメータは作成時にパラメータ名称をつけることができます。
任意ですがカラー系はしばしばわかりやすく「Color」などと名付けられますね。

 

f:id:miccak:20210507151641p:plain

 

同じように「メタリック」「ラフネス」に使っている定数を、右クリックからパラメータに変換してください。ひとまずパラメータ化が完了しました。


セーブしましょう。

 

f:id:miccak:20210507151934p:plain

 

コンテンツブラウザを表示してください。
作成したマテリアルを右クリックします。

「マテリアルインスタンスを作成」を選択します。

f:id:miccak:20210507152049p:plain

 

新たにマテリアルインスタンスが作成できるはずです。

サムネイルではマテリアルと区別しづらいので、わかりやすい接頭語(”MI_”)をつけておくことがしばしばです。名前を設定したらダブルクリックして開きましょう。

f:id:miccak:20210507152303p:plain

 

詳細パネルに、先ほど作成したパラメータが登録されていることがわかりますね。

f:id:miccak:20210507152458p:plain


また、一般項目の「Parent」には親となったマテリアルが設定されていることが確認できます。

チェックを入れて、パラメータを任意の値に変更してみましょう。

f:id:miccak:20210507152650g:plain

 

適用(コンパイル)をせずに外観を変更できました!

 

親(マテリアル)からいくつもの子(マテリアルインスタンス)を作ることも可能です。

もちろんマテリアルインスタンスはマテリアルと同じようにメッシュに反映できます。使用するメッシュにセットしたり、色々ためしてみましょう。

 

マテリアルインスタンスについては、ひとまずここまで。

マテリアルインスタンスは演出としても非常に使い勝手が良い機能です。たとえば「プレイヤーが近づいたらアクタの色を変える」といった演出も、ブループリント上でマテリアルインスタンスの値を動的に変更することで簡単に実装可能です。

 

連載第14回で「ブループリントを使ったマテリアル演出」を実装しています。

 

 

アクタとマテリアルを作成する

その他いくつかの機能を学習しながら、ゲームに使用するメッシュとマテリアルを作成してきます。
この項目は演出寄りですので、飛ばして次に進んでも構いません。
(飛ばしても問題ないように作成しています)

 

最初に、レベル内で取得する「鍵になるアイテム」メッシュとマテリアルを作ります。

クリアに必要なものなのでプロトタイプ段階でも目立たせたいメッシュですね。
「不思議な力を持った宝石」風に特徴づけます。

 

本来、プロトタイプで作り込んだマテリアルをあてる必要はあまりありませんが、プレイヤー誘導などレベルデザインの一因になることもあり、気になる部分や目立たせたいメッシュに、派手なマテリアルを使うのは効果的です。

 

f:id:miccak:20210507154200p:plain

f:id:miccak:20210507154408p:plain

 

図のジオメトリブラシを Static Mesh に変換しました。

コリジョンなども設定しておきます。

f:id:miccak:20210507154702p:plain

 

マテリアルを作成します。

f:id:miccak:20210507154813p:plain

 

ベースカラー用の値を設定します。
マテリアルインスタンス化して調整するため、パラメータ化しておきます。
初期値は少し赤めに変更しました。

 

f:id:miccak:20210507155052p:plain

 

メタリックとラフネスの値も設定しておきます。
こちらは今のところ定数(変わらない数)にしておきます。

f:id:miccak:20210507155148p:plain

 

なお、ビューポート上ではプレビューの形状を変更できます。

f:id:miccak:20210507155257p:plain

一番右側のポット型のアイコンは、コンテンツブラウザ上でメッシュを選択した後にクリックすると、プレビューがそのメッシュ形状になるという便利な機能です。

f:id:miccak:20210507155451p:plain

 

保存(コンパイル)して、マテリアルインスタンスを作成しておきます。

f:id:miccak:20210507155637p:plain

 

メッシュに設定してみます。

f:id:miccak:20210507155716p:plain

 

まだ味気ないので表面にざらつきのような表現を足してみることにします。
スターターコンテンツからテクスチャ(画像アセット)を追加してみましょう。

 

「Starter Contents」を持っていない場合は、「追加/インポート」項目から追加できます。
もちろん好きなテクスチャを使用していただいて構いません。

f:id:miccak:20210507155838p:plain
f:id:miccak:20210507155929p:plain


マテリアルエディタの任意の場所を右クリックします。
「Texture Sample」ノードを検索して配置してください。

f:id:miccak:20210507160223p:plain

 

詳細パネルから、表面表現に向いていそうなノーマルマップを指定します。
ここでは「T_Metal_Steel_N」を使いました。

 f:id:miccak:20210507160739p:plain

 

「Texture Sample」ノードを選択して、詳細パネルからテクスチャを指定します。

f:id:miccak:20210507160915p:plain

 

テクスチャも後で変更調整できるようにパラメータ化しておきます。

f:id:miccak:20210507161021p:plain

 

ここでは使いませんが、Texture をベースカラーに設定すれば模様がついた見た目になります。ピンごとに設定できるテクスチャの種類が異なりますので注意しましょう。

f:id:miccak:20210507161211p:plain

 

テクスチャのUV(スケール)を調整する

テクスチャのUVスケーリングを変更するノードも追加しておきます。

「UV」について詳しい説明は省きますが(「テクスチャマッピング」「UV座標」などで検索してみましょう)、簡単に言えばテクスチャ1枚の「描かれている場所」を示す単位のようなものです。

 f:id:miccak:20210507161248p:plain

サイコロの形状に紙を貼り付ける様子を想像するとわかりやすいかもしれませんね。
多くのスタティックメッシュには図のような1枚のテクスチャ(画像)が貼り付けられ、(どこにどんな色が塗られているかなどを)マッピングするのに使われます。 

 

「Texture Coordinate」で検索して、配置してください。
「Texture Sample」ノードのUVs入力ピンに接続します。

f:id:miccak:20210507161440p:plain

 

必要があれば、詳細パネルの「U Tiling」「V Tiling」を調整して、テクスチャのスケールを調整してみましょう。上画像にもあるようにUは横方向、Vは縦方向の座標軸を示します。

f:id:miccak:20210507161644p:plain

 

テクスチャを動かす(Pannerさせる)

さて、(このアクタで必要かどうか怪しいところですが、)使われる頻度の高い「Panner」ノードを知っておきましょう。

「Panner」は指定方向に接続されたUVをパンする(動かす)ノードです。

よく使うシーンとしてはバリアや炎の揺らめきあたりでしょうか。

 

「Panner」と検索して配置します。図のようにつないでください。

f:id:miccak:20210507161815p:plain

 

「Panner」ノードを選択して、詳細パネルから動かしたい方向に値を入れてみましょう。

f:id:miccak:20210507162442g:plain

 

テクスチャが動き出すことを確認できたでしょうか。
動きが出て奇妙な雰囲気になりましたね……!

 

Panner の速度もパラメータ化して、インスタンス上で調整することも可能です。
以下のように組んでみましょう。

 

f:id:miccak:20210507162708p:plain

 

RがX方向、GがY方向への速度に対応するようになります。
マテリアルインスタンスで速度を変更できるはずです。

 

 エミッシブ機能を使う

続けてもうひとつ、エミッシブカラーについても学習しておきましょう。

色味は基本的に「ベースカラー」を基調としますが、マテリアルには自身を発光させるための「エミッシブ(Emissive)」という機能があります。
これを使うと、輝くメッシュなどを簡単に作ることが可能です。

 

定数ノードを配置して(1を入力)、「エミッシブカラー」ピンに接続してみましょう。

f:id:miccak:20210507162842p:plain

 

若干わかりづらいですが、光りました。
値のみを指定した場合は、1に近づくほど白く光ります。

 

発光色を指定したい場合は「Multiply」というノードを使って組み合わせます。
以下のように接続しましょう。

 

f:id:miccak:20210507163038p:plain

 

この場合はベースカラーを使って、「Multiply」ノードで発光する量を調整します。
もちろん別のカラーを使えば異なる色で発光させることができます。

なお定数はパラメータ化しています。

 

f:id:miccak:20210507163337g:plain

図はマテリアルインスタンスで発光をテストしたものです。


のちのち、プレイヤーが近づいたら光りだすという処理を作るのも面白いかもしれませんね!

 

 

(補足)「Blend Mode」を変えてマテリアルを半透明にする

さて、基本的には問題なく見分けられるメッシュになったのではないでしょうか。
各種値を調整して保存しておきましょう。

 

以下では、もう少しだけ装飾的な要素を紹介します。
ここは余裕があれば実装する程度で問題ありません。
そういうのもあるのだな、くらいに読んでいただければ大丈夫です。

 

もう少し宝石感を出すために「Blend Mode」を変更して半透明にして雰囲気を足してみます。

最終出力ノードを選択状態にし、詳細パネルの「Blend Mode」を「Translucent」に変更します。

f:id:miccak:20210507163823p:plain

「Blend Mode」は、現在のマテリアルの出力と、既に描画されている背景のブレンド表現の設定です。これを「Translucent」にすると、メッシュを半透明にする機能を使うことができます。

 

この値を調整すると、マテリアル全体の設定が変わります。
最終出力に透過性を設定できる「オパシティ(Opacity)」ピンが有効になりましたね。

 

ためしに、「オパシティ」に値を設定してみましょう。

f:id:miccak:20210507164535p:plain

 

透過しましたね!
(反対側が見えるようになりました)

 

さらに、透過して見えるようになった「メッシュの裏側」も描画させる「Two Sided」というオプションも使ってみましょう。

f:id:miccak:20210507164737p:plain

……立体感が出るかと思いましたが、このままでは効果が薄そうです。

 

さらにガラス感を出すオプションがあるので、ためしてみましょう。
詳細パネルの「トランスルーセンシー」にある「Lighting Mode」を「Surface Translucency Volume」に変更します。

f:id:miccak:20210507165234p:plain

 

これですこし立体感が出てきたように感じますね。

 

(補足)屈折(リフラクション)の演出

つづけて、「屈折(リフラクション/Refraction)」機能を使って簡単に透過部分に屈折表現を与えてみます。リフラクションの詳細な説明は公式ドキュメントを読んでください。

 

まず「フレネル(Fresnel)」ノードを検索して配置します。

これはサーフェス法線とカメラとの角度によって出力する値が変化する機能を持つノードで、シルエットを際立たせたいときなどに多用します。
(リフラクション以外でも頻繁に使用するノードです)

画像47

Fresnelを使うと外側がハイライトされるような表現を簡単に作ることができます。

f:id:miccak:20210507165711p:plain

マテリアル - マテリアルでフレネルを使用する方法 | Unreal Engine ドキュメント

 

このノードをLerp(線形補間)ノードのAlphaに使って以下のように接続します。

f:id:miccak:20210507170122p:plain


図のように歪みが付与されてリアルさが増しました。

好きな値をパラメータにして、マテリアルインスタンス上で値を適宜調整します。

 

f:id:miccak:20210507170433p:plain

 

これで一旦完成としておきます。

値を適宜調整してメッシュに適用して確認してください。
興味があれば公式のプロジェクトなどを参考に改良してみましょう。

 

 

今回は以上です。

頻繁に使用するノードを中心に、基本を学習しましたね。

より詳しく知りたい方は、ぜひ公式ドキュメントを読んでみてくださいね。

 

docs.unrealengine.com

 

公式から取得できるサンプル集のプロジェクトには勉強になるマテリアルが多数ありますので、余裕ができたら分析してみましょう。ちなみに、サンプル集にある「M_LayoutMat」というマテリアルはレベルデザインなどにオススメです。
移行して使ってみましょう。

f:id:miccak:20210507170708p:plain

 

レベルデザインの早期段階ではマテリアルを作り込むような機会が少ないかもしれません。とはいえ、作らないまでも「このマテリアルはどんな機能を持っているか」がわかっている状態であれば、アセット移行などで流用することも容易くなります。できれば、ブループリントと並行して学習を進めていきましょう。

 

正直なところ、マテリアルはその場で確認するのがムズかしく、習得には数学的な素養も必要なため、ロジックだけで(そこそこ)なんとかなるブループリントに比べると難易度は高めです。個人的に初めのうちは、他のプロジェクトのマテリアルを切り貼りして参考にするのがオススメです。他のマテリアルを使っているうちに「このノードを使うとこのような表現ができるんだな」とわかってくるようになるはず……。

 

お疲れさまでした!

 

プロジェクトのダウンロード

drive.google.com