LoginSignup
7
3

More than 3 years have passed since last update.

ブループリントでマテリアルやテクスチャを操作する(Unreal Engine 4.25)

Posted at

前提

身内用に書いたものを、暫定的に公開しているものです。何かおこったら閉じるかもしれません。

前の記事に書いた知識(ブループリントの最低限の知識)は持っている、という前提で書いてます。特に説明のない限り、Unreal Engine 4.25 で FirstPerson テンプレートで作成したプロジェクトのレベルブループリントのイベントグラフ上で操作をする前提です。

image.png

準備

外部オブジェクト(ブループリント)の参照の例の説明のために、FirstPerson プロジェクトにブループリントを追加しておきます。

image.png

キューブのアクターをひとつ画面内に配置して、右の詳細から「ブループリント/スクリプトを追加」を押して、ブループリントを追加してください。

image.png

デフォルトで Cube_Blueprint という名前のブループリントになりますが、ここではそのままの名前で作成したものとして説明します。

image.png

ブループリントでマテリアルを操作する準備

アクターの色をブループリントで変えるとか、テクスチャを動的に変更する、みたいなことをするには、アクター(メッシュ)に設定されたマテリアルのパラメータをブループリントで操作する必要があります。

ただし、マテリアルをアプリの実行中に変更はすることはCPUやGPUに大きな負荷をかけるため、基本的にはアプリの実行中にはマテリアルのパラメータを自由に変更できない仕様になっているようです。

ブループリントでマテリアルのパラメータを動的に変更できるようにするには、

  1. ベースになるマテリアルを作成する
  2. マテリアルの変更したいプロパティをパラメータとして指定する
  3. マテリアルをダイナミックインスタンス化する(ダイナミックマテリアルインスタンスの作成)

という三つの操作が(最低限)必要そうです。

ベースになるマテリアルの作成

ベースのマテリアルは普通に作ります。

image.png

コンテンツブラウザで右クリックして、マテリアルを選びます。

image.png

作成したら名前をつけておきます。ここでは LchikaMaterial としました。以下、この名前にしたものとして説明します。

変更したいマテリアルのプロパティのパラメータ化

パラメータの指定というのは、パラメータに名前を付けるくらいの意味です。

image.png

作成した LchikaMaterial をダブルクリックして開きます。

image.png

例えば、ベースカラーをブループリントで操作したい場合は、ベースカラーのところで右クリックして「パラメータへ昇格」を選びます。

image.png

すると、こんな感じで「ベースカラー」というノードができます。通常のマテリアルなら、ベースカラーのノードで色を設定したりしますが、パラメータ化が目的なら色の設定をする必要は特にありません。

image.png

追加されたノードの Parameter Name を変更しておきます。この Parameter Name は ブループリントでプログラムを書くときに使うので、わかりやすい名前にしておきます。

image.png

ここでは CubeColor という名前にしました。以後、この名前にしたものとして説明します。

マテリアルをダイナミックインスタンス化する

この操作はエディタではできず、作成するためのコードを書く必要があるようです。

image.png

Create Dynamic Material Instance ノードを使うことで、ダイナミックマテリアルインスタンスを作成することができます。上の例では Construction Script に書いています。ここに書いておけば、ビルドした時点で LchikaMaterial を親(ベース)のマテリアルとしてダイナミックマテリアルインスタンスが作成されます。

image.png

作成するだけならこれだけでOKですが、メッシュの色を変えるためにこのインスタンスを使うためには、メッシュのマテリアルとして設定する必要があります。

上のコードの SetMaterial のノードで、作成したインスタンスを Cube_Blueprint のマテリアルとして設定しています。最後の SetVectorParameter ノードでは、マテリアルのベースカラーを赤っぽい色に設定しいます。

image.png

Construction Script にコードを書いているので、これらをビルドした時点でエディタ上の Cube_Blueprint の色が赤になるはずです。もし変化しないとしたら、ここまでの操作のどこかが間違っています。ParameterName や OptinalName をタイプミスしている可能性が高いです。

ここでのポイントは、最後の SetVectorParameter ノードで Parameter Name に、最初に作ったマテリアル(LchikaMaterial)でパラメータ化した CubeColor を指定しているところです。

image.png

CubeColor を指定することで、先にパラメータ化したベースカラーの色を変更することができます。

ブループリントでマテリアルを操作する

マテリアルの色を変える

image.png

作成したダイナミックマテリアルインスタンスを CubeMaterial という変数にいれているので、あとはこの変数を使って SetVectorParameter などのノードを使えば、プログラム中で色を動的に変更することができます。

image.png

たとえばこんな感じのコードを Cube_Blueprint に書けば、球やプレイヤーがキューブにぶつかると色が変わります。

image.png

アプリ起動時はこの状態です。マウスの左ボタンで球を撃ってキューブにあてると、

image.png

色が青くなります。よね?

テクスチャを変える

image.png

ベクトルではいスカラー値のパラメータは SetScalerParameterValue ノードを、テクスチャ関連は SetTextureParameterValue ノードで指定します。

image.png

テクスチャのパラメータは TextureSampleParameter2D などが使えるようです。

image.png

上のようなコードで、テクスチャを変更できます。

image.png

初期化はこんな感じでいけるようです。

image.png

これでキューブを撃てば、

image.png

テクスチャが変更されます。

このくらいヒントがあれば(以下略

今度こそ終わり

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3