【UE5 R&D】MegascanのSurfaceマテリアルにDisplacement MapとTessellationを適用する
Displacement Mapを有効にして凸凹を表示する
Quixel Bridgeから追加したMaterial Instanceのパラメータを変更してDisplacement Mapを有効にすると凹凸が表示されるようにします。
MasterMaterialを変更して、追加したMaterialInstanceを簡単にDisplacement MapのON/OFFを変えられるようにします。
プロジェクトを作成する
使用するUnreal Engineのバージョンは「5.3(.1)」です。
実験用のBlankプロジェクトを作成します。
DefaultEngine.iniにTessellationを有効にする設定を追加する
Experimental(実験的機能)なので、プロジェクト設定から設定を変更できません。
「DefaultEngine.ini」をテキストエディタで直接変更します。
[/Script/Engine.UserInterfaceSettings]
のカテゴリに以下の設定を追加し、「DefaultEngine.ini」を保存します。
設定はNaniteのTessellationを有効にします。
r.Nanite.AllowTessellation=1
r.Nanite.Tessellation=1
変更した設定はエディタを再起動すると適用されるので、プロジェクトを開きなおします。
MegascanのSufaceマテリアルをプロジェクトに追加する
「Add -> Add Quixel Content」を選択して、「Quixel Bridge」を立ち上げます。
初回立ち上げ時はEpicアカウントでサインインをします。
Surfaceの項目から地面のマテリアルを選択します。
凹凸にメリハリのあるマテリアルを選択します。
選択したマテリアルをダウンロードします。
ダウンロード後に「Add」ボタンをクリックするとプロジェクトに追加されます。
テクスチャとテクスチャを設定したMaterial Instanceが追加されます。
初回「MSPresets」フォルダへMasterMaterialに必要なアセットが追加されます。
今回使用する「Desplacement Map」の情報が含まれている末尾が「_ORDp」になっているテクスチャを開きます。
末尾が「_ORDp」のテクスチャにはRGBにそれぞれ3チャンネル分の情報が含まれています。
- R : Ambient Occlusion
- G : Roughness
- B : Displacement Map(今回使用する)
Displacement Mapは「白(手前)~黒(奥)」で奥行きの情報を持っています。
奥行き情報をマテリアルに適用することで、凹凸情報を疑似的に再現できるようになります。
Displacement Mapの効果を確認するマテリアルを作成する
Surfaceのテクスチャを各チャンネルに接続します。
Displacement Mapを調整するパラメータを追加します。
BaseMaterialノードのNaniteカテゴリにあるDisplacement Mapに影響するパラメータを変更します。
- Magnitude : 10.0
- Center : 0.0
「Apply」をクリックします。
パラメータを調整するためにMaterial Instanceを作成します。
Naniteを有効にしたPlaneに作成したマテリアルを設定する
マテリアルを設定するPlaneのStaticMeshのNaniteを有効にするため、EngineフォルダからContentsフォルダにコピーします。
コピーしたStaticMeshのNaniteを有効にします。
PlaneをVieportに追加します。
PlaneにMaterial Instanceを設定します。
Material Instanceのパラメータを変更してDisplacement Mapを有効にすると凹凸が表示されます。
MagaScanのMasterMaterialをDisplacement Mapの影響を受けるように編集する
Quixel Bridgeから追加した時に作成されたMaterial Instanceを開きます。
Parentに設定されているMaterialがMegascanのMasterMaterialです。
Materialを開きます。
「ARD」というパラメータ名が設定されたTexture Parameterノードに「_ORDp」のテクスチャが設定されます。
Bチャンネルが使用されていないので、Displacement Mapが未使用の状態です。
「MF_MapAdjustments」を変更したいのですが、初回追加時にはEngineフォルダのPluginsフォルダにあるMaterialFunctionなので、Contentsフォルダ配下にある「MF_MapAdjustments」を使用するように変更します。
「MF_MapAdjustments」をDisplacement Mapを受け取れるように編集します。
確認用に作成したマテリアルのDisplacement Mapの処理を複製します。
Function Inputを追加し、画像の内容を設定します。
上下にあるMakeMaterialAttributeノードの「Displacement」に接続します。
「MF_MapAdjustments」の「Apply」をクリックします。
マテリアル側の「ARD」のBチャンネルを「MF_MapAdjustments」の「Displacement」に接続します。
BaseMaterialノードのNaniteカテゴリにあるDisplacement Mapに影響するパラメータを変更します。
- Magnitude : 10.0
- Center : 0.0
「Apply」をクリックします。
DisplacementMapが適用されているNaniteを有効に設定してあるPlaneを複製します。
Quixel Bridgeから追加したMaterialInstanceを複製したPlaneに設定します。
MaterialInstanceのDisplacement Mapのパラメータを調整すると凹凸が表示されるようになります。
Quixel Bridgeから新しく追加したSurfaceマテリアルも簡単にDisplacement MapをON/OFFできるようになります。
Displacement Mapの影響を与えるとLightingで凹凸の影が表示されます。
UE4の時はTessellationで頂点数を増やして頂点座標を歪めましたが、
UE5ではNaniteの頂点数は変わらずに凹凸を表示しています。
Tessellationは頂点数を調整してWorld Position Offsetをアニメーションさせて振幅を表現したり別の使い道があったのでUE5でも欲しいので期待していたのですが、少し違った結果になりました。
Experimental(実験的)な機能なので、今後の更新でMasterMaterialの編集は必要なくなりそうです。
期待して正式版を待ちたいと思います。
参照URL
参考にした動画
Discussion