当たったらどうすんだよ

当たらなければどうということはない

Blender to Unreal Engine 2021のアレコレ

はじめに

qiita.com

こんにちは、一年ぶりのなんです。

このブログ記事はUE4アドベントカレンダー2021その2における12月23日の担当記事になります。内容ですが、いろいろ考えましたが「旬の話題」ということでBlenderUnreal Engineを連携させるためのアレコレについて2021年の年末仕様で書こうと思いました。

f:id:kanianthi:20211222152128p:plain

Blender2.93LTS with AutoRigProで作成したUE4キャラクタZoeaちゃん

最新のBlenderは?

今年はUE5のEA版が公開され、つい最近は「あの」MATRIXデモが公開されるなどUnreal Engine周りの期待がさらにさらに高められたと思います。ぼく自身、UE4もUE5も仕事での開発についてもプライベートでの制作についても毎日触れては覚えの連続ですが、なにはともあれ必ず行う作業があります。それは「アセットを3D DCCで作成する」という作業です。

弊社の場合、自社制作によるゲーム開発と様々な受託開発やR&Dを行っているのですがほぼすべてのケースでBlenderを導入してきました。自社開発については100%がBlenderによるアセット制作を行っています。そういう場面において「良くある誤解」があります。なにかというと「Blenderの最新版ってなに?」という疑問です。

www.blender.org

現状、Blenderの最新版は…そうBlender3.0がつい最近リリースされました。ついにBlenderが2.xから3.xにメジャーバージョンアップされたのです。しかし同時に、Blenderには2.8x系からLTS版という概念が導入されています。

f:id:kanianthi:20211222091010p:plain

Blender LTS版のDL

LTSとはLong Term Supportつまり長期保守版です。現在でもBlnder2.83LTSと2.93LTSは更新と保守が継続されているので「業務で安定して利用できる最新保守更新版」と言えるバージョンになり、たとえばBlender2.91や2.92は「2.83LTSより機能は追加されているが更新は止まっているバージョン」と言えます。

つまり2021年12月現在ではBlender3.0が最新版ですが、間もなく3.1や3.2そして3.3LTS版がリリースされていくでしょう。しかしその間も2.93LTS版は更新され続けますので、バグが少なく安定して業務で利用できるバージョンとしてLTS版は重要な存在意義を持っています。

Blender and UE4

さてBlenderUE4をつなぐワークフローについては、このブログでも何度か言及してきました。2.7x初期の頃はいろいろ苦労もありましたが、2.79時代から2.8x世代にかけて大幅に連携性が改善され、今では普通にBlenderUE4間でアセットのやりとりができるようになっています。

また、Epic GamesBlender財団に対して最大規模の支援を行うようになり、Epic Games公式でアセット連携用のアドオンを公開してくれたことも大きなトピックでした。

新しい Blender アドオンをダウンロードしましょう - Unreal Engine

↑こちらにEpic公式アドオンの紹介とGithub連携方法が記載されています。ただしGithubのアカウントを持っているだけだと404が出てしまいますので、記事にて指摘されているようにGithubアカウントをEpic Gamesアカウントと連携させる必要があります。

※残念ながらこちらのアドオンについては2021/12/21現在ちょっと更新が止まっているように見受けられます。

なお、現在ではスタティックメッシュについては「普通にBlenderからFBXを書き出すだけ」でUE4に正常な状態でインポートすることが可能です。

ただし

  1. 必ず実寸法でアセットを作成する(1メートルのものは1メートルで)
  2. UVは必ず展開しておく
  3. スムーズシェーディングをオブジェクトに設定しスムージンググループの設定を正しく行う
  4. 重複頂点や縮退ポリゴン(大きさゼロのポリゴン)がないようにクリーンアップをしておく
  5. サブディビジョンサーフェースは諦めるか適用した状態でFBX化する(FBX化すれば自動でモディファイヤが適用されますがサブディビジョンされた状態でメッシュ化されます)

などの基本は押さえておきましょう。

また、スケルタルメッシュ(キャラクタなどのボーンで変形、アニメーションするメッシュアセット)についてもかなり運用が楽になっています。簡単なものであれば弊社によるX4UEアドオンを導入していただくだけでなんとかなりますし、最近ではAutoRigProが通常のBlenderアーマチュアで作成したスケルタルメッシュまで各種ゲームエンジン用FBX出力をサポートするようになったので万能感と存在感がさらにアップしています。

blendermarket.com

↑AutoRigProについては年末年始の休暇を利用してまとまったHow Toをここで記事にしようと思います。

プロシージャルワークフローもBlender to UE4できる!?

次に、Blender2.9x系から強化され続けているGeometry Nodesについても紹介しておきましょう。こうしたプロシージャルワークフロー/モデリングではHoudiniの名前がすぐに連想されますが、実をいうと3dsMaxやBlenderでも(あるいはMayaでも)プロシージャルな→言い換えると「ノードベースな」モデリングやアセット構築は以前から可能でした。

f:id:kanianthi:20211222151654p:plain

Blender3.0のGeometry Nodes作例

そもそもノードというのはUE4のBlueprintですぐにイメージされるような、なんらかの処理を行うカードにラインを引っ張ってきて接続することで全体を構築していくイメージだと思いますが、このノードというものはなにもカード型にビジュアライズされているもの「だけが」すべてではなく、一連の処理における関数の実行や変数の上書きなどという「処理のステップであればなんでもノード」ということができます。

f:id:kanianthi:20211222151949p:plain

UE4のBlueprint例

そのためMayaであればMelやPythonから、あるいは3dsMaxならMaxScriptまたはPython、さらにMaxとBlenderでは「モディファイヤのスタック」をノードとみなしてプロシージャルで非破壊的なモデリングやワークフローが可能です。

特に(少し話は逸れますが)3dsMaxの頂点編集モディファイヤは非常に強力なノードで、モデリング作業でメッシュに行ったすべての頂点編集がモディファイヤに記録されます。そのため、たとえばひとつのキューブからモデリングを始めて頂点編集モディファイヤを設定したなら、自動車や宇宙船が完成したとしてもいつでもモディファイヤを外せば元のキューブに戻ることが可能です。応用すれば、モデリングのステップごとに頂点編集モディファイヤを(ちょうどレイヤーのように)モデリングの各工程を記録させることが可能になっています。

プロシージャルモデリングというのは、そうしたひとつひとつのモデリング過程を関数化したり参照を取って引数として渡すような処理の連続を「プログラミングする」ことでモデリングを行う機能で、最終的には親ノードの変数(パラメータ)を可変することでモデリング結果が動的に変わることからパラメトリックモデリングとも呼ばれています。

AlterMesh Plugin

altermesh.com

ごく最近の話ですがAlterMeshプラグインというものが出てきました。これはBlenderのGeometryNodesをちょうどHoudini Engineで利用できるHDA(Houdini Digital Assets)のように運用するためのプラグインです。

現在はベータ版でまだ「いろいろ不安定な状態」ではありますがサポートDiscordコミュニティはなかなか盛んに更新されていますし、作者によるロードマップも公開されています。

こちらのプラグインですが現状がベータ版であるからか今後も同じ販売形態で行くのかはまだ分かりませんが、とりあえず個人で非営利用途であれば無償で利用が可能です。

f:id:kanianthi:20211222190301p:plain

UE4.27でAlterMeshプラグイン

このプラグインは導入するだけでは動作してくれません。プラグインをプロジェクトの所定のフォルダに配置し、プラグイン設定からオンにしたあと、プロジェクト設定で「Blenderのパスを指定する」必要があります。

f:id:kanianthi:20211222190532p:plain

プロジェクト設定→プラグイン→AlterMeshでBlenderのパスを指定

実際にBlenderのアセットをUE4にインポートする手順ですが…blendファイルをドラッグアンドドロップするだけです。簡単!blendファイルが正常にインポートされるとAlterMeshアセットとしてコンテンツブラウザに表示され、あとは通常のメッシュアセットと同じようにレベルに置けば表示されます。

ただしその際、裏でBlenderが動作していることから通常のアセットに比較して若干タイムラグが発生するのは予想通りでした。

f:id:kanianthi:20211222205719p:plain

UE4にインポートされたGeometryNodesアセット

f:id:kanianthi:20211222210137p:plain

Group InputのパラメータがUE4アセットとしても可変できるようになる

UE4にGeometryNodesアセットをインポートすると、Blenderで作成したGroupInputノードの引数がパラメータとして制御できるようになります。また、キーフレームを打ってアニメーション化していればそのまま反映されます。ただし「#frame」などのドライバを組んでおいた場合は…Blender側のタイムラインを動かす必要があるのでちょっとうまくいかないようでした。(将来的には対応してくれそうですが)

f:id:kanianthi:20211222211126p:plain

UE4のアセット詳細パネルに変更可能なパラメータが表示される

また、AlterMeshプラグインが有効化されているとAlterMeshActorという拡張BPクラスが使えるようになります。

f:id:kanianthi:20211222211348p:plain

AlterMeshActorのイベントグラフ(コンストラクションスクリプト

f:id:kanianthi:20211222211935p:plain

AlterMeshActor独自のノード群(一部)

こんな感じにAlterMeshActor独自のノードやライブラリ、変数なども実装されていてベータ版とはいえそれなりにBPとしてAlterMesh化されたGeometryNodesをUE4のエディタまたはPIE時に実行制御することが可能でした。

ただし、これはやむを得ないことと理解していますが現時点では色々不安定でゲームや映像などの開発に使える状況ではありません。あくまで今後の発展に期待しつつ、見守りながら応援していくフェーズなのかな、という印象です。

以上、長くなりましたのでここまでにしますが、2021年12月時点でのBlenderUE4連携についてツラツラと書いてみました。

※AutoRigとかHairTools周りの記事も年末年始休みに書こうと思っています。ご期待ください。