Let's Enjoy Unreal Engine

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

UE5 コードフローの流れをわかりやすくするControlFlows

UE5.0から新規実装されているプラグインに『ControlFlows』と呼ばれるものがあります。

このプラグインの使い方について、どこにも全く情報がなく使い方もわかりませんでしたが、実はLyra Gameサンプル内で使われていることがわかり、個人的に使い方を調べてみました。Lyraについては公式にも解説がありますので、そちらを御参考ください。

docs.unrealengine.com

このプラグインC++で使うことが前提となっており、わかりやすく説明すると
『同期または非同期に実装された関数をキューに入れて管理、実行するシステム』とのことです。
このシステムは今のところ非純粋(non-const)な関数しかサポートしていません。

ControlFlowsを使うことで、複雑なステップやステートを持つようなロジックを作る際に、コードを読み易くシンプルな作りを可能にし、同期処理や非同期処理に関係なく、ステップを明確にすることができるようになるため後からでも構造の変更に対応しやすいというのが最大のメリットかもしれません。今回はシンプルな使い方をしていますが、Lyraの中に実際に使われているサンプルコードがありますので、そちらも参考にしてみるといいと思います。

続きを読む

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を使っていきましょう。

続きを読む

UE5 フォリッジでNaniteのOpaqueメッシュとMaskedメッシュの負荷を比較してみる

UE5.1が正式リリースされました。
docs.unrealengine.com

かなり新機能が多くて、把握するだけでも一苦労します。Lumen & Naniteも大幅にアップデートされており、検証したい項目が沢山ある状態です。その中でも特に気になっている部分でMaskedマテリアルをNaniteがサポートしてくれました!

Maskedマテリアルはフォリッジで配置する草木や樹木ではほぼ使われており、昔からゲームでは草木や樹木はMaskedのマテリアルで作られたものが非常に多かったので、これをサポートしてくれるということは非常に大きな意味があります。ただ実際にNaniteでMaskedメッシュを配置した場合どこまで効果があるのかがわかりませんので、実際に検証してみました。

今回の環境はUE5.1.0でRTX 3070を使って検証しています。それでは早速検証していきましょう。

続きを読む

UE5 Chaos RBAN(Rigid Body Animation Node)でキャラクター物理を制御しよう

UE4にはRigid Body Animation Node(RBAN)と呼ばれる物理アセットを使った軽量物理機能が存在しており、今もよく使われている物理機能です。UE5では物理エンジンがChoasへと標準搭載となり、Rigid Bodyノードは通称Chaos RBANと呼ばれるようになりました。

Chaos Rigid Body Animation Nodes (Beta)

Chaos RBANはPhysXで処理されていた部分がそのままChaosと差し替えられているので一見すると変化がないように見えますが、実際に触ってみると挙動も大きく違っていることがわかります。特にそれまでと比較して安定性が抜群に上がっており、変な挙動をするといったこともほとんどありません。うまく理解して使うと表現の幅が大きく広がります。

Chaos RBANではPhysX RBANにはなかったワールドオブジェクトのサポートや、ワールド空間の動きをあらゆるシミュレーション空間に渡せるようになったため、急激な回転や極端な加速でも安定した動きで動作できるようになりました。

これまでUE4ではキャラクターの物理はKawaii Physicsが使われることがよくありましたが、形状を維持して制御するような物理に対しても非常に有効に働きますので、思いっきり揺らしたい時と、安定して揺らしたいときなどの使い分けも可能です。
github.com

Kawaii Physicsそのものは設定も非常に簡単なので、初心者向けには非常に良い選択肢だと思います。
Chaos RBANはより表現の幅を広げたい中級者以上にお勧めしたい物理です。

今回使用したモデルはバーバラという原神のキャラクターで、公式から配布されているPMX形式のMMDモデルです。様々なバージョンがあり、どれが正しく動くかなどの保証はありません。今回は最新の2.3verのものを使用しています。
www.hoyolab.com

更にこのモデルをVRM4UのPMX読み込み機能を使って読み込んでいます。PMXの読み込みについては解説しませんので、気になる方は調べてみてください。
ruyo.github.io

この記事の解説はUE5.0.3を利用しています。5.1以降ではまた結果が変わってくるかもしれませんので、ご了承ください。

続きを読む

UE5 新機能ブループリント 名前空間について

UE5からのマイナーな新機能として、ブループリント 名前空間(Blueprint Namespace)というものが実装されています。

ブループリント名前空間は既存のプログラミング言語のように名前空間というグループを作り、別空間にあるものとは違うものとして扱えるようにしようという考え方です。ブループリントの場合は同じ名前空間に存在するBPアセットに対してのみしか読み込まないようにします。

ブループリント 名前空間で区切った場合、本来必要になるタイミングぎりぎりまでアセット読み込みを行なわないので、名前空間が違うもの同士の場合には余計なものを読み込まなくなるためにノード検索などで余計な表示を行わなくなります。これはグローバルな関数ライブラリーやマクロライブラリーを使う時に重宝します。

関数ライブラリーやマクロライブラリーはエディターが起動時にメモリーへと読み込まれます。これは起動時点からライブラリーがグローバルに存在しているものと認識するからです。更にあらゆるBP上で検索候補に出現するので余計な情報が沢山表示されがちです。これをフィルターし、同じ名前空間に存在するものしか認識しないようにしてくれるのがブループリント 名前空間ということです。

ブループリント名前空間はUE5.0でも実装されていますが、本格的に導入されるのがUE5.1以降となっています。今回はUE5.0で検証しているので、UE5.1と今後差異がでてくるかもしれません。

続きを読む

UE5 初心者・入門者向けPPLineDrawing導入手順

数日前にジャンプ+で公開中のこちらのルポ漫画でUnreal Engineを漫画で使う!というツイートがバズりました。

今年の2月に開催した、UE4 Manga Anime Illustration Dive Onlineの影響もあり、Unreal Engineの漫画需要は更に上がりつつありますね。
www.unrealengine.com

そのおかげで線画抽出のポストプロセスマテリアル、PPLineDrawingを使ってみたいという方が再度増えているようです。

unrealengine.hatenablog.com

実際に導入された漫画家さんの例。

ただし、漫画家さんにはやはり導入方法がわからないという方も多く、簡単とは言え導入まで苦労する方もおられるかもしれません。

「さすがに今更ポストプロセスマテリアル導入の解説なんていらんだろ…」と思っておりましたがUE4からUE5になってこの導入についてを解説されている記事も少ないようなので、ここで改めてUE5版での導入手順の解説をしておこうと思います。

今回はUnreal Engine 5.0.3を用いて解説します。それでは早速いきましょう。

続きを読む

UE5 Task Systemでお手軽な非同期処理! ※サンプルプロジェクト配布あり

UE5で新しく実装された非同期処理APIシステムにTask Systemと呼ばれるものが追加されています。これは日本のゲーム業界で呼ばれる一般的なタスクシステムと呼ばれるものとは全く違い、C++で簡単に汎用的な非同期処理を実現するためのジョブマネージャーです。

UE4から汎用的な非同期処理を実現するためにはTaskGraphというシステムが存在していましたが、TaskGraphはプログラミング初心者が利用するには非常にハードルが高い内容となっており、非同期処理の専門家でないと扱いが難しいものでした。Task Systemは複雑化していた非同期処理のコードを簡潔に記載できるようになるだけではなく、依存関係の処理や同期が必要な共有リソースへのアクセス、更にはPipeと呼ばれるタスクを連続して実行するタスクチェーンの仕組みが同時に用意されています。

非同期処理の扱いは難しいものがありますが、UE5で追加されたTaskSystemの導入で大幅にお手軽になっています。最も簡単な非同期処理は以下のコード量で書けてしまいます。あまりに簡単過ぎて拍子抜けするコード量です。

Launch(TEXT("Task"), []{});

公式サイトにもドキュメントにサンプルコードと解説が用意されているので、じっくり知りたい方はそちらを読んでみてください。

docs.unrealengine.com
docs.unrealengine.com

今回のコードはGitHub上にサンプルプロジェクトとして配布しておりますので、コードだけでも眺めてもらうと参考になると思いますので、よろしければどうぞ。

github.com

ではここからは早速UE5で追加されたTask Systemの中身についてを確認していきましょう。

続きを読む