ビデオの内容紹介
キャラクター にごく簡単なマテリアルを付けます。マテリアル インスタンスを作り、これによってマテリアルの変更が簡単にできるようにもします。
原題 Introduction to Third Person Blueprint game – 6 – Basic Character Material
[1] 親のマテリアルを作成する
「親のマテリアル」とは、「マテリアル インスタンス」の元になるものです。(「マテリアル インスタンス」を作れば、マテリアルを簡単に変更できるようになります。)
まず、メインエディタで Character フォルダを選択してから、右クリック メニューで [マテリアル] をクリックして、マテリアル ファイルを作ります。
マテリアル エディタが開かれるので、右クリック メニューの検索欄に Vector parameter と入力します。
Vector parameter は、基本的には値 (定数) がセットになったものですが、「パラメータ」なので後でこの値を変更して、マテリアルの色を変更することができます。
この Vector parameter に名前を付けて、BaseColor とします。
とりあえず、Vector parameter に値をセットして、色を確認してみます。まず、BaseColor を [基本色] につなげてから、
BaseColor をダブルクリックします。すると、次のようなカラー ピッカー (色の選択機能) が開きます。
これを適当な色にします (中央にある小さな白丸を動かすと、下の RGB の値が変化します)。チュートリアルではオレンジ色にしているので、それに合わせることにします。(この部分のことを詳しく述べると、RGB の値がそれぞれ設定されて、そのセットの値が白丸の出力ノードから [基本色] に供給されます。)
これで止めても良いのですが、チュートリアルではさらに工夫しています。これから、縁に行くとマテリアルの色が濃くなるようにします。そのためには、Fresnel (フレネル) を利用します。右クリック メニューから選択します。
ここで、寄り道して Fresnel の機能を調べてみます。次のようにつないでみると、
縁がライトを強く反射しているのが分かります。ここで、下の Exponent (指数) という値を 1.0 にしてみると
となります。つまり Exponent を大きくすると反射の強い部分が縁に追いやられます。
Fresnel の値は、反射がない=0、反射が最高に強い=1 という範囲で動きます (0 から 1 の間にクランプされています)。Exponent の値は、この Fresnel の値を急激に変化させたり、ゆるやかに変化させたりできます。
この話は後でまた出てきますが、一旦置いておきます。そして、今のこととは別に、Power (累乗) というノードについて考えてみます。
これは、ある値 (Base に入ってくる値) を何乗か (Exp に入ってくる値分だけ) します。つまり、Base に入ってくる値を、文字通り指数関数的に大きくするわけです。
実験
BaseColor ノードにつないで、Const Exponent (指数。先の Exp のこと) の値を 1.0、2.0、4.0、0.5 にしてみます。
(1.0)
(2.0)
(4.0)
(0.5)
ここから分かるように、指数の値を高くすると、赤味が増します。
同様に、次のように青味を増すこともできます。
(1.0)
(2.0)
(4.0)
(0.5)
内部的な理屈をここで少しばかり。次の 2 つの色を比較すると、後の方が赤味が強いです。
(1.0, 0.5, 0.5)
(1.0, 0.25, 0.25)
(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 ノードを使って、次のようなマテリアルを作ります。
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 にします。
[2] マテリアルをキャラクターに適用する
まず、メインエディタに戻り、Character フォルダで Character_Parent を右クリックして、メニューから [マテリアル インスタンスを作成] を選択します。
そして、作成されるファイルの名前を Character_Instance にします。
試しに、[詳細] パネルの [パラメータ グループ] の [Vector Parameter Values] の BaseColor というパラメータ (先ほど作ったパラメータです) にチェックを入れて、その右側の色が付いているところをダブルクリックすると、カラーピッカーが開かれるので、ここで簡単に色を変更することができます。(親のマテリアルを変更することなく、さまざまなパラメータを集中管理できます先ほどからベクタ パラメータやスカラー パラメータを使ってきたのは、このようにできるようにするためでした。)
他にも Metalic というパラメータにチェックを入れて、色々と変更してみることができます。
さらに、Roughness というパラメータにチェック入れて調節し、チョークのような質感を出すこともできます。
それでは、マテリアルをキャラクターに適用します。メインエディタに戻って、HeroTPP をダブルクリックします。すると、新たなエディタが開かれるので、Character_Instance を HeroTPP のマテリアル欄にドラッグアンドドロップします。
すると、次のようにキャラクターのメッシュにマテリアルが適用されます。
今回は以上でお終いです。ありがとうございました!