サードパーソン ブループリント ゲーム入門 (6) キャラクターに基本的なマテリアルを付ける

ビデオの内容紹介 
キャラクター にごく簡単なマテリアルを付けます。マテリアル インスタンスを作り、これによってマテリアルの変更が簡単にできるようにもします。

原題 Introduction to Third Person Blueprint game – 6 – Basic Character Material

[1] 親のマテリアルを作成する
「親のマテリアル」とは、「マテリアル インスタンス」の元になるものです。(「マテリアル インスタンス」を作れば、マテリアルを簡単に変更できるようになります。)

まず、メインエディタで Character フォルダを選択してから、右クリック メニューで [マテリアル] をクリックして、マテリアル ファイルを作ります。
6-1

マテリアル エディタが開かれるので、右クリック メニューの検索欄に Vector parameter と入力します。
6-2

Vector parameter は、基本的には値 (定数) がセットになったものですが、「パラメータ」なので後でこの値を変更して、マテリアルの色を変更することができます。

この Vector parameter に名前を付けて、BaseColor とします。
6-3

とりあえず、Vector parameter に値をセットして、色を確認してみます。まず、BaseColor を [基本色] につなげてから、
6-4

BaseColor をダブルクリックします。すると、次のようなカラー ピッカー (色の選択機能) が開きます。
6-5

これを適当な色にします (中央にある小さな白丸を動かすと、下の RGB の値が変化します)。チュートリアルではオレンジ色にしているので、それに合わせることにします。(この部分のことを詳しく述べると、RGB の値がそれぞれ設定されて、そのセットの値が白丸の出力ノードから [基本色] に供給されます。)
6-5

これで止めても良いのですが、チュートリアルではさらに工夫しています。これから、縁に行くとマテリアルの色が濃くなるようにします。そのためには、Fresnel (フレネル) を利用します。右クリック メニューから選択します。
6-7

ここで、寄り道して Fresnel の機能を調べてみます。次のようにつないでみると、
6-8

縁がライトを強く反射しているのが分かります。ここで、下の Exponent (指数) という値を 1.0 にしてみると
6-9

のようになり、10.0 にすると、
6-10

となります。つまり Exponent を大きくすると反射の強い部分が縁に追いやられます。
Fresnel の値は、反射がない=0、反射が最高に強い=1 という範囲で動きます (0 から 1 の間にクランプされています)。Exponent の値は、この Fresnel の値を急激に変化させたり、ゆるやかに変化させたりできます。

この話は後でまた出てきますが、一旦置いておきます。そして、今のこととは別に、Power (累乗) というノードについて考えてみます。

これは、ある値 (Base に入ってくる値) を何乗か (Exp に入ってくる値分だけ) します。つまり、Base に入ってくる値を、文字通り指数関数的に大きくするわけです。

実験
BaseColor ノードにつないで、Const Exponent (指数。先の Exp のこと) の値を 1.0、2.0、4.0、0.5 にしてみます。
6-11 (1.0)
6-12 (2.0)
6-13 (4.0)
6-14 (0.5)

ここから分かるように、指数の値を高くすると、赤味が増します。
同様に、次のように青味を増すこともできます。
6-15 (1.0)
6-16 (2.0)
6-17 (4.0)
6-18 (0.5)

内部的な理屈をここで少しばかり。次の 2 つの色を比較すると、後の方が赤味が強いです。
6-19 (1.0, 0.5, 0.5)
6-20 (1.0, 0.25, 0.25)
6-21 (1.0, 0, 0)
R (赤) の値はすべて 1.0 になっていますが、G (緑) と B (青) の値は、0.5 → 0.25 → 0 と下がって行きます。つまり、G と B の値が下がると赤味が増すということになります。

このことを先の Power とからめて考えてみます。Power は累乗を計算するので、たとえば、0.5 を 2 乗すると、
0.5 ^ 2 = 0.25
となります。小数は累乗すると小さくなります。だから、Power を使うと、赤味が増したり、青味を増したりすることができるようになるのです。

次に、Lerp ノードについて復習します (Lerp については、UE4 のマテリアル入門 (3) マテリアルにテクスチャを追加するなどで取り上げています)。

Lerp (Linear Interpolate 線形補間) ノードは、A と B のピンに供給される値を最大値最小値にして、alpha (アルファ) に供給される値が 0.0 の場合、A の値が使用され、alpha の値が 1.0 の場合は B の値が使用されます。つまり、A~B の値が、alpha の 0~1 の値に応じて (比例させて) 使われることになります。

さて、ここでチュートリアルでは Fresnel ノードと Power ノードを使って、次のようなマテリアルを作ります。
6-22

Fresnel の値は、[0, 1] の間で動きました。この値は反射の強さを表します。Fresnel の性質上、球体の周辺部の値が高くなります。これが alpha に接続されているので、反射の強いところ、つまり周辺部が Lerp の B に近い値が使われることになります。Lerp の B には、BaseColor を Power して赤味が強くなった値が供給されます。つまり、球体の周辺部で赤味が強くなるということになります。Lerp の A には BaseColor のそのままの値 (Power されていない値) が供給されるので、球体の周縁部以外はオレンジ色となります。

最後に、メタリックとラフネスの値を決めます。

右クリック メニューから ScalarPrameter (スカラーパラメータ) を検索して選択します。ScalarPrameter は 1 個の float 型の値が入ります。「パラメータ」なので後でこの値を変更してマテリアルの要素 (メタリックやラフネスなど) を変更するために使用できます。

ScalarPrameter の名前を Metallic にして、Default Value は 0 のままにしておきます。もう一つ ScalarPrameter を作って Roughness という名前にして、Default Value を 0.2 にします。

6-23

[2] マテリアルをキャラクターに適用する

まず、メインエディタに戻り、Character フォルダで Character_Parent を右クリックして、メニューから [マテリアル インスタンスを作成] を選択します。
6-24

そして、作成されるファイルの名前を Character_Instance にします。
6-25

これをダブルクリックすると、エディタが開きます。
6-26

試しに、[詳細] パネルの [パラメータ グループ] の [Vector Parameter Values] の BaseColor というパラメータ (先ほど作ったパラメータです) にチェックを入れて、その右側の色が付いているところをダブルクリックすると、カラーピッカーが開かれるので、ここで簡単に色を変更することができます。(親のマテリアルを変更することなく、さまざまなパラメータを集中管理できます先ほどからベクタ パラメータやスカラー パラメータを使ってきたのは、このようにできるようにするためでした。)
6-27

他にも Metalic というパラメータにチェックを入れて、色々と変更してみることができます。
6-28

さらに、Roughness というパラメータにチェック入れて調節し、チョークのような質感を出すこともできます。
6-29

それでは、マテリアルをキャラクターに適用します。メインエディタに戻って、HeroTPP をダブルクリックします。すると、新たなエディタが開かれるので、Character_Instance を HeroTPP のマテリアル欄にドラッグアンドドロップします。
6-30

すると、次のようにキャラクターのメッシュにマテリアルが適用されます。
6-31

ちなみに、次のようにマテリアル インスタンスを変更すると、
6-32

それが適用されているキャラクターの色も変更になります。
6-33

ただし、親のマテリアルは変更になりません。
6-34

今回は以上でお終いです。ありがとうございました!




About なつのや

アンリアル・エンジン 4 を基礎から勉強するためのサイト「UE4 の学び部屋」を開いています。どうぞよろしくお願いいたします。
UE4チュートリアル, サードパーソン

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>