UE5 ゲームのアーティスト向けのプロトタイピングのご紹介 part.1

はじめに

アドグローブ ゲーム事業部の背景アーティスト、Sです。私のブログ記事をご覧いただき、ありがとうございます!

私は背景アーティストですが、技術的な試みやプロトタイプの作成が好きです。実は、絵を描くのがあまり得意ではなく、自分のイメージを伝える手段として、プレイ可能なプロトタイプを作ることが私なりの解決策になっています。

これまで背景アーティストとして活動する中で、技術的な面で助けを求めることが多く、少し寂しさを感じることもありました。しかし、その一方で、実際にプレイできる形で作品を作り上げることで、ゲームの可能性を示したいと常に思っています。

とはいえ、プロトタイプがうまく機能するかわからず、他の人の時間を割いてもらうのも気が引けていました。そこで、まずは自分で学ぶことから始めることにしました。

このブログでは、皆さんのプロトタイプ作成をサポートできればと思い、私が数ヶ月間学んできたコツをいくつか紹介したいと考えています。
私が作ったプロトタイプやシステムが役に立って、みなさんの仕事の助けになってくれると嬉しいです。

マテリアル - Materials

まずは簡単にマテリアルから始めましょう。

MasterMaterialの概念と、さまざまなアセットで使用するためにMaterialInstanceを複製する方法について、よくご存知かもしれません(以降、MasterMaterialsをMMと呼びます)。
プロジェクトでは、常に大規模(大規模すぎる)になり、メンテナンスが難しくなりがちです。MMは、メンテナンスが簡単で読みやすいという理由で、小さな機能で作成されることがよくあります。
MMの中に機能は再利用可能であることが多いのですが、そのための準備が整っていないようです。経験上、「その機能が自分のマテリアルにあればいいのに」と思っても、その機能を自分のマテリアルに実装(またはコピー)する方法がわからず、行き詰まることがよくあります。

マテリアル関数 - Material Functions

私の参加するプロジェクトでは、さまざまなエフェクトを研究し、実験する必要がありましたが、私はまだそのような作業に関しては初心者なので、エフェクトを小さなわかりやすい関数に分解する必要がありました。そのためには、MaterialFunctionsがとても役に立ちました。

MFって?
簡単に言うと、最初はスパゲッティ マテリアルのように見えたものを再利用や保守しやすくするノードがあります。以降、MaterialFunctionsをMFと呼びます。

MFの作り方 

MF を作成するには 2 つの方法があります。

①  コンテンツ ブラウザで新しい MF を作成できます
②  マテリアル エディタでノードを選択し、右クリックして [関数に折りたたむ] を選択して新しい MF を作成します (パスと名前を割り当てます)。

③ 既存のマテリアルで MF を使用するには、マテリアルを右クリックして [MaterialFunctionCall] ノードを作成します。次に、MF を参照します。

MFをいつ使用する

技術的なことはさておき、MFにはどのようなものが含まれると考えますか?

基本的に、同じノード、関数、またはパラメーターを頻繁に再利用する場合は、それらのノード用のMFを作成することをお勧めします。
これらの個々のMFは、スイッチを使用してMMにリンクするだけで、機能をオン/オフにすることができます。このようにすると、学習中に安全にマテリアルを拡張することができます。

ヒント: MFは、LightMaterialを使用するマテリアルでも利用できますが、使用できるノードの数によって制限される場合があります。

MFの実用例 - MF examples

配置インスタンスの色変更

背景アーティストとして、配置されたアセットごとに微妙に異なる色や粗さのパラメータを持つことは一般的な要件です。このようなMF を使用すると、色を変更できるだけでなく、時間を使用するノードをオフセットすることもできます。可能性は無限大ですね!
実際は、UE5 の SpeedTree プラグインに同様の MF があります。私はこのノードを参照して、自分のニーズに合わせて修正しました。このMFをゼロから作り直してみましょう。

①まずは新しいMFを作成し、パスと名前を割り当てます。以下の画像のグラフを再現できます。
また、ノードはインスタンスごとのSpeedTreeバリエーションのMFから再利用しました。正直、ノードの数学やロジックは大体理解していますが、細かいところまではわかりません。必要なパラメータを入力して出力が得られれば十分だと思います。

②以下の画像のように、先ほど作成したMFがMMに含まれています。「Seed」というパラメーターがランダムの影響を制御し、スイッチはカラーの変化を制御します。

単純に、MFを作成し、MMに含め、パラメータを設定し、MIで制御できます。

③ MIを作成し、アセットにMIを割り当てます。
配置したアセットを動かして、パラメータを試してみましょう。

そのほか、仕事でよく使うであろうMFのアイデアをご紹介します。
自分で作成したり、誰かに依頼したりすることで、時間を大幅に節約できます。

ワールドUVか独自UV スイッチ Worldspace UVs ・Unique UVs switch

プロトタイプだけでなく、少し怠け者なので、UV作業に時間をかけたくないと思っています。一般的には、WSのUVを使用した方が良いと思います。私はYouTubeでWorld Space UVの作成方法を学び、そのロジックをMFに組み込み、手作り(Unique)UVとWSのUVを切り替えるスイッチを作成しました。

HistogramSelect

ポストプロセスでDepthベースの情報やハイトマップを扱う際、Substance DesignerやPhotoshopのように、グレーのトーンや特定の範囲を選択したい場面がよくあります。このようなMF(マテリアル関数)を持っているか、自作することは非常に実用的です。(私もよく使います)

時間停止/開始 Time Control

現在のプロジェクトでは、状態の変更がありましたが、これはMaterial Parameter Collection(後で説明します)、BP(ブループリント)、またはC++コードで実行されました。この変更に基づき、時間ベースのマテリアル機能を停止・開始する必要がありました。シンプルなMF(マテリアル関数)を使用することで、MM(マスター・マテリアル)での実装が容易になり、維持もしやすくなりました。

今こそ、マテリアル以外のUEのより技術的な特徴に目を向ける良い機会になるでしょう。

Blueprint(BP)でスカラーパラメータを制御する方法 Scalar Parameter controls in BP

MMのスケーラーはもちろんMIの使用に便利ですが、MI以外でも制御可能です。Actor BPやレベルBP、プレーヤBP等で、マテリアルのパラメータを制御し調整することができます。
このようなBPで制御されたパラメータは、エディタでの作業をより簡単にするかもしれませんし、さらに重要なことに、プレイ中にマテリアルの変更を観測することができます。

マテリアルの準備 - Preparing Materials

簡単な例を作りましょう。以下の画像のように、新しいMMを作成し、二つのカラーパラメータをLerpノードのA・Bに接続します。
スケーラーパラメータは「Lerp」ノードのAlphaに接続し、Lerpの出力をベースカラーの入力に接続します。保存して、このMMからMIを作成します。

BPの設定 - BP setup

コンテンツブラウザで「アクタ」タイプの新しいBPを作成します。BPを開いたら、コンポーネントリストでStaticMeshを追加し、詳細パネルでスタティックメッシュを選択して、先ほど準備したMIを入力してください。

コンテンツブラウザでBoxCollisionも追加します。BPのビューポートパネルで、メッシュとコリジョンを調整できます。BoxCollisionのサイズと配置は、プレイヤーがオーバーラップしやすいようにするべきです。
プロトタイプがしやすいように、コリジョンの詳細パネルでHiddenInGameの設定をオフにすることができます。

イベントグラフパネルを開き、コンテンツブラウザでコリジョンを右クリックして、「OnComponentBeginOverlap」と「OnComponentEndOverlap」イベントを追加します。

私のようにUE5のThirdPersonテンプレートを使うと、以下の画像のようにノードを接続することができます。この設定では、プレイヤーがコリジョンに重なると、後で接続したすべてが反応します。

BPでマテリアルの変更を設定しましょう。まず、StaticMeshをコンポーネントリストからイベントグラフに挿入し、「Set Scalar Parameter Value on Materials」を選択します。

「Set Scalar Parameter Value on Materials」ノードにパラメータの名前を書きます。 (書き間違いを防ぐため、MMパラメータ名をコピーした方が良いです)。
BPをシーンに配置し、BPのScalar Parameter Valueの値を変更して、変化を観察できます。

全てのノード(OnBeginOverlapを除く)を複製し、「Branch」の入力を「OnEndOverlap」に繋ぎます。「SetScalarParameter」の値を1に設定します。BPをコンパイルして保存します。

では、実際にプレーしてみましょうか?

良いスタートですね!このような制御で、以前に作成したMFも接続することができます。

BPのStaticMeshのマテリアルを変更し、パラメータ名も変更します。結果は以下の画像のように見えるはずです。

アセットを単独のアセットとしてではなく、システムとして見る習慣を身につけると、ゲーム内でプレイ可能な外観を(紙の上ではなく)すぐに確立できます。より広い視野で計画を立て、チーム、そしてさらに重要なクライアントにその可能性を示すことができます。

ホットキー制御 BP control Hotkeys

上記の例のような視覚的な変更は、ホットキーで制御するのが好みです。
最も簡単な方法は、レベルのBPで実行することです。
レベルBPを開き、グラフ内で右クリックして「Keyboard」を検索し、好みのホットキーを選びます。

ホットキーが機能するかどうかを確認したい場合は、ホットキーの出力に「Print」ノードを接続します。
以前作成したBP_ONOFF Blueprintの作業を続ける場合は、レベルBP内にそれを含める必要があります。ホットキーの出力から「Get All Actors of Class」というノードを接続し、クラスとしてBP_ONOFFを選びます。

ヒント:レベルに適切なマテリアルが適用されたStaticmeshあり、 レベルのBPにActorClass として StaticMesh を選択した場合は、 ScalarParameter の変更も機能します。

BP_ONOFFのBPで以前行ったように、BP内のメッシュのスカラーパラメータ名と値を設定する必要があります。以下の「Target」ノードは自動的に接続されるはずです。

上の画像の解説となりますが、私のBP_ONOFFのメッシュに割り当てたマテリアルは、以前作成したMFを使用しているため、パラメータ名は「Seed」と呼びます。パラメータ値についてはランダムノードを接続しました。

もし、割り当てられたマテリアルがMFを使用していない場合、以下の画像のようになります。

もし、値を1から0に変更したい場合は、「FlipFlop」というノードを使用できます。
以下のように接続すると、ホットキーを押すたびに、GIFに示すように反転します。

以下の画像で、以前作成したランダムカラーMFを使用したマテリアルがBP_ONOFFのStaticMeshに割り当てられているのがわかります。
レベルBPでSetScalarParameter名を「Seed」に変更し、パラメータ値に「Random Float in Range」ノードを接続し、値を0から1000に設定しました。実装されたホットキーを使用すると、GIFのようにシーンに配置されたBPの色を変更できます。

まとめ

この記事では、背景アーティストとしての視点から、マテリアルやマテリアル関数(MF)、Blueprint(BP)を活用したプロトタイピングの手法を紹介しました。MMの管理やMFの活用によって、より効率的にマテリアルを構築し、ゲーム開発のプロセスをスムーズに進めることができます。

今回は、マテリアル関数とBlueprint(BP)でスカラーパラメータを制御する方法をメインにご紹介しましたが、次回はタグ(Tags)や、実用的なシーンもご紹介できればと思います。

この記事で紹介したテクニックが、皆さんの開発に少しでも役立てば嬉しいです。ありがとうございました。


アドグローブでは、さまざまなポジションで一緒に働く仲間を募集しています!
詳細については下記からご確認ください。みなさまからのご応募お待ちしております。

採用情報