2022/9/19エンジニア

    【UE4】頂点カラーによるマテリアルブレンド

    Category: Unreal Engine 4 Blueprint Material

    執筆: KY

    はじめに

    こんにちは。普段3D背景デザイナーとして勤めているKYと申します。

    今回はUE4でモデルに直接頂点カラーで複数のマテリアルを塗り分けできる方法を紹介したいと思います。

    ファイルを用意しよう

    ・Unreal Engine 4.27.2

    ・格子状に割ったUV展開後の地形FBXモデルデータ

    ・塗り分けたい素材のテクスチャ3種類

    (今回は textures.com から「岩」と「土」と「草」のBase、Normal、Roughnessテクスチャをダウンロードしました)

    今回作成するマテリアル

    『UE4のメッシュペイントで頂点カラーでマテリアルの素材分けが出来る

    マテリアル』

    を目指して作成していきたいと思います。

    プロジェクトの作成(準備)

    まず「ゲーム」のカテゴリーのプロジェクトを選択し、次へ。

    「Blank」のテンプレートを選択し、次へ。

    任意の保存先を決めてプロジェクトを作成します。

    Control+Nで「Default」の新規レベルを作ります。

    何も置かれてないレベルが生まれました。

    コンテンツブラウザに「Meshes」フォルダを作成し、用意しておいた地形のFBXモデルをインポートしましょう。

    コンテンツブラウザに「Textures」フォルダを作成し、3種類の各素材のテクスチャをにインポートしましょう。

    マスターマテリアルの作成

    コンテンツブラウザに「MasterMaterials」のフォルダを作り、この中にマスターマテリアルを作っていきましょう。

    今回は「M_VertexMaterialBlend」という名前をつけました。

    テクスチャを並べてパラメーターに変換

    「M_VertexMaterialBlend」をダブルクリックし、マテリアル内を開きます。

    インポートしてきたテクスチャ素材をドラッグアンドドロップします。

    後にマテリアルインスタンス化した際、テクスチャの差し替えが出来るよう、テクスチャすべて選択し右クリックで「パラメーターに変換」をします。

    一つ一つのテクスチャの「詳細」にある「ParameterName」に素材の名前を記入し

    「Group」で頂点カラーの「RGB」のどのチャンネルに所属しているか分けて名前をつけてあげましょう。(頭文字に番号かアルファベットをつけることでインスタンス化した際の順番に準ずることができます。)

    今回はRチャンネルを「Rock」Gチャンネルを「Dirt」Bチャンネルを「Grass」としました。

    各テクスチャがどの素材の物かわかりやすくするため並びを整え、Cキーでコメントなどで囲ってわかりやすくしましょう。

    Use Material Attributes

    「マテリアル結果ノード」の詳細の中にある「Use Material Attributes」にチェックを入れます。

    小さくなってしまい、テクスチャを差し込むピンもなくなってしまいました。

    なので、右クリックで「MakeMaterialAttributes」を検索し出現させます。ブレンドさせたい素材分のノードをコピペで用意します。

    各素材のテクスチャに該当するピンを「MakeMaterialAttributes」に挿します。

    (BaseテクスチャならBaseColor、NormalテクスチャならNormal、RoughnessテクスチャならRoughness)

    右クリックで「BlendMaterialAttributes」と検索し、ノードを出現させます。

    機能としては「Lerp(LinearInterpolate)」ノードと同じです。

    Alpha値が0の場合はAの素材が反映され、Alpha値が1の場合はBの素材が反映されます。

    こちらも素材分コピペしてノードを用意しましょう。

    頂点カラーで素材分け

    右クリックで頂点カラーである「Vertex Color」と検索しノードを出現させます。

    まずはRチャンネル

    Rチャンネルに該当するRockの「MakeMaterialAttributes」ノードから「BlendMaterialAttributes」ノードのABどちらにもピンを挿し、Alphaには「Vertex Color」ノードのRチャンネルを挿します。

    次はGチャンネル

    先程のRチャンネルの情報が入っている「BlendMaterialAttributes」ノードのピンを、もう一つ下の「BlendMaterialAttributes」ノードのAに挿します。

    BにはGチャンネルに該当するDirtの「MakeMaterialAttributes」を挿します。

    Alphaには「Vertex Color」ノードのGチャンネルを挿します。

    最後はBチャンネル

    先ほどと同じようにGチャンネルの情報が入っている「BlendMaterialAttributes」ノードのピンを、もう一つ下の「BlendMaterialAttributes」ノードのAに挿します。

    BにはBチャンネルに該当するGrassの「MakeMaterialAttributes」を挿します。

    Alphaには「Vertex Color」ノードのBチャンネルを挿します。

    すべて挿し終えましたら、Use Material Attributesされた結果ノードに挿します。

    最後に「TextureCoordinate」「Muriply」「ScalarParameter」ノードを用意し、画像のように各テクスチャパラメーターのUVsに挿して挙げることでUVのスケールを調整するようにしてあげます。

    「ScalarParameter」のDefault Valueを「1」にしておくように忘れないでください。

    完成しましたら「適応」を押し、保存しましょう。

    マテリアルインスタンスの作成

    マスターマテリアルの作成が完了しましたら、右クリックし「マテリアルインスタンスの作成」を押します。

    マテリアルインスタンスはマスターマテリアルの子供みたいなもので、インスタンス内のパラメーターを変更することで多様に調整する事が可能になります。

    もし今後マスターマテリアルで機能を追加、パラメーターの追加をしたらマテリアルインスタンスにも反映されます。

    インスタンス化したマテリアルを「MI_VertexMaterialBlend」と名前をつけて「Materials」に格納します。

    マテリアルインスタンスをダブルクリックで開いてみましょう。

    チェックが出来るものがありますので、全てチェックをいれて有効にして保存しましょう。

    地形モデルのメッシュのマテリアルスロットのエレメントにマテリアルインスタンスをアサインします。

    メッシュペイントによる頂点カラーでのマテリアルブレンド

    レベル内にモデルを配置します。

    エディタの上にある「モード」から「メッシュペイント」を選択します。

    「選択」で地形モデルを選択し、「ペイント」を選択します。

    まず、「Paint Color」をR、赤色を変更し「フィル(塗りつぶし)」してみましょう

    頂点カラーのRの値であるRock、岩に変更することができました。

    他の色、G、緑にしてペイントしてみるとDirtである土を塗ることができました。

    B、青にしてペイントしてみると草を生やすことができました。

    マテリアルインスタンスにある

    UVScaleのパラメーターでUVの大きさ調整も可能です。

    頂点カラーがどのようになっているか確認したい場合は、「カラー表示モード」を「Off」から「RGB Channels」にすることで色の分配具合が確認できます。

    まとめ

    これで複数のマテリアルを頂点カラーで塗り分けることができました。

    マテリアルインスタンス化していますので各頂点カラー別にテクスチャの入れ替えも簡単にできます。

    自分の作りたい背景に合うテクスチャを用意し、自由にペイントできますので色々試してみてください。

    ここまで読んでいただきありがとうございました。

    関連リンク

    • textures.com:https://www.textures.com/
    • Utility 表現式:https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/Materials/ExpressionReference/Utility/