Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE5 新マテリアルシステム Strata入門

この記事はUnreal Engine (UE) Advent Calendar 2022 その2の記事1日目となります。

qiita.com

今回はUE5.1でアップデートされた新マテリアルシステム、Strataについてです。

公式サイトより。

Strataは日本語に訳すと『地層』という意味を持ちますが、名前の通りマテリアルの中に複数の層を持つような表現が可能となります。Strataを使うことで、これまで不可能だった表現をマテリアルシステム上で制作が可能となります。Strataを使うと例えば「金属上の液体」、「クリアコート上のダスト」または「サブサーフェス下のクリアコート」など非常に特殊な表現が実装可能になります。

オフラインレンダラーで実装されている双方向散乱分布関数 (BSDF) やuber-shaderのグラフベースミキシングとレイヤー化でレンダリングする仕組みで実装することで、Strataはこれまでゲームエンジン上で制限されたパラメータでしか作れなかった限界を越えた表現が可能となります。Unreal Engine 5ではオフラインレンダラーと同じように視覚的に複雑なものをリアルタイムでレンダリングすることを目指しているそうです。

Strataについての現時点の情報は以下のリンクに集約されており、英語ですが興味ある方は読んでみてください。

dev.epicgames.com

Strataを使う際の最大の注意点は、この機能を使うと既存のシェーディングモデルシステムのマテリアルは併用できなくなり、Strataで作られたマテリアルを元に戻すことができなくなります。互換性がないことを前提に提供されるシステムということを理解した上で利用するようにしてください。また実験的機能ということで、クラッシュもしやすいので注意してください。

それでは実際にStrataを使っていきましょう。

Strataを使えるようにする

Strataはそのままでは使えませんので、プロジェクト設定のレンダリングから項目をオンにしておく必要があります。

『Strata materials(Experimental)』にチェックをつけたらエディターを再起動しましょう。全てのマテリアルが再度コンパイルされるため、少し時間がかかります。

Strata BSDFノード

StrataにはBSDFに基づく様々なノードが用意されています。これまでのマテリアルシステムではシェーディングモデルを設定することで利用できていた箇所もノード上で設定することになります。

Strata BSDFのノードの中には以下のようなものがあります。

UnlitやEyeやHairなど、これまでシェーディングモデルを変更することで対応していたものもノードとして用意されています。また、BSDFではありませんが、Light FunctionやPost ProcessやDecalも専用のノードとして用意されています。

そしてこの中でも特に重要なのが『Strata Slab BSDF』ノードです。基本的な表現を行うためにはこのSlabノードを使って実装していきます。今回はこのSlabノードを中心に解説します。

基本的な使い方としては、これまでマテリアル出力ノードに個別にパラメーターを渡していたのに対して、Strataでは最終的な結果を、マテリアル出力ノードの『フロントマテリアル』ピンに渡すことになります。それ以外のピンについてはこれまでのマテリアルシステムと同様の使い方が可能なので、ここでは割愛とします。


Slabノードの使い方

Slabとは切り身などの意味があり、ここでは物質のスライスを表しており、インターフェースと媒体で構成される物質のことらしい。Slabノードでは2つのパラメーター化が可能であり、『Metallness(金属性)』か『Non-metallness(非金属性)』のどちらかを選ぶことができます。

これらの切り替えはSlabノードを選択し、詳細の中から『Use Metalness』のチェックで切り替えが可能です。切り替えるたびにノードが変化していることも確認ができます。

Metallness(金属性)用のパラメーター

  • Metallic
  • BaseColor
  • Specular
  • EdgeColor

Non-metallness(非金属製)用のパラメーター

  • F0
  • F90
  • DiffuseAlbedo

パラメーター名をだけをみると、Metallnessの方がこれまでのマテリアルシステムに近いパラメーターが用意されていることがわかります。しかしEdgeColor、F0、F90などのガンダムみたいなパラメーター名については別途解説が必要かもしれません。

EdgeColorは名前の通り、エッジ部分に色をつけるパラメーターです。UE4まではフレネルノードでよく表現されていました。
F0はマテリアル面に対して垂直に見た時の反射率です。0~1で表現し、0に近づくほど反射効果がなくなります。
F90はマテリアル面に対して接線方向、つまりカメラビューに対してかすめ角度でみた時の反射率です。

これら3つのパラメーターはfloat3で入力することが可能で、色を持つ要素として渡すことができます。例えばEdgeColorの場合は以下のようなノード設定でエッジ部分に色がついていることがわかります。

Non-metallnessの場合、同じように設定するとこのようになります。MetallicやSpecularのパラメーターがなくなり、BaseColorにあたるDiffuseAlbedoで色を指定します。F90にはエッジの色を指定することができます。

ここでF0の方にも値を入れることで面白い表現ができます。DiffuseAlbedoの色の上にF0で指定した色が乗ってきます。F0は反射率なので、0に近付くほど色は反映されなくなり、1に近づくほど色が反映されやすくなります。

『StrataFlipFlop』というマテリアル関数を使うと、2つの色を個別に制御しやすくなります。『FacingColor』と『TangentColor』にそれぞれ煎れを設定し、『Falloff』を設定することで『TangentColor』の反映具合を調整できます。更に『WorldNormal』を入力すると入射角による色の調整も可能になります。

Slabノードにはこの他にも沢山のパラメーターがあり、共通パラメーターを抜き出して、簡単に説明したものを以下にまとめました。説明はあくまでも参考程度です。

Roughness : ラフネス
Anisotropy : 異方性の制御(-1~1)
Normal : 法線の制御
Tangent : 接線の制御
SSS MFP : 色の平均自由行程。サブサーフェイスプロファイルが使用されていない場合にのみ適用
SSS MFP Scale : サブサーフェイスプロファイルの平均自由行程のスケーリング値
SSS Phase Anisotropy : フェーズ関数の異方性
Emissive Color : 自己発光色
SecondRoughness : セカンダリーラフネス
SecondRoughnessWeight : セカンダリーラフネスの重み
Tickness : Slabの厚さの制御
FuzzAmount : ファジー部分の強さ。主に生地などで利用
FuzzColor : ファジー部分の色

Slab演算子

SlabノードはSlab演算子(Operators)と呼ばれるノードを使って、2つ以上のSlabを合成することが出来ます。これによってより多彩な表現が可能となります。ただし、負荷は合成された数だけ上昇するので注意が必要です。5.1現在で用意されているSlab演算子は以下の5つなります。

  • Vertical Layer
  • Horizontal Blend
  • Coverge Weight
  • Thin-Film
  • Add

今回はこの中でも特に扱いやすい、『Vertical Layer』と『Horizontal Blend』についてを解説したいと思います。

Vertical Layerはその名前の通り、垂直にレイヤーを作り、マテリアル上に2つの層を作るような表現を行うことができます。Vertical LayerにはTopとBaseの2つの層があり、Baseレイヤーの上にTopレイヤーが来るものだと思ってください。ブレンドがうまくいかない場合、Vertical Layerノードを選択し、詳細から『Use Parameter Blending』をチェックすることでうまくブレンドできます。ここではテクスチャーを貼っただけの単純なBaseレイヤーに、F0とF90で反射率で色を設定したTopレイヤーをブレンドしたものです。

次はHorizontal Blendです。こちらも名前の通り水平にブレンドを行うものですが、いわゆるLerpノードでブレンドしたものに近い見た目になります。BackgroundとForegroundという2層が順番に並ぶようなイメージでブレンドされます。MixというパラメーターでBackgroundとForegroundのどちらに偏らせるかを設定することが可能です。こちらも詳細から『Use Parameter Blending』をチェックするとうまくブレンドができるようになります。

その他のSlab演算子も非常にユニークな見た目を作ることができるため、一度試してみると面白いです。ぜひ触ってみてください。

まとめ

というわけで新マテリアルシステムStrataの入門でした。難しいことは極力省いているため、もっと詳しいことが知りたいかたはEpic Dev Communityの記事を覗いてみてください。そして面白いマテリアルが出来た際にはぜひTwitterなどでシェアをしてください。

Strataはまだ触れるようになっただけで、ワークフローやUIもアップデートでガンガン変わる可能性があります。不具合も多いです。それらに注意しつつ、あくまでも個人的な検証目的で利用するとよいでしょう。

明日は@g__skrさんによる『いま作成しているものから記事にできる小ネタを探します。』とのことです。よろしくお願いします。