こんにちは、電通総研金融ソリューション事業部の飯田です。
今回は、Blenderで作成したモデル、マテリアル、アニメーションを、FBX形式でUE5に取り込む方法をご紹介します。
UE内のエディターを用いてアニメーションを設定する手順については、こちらの記事を参考にしてください。
https://tech.dentsusoken.com/entry/ue_collision
検証環境 / ソフト
OS:Windows11
GPU:NVIDIA GeForce RTX 4090
Blender:Blender4.0.2
Game Engine:Unreal Engine 5.2.1
実行手順
- Blenderでモデル、マテリアル、アニメーションを作成
- Blenderでエクスポート
- Unreal Engineでインポート
- マテリアルの修正
1. Blenderでモデル、マテリアル、アニメーションを作成
モデル、マテリアル、アニメーションを用意します。
ここでは、モデルとしてドアのオブジェクト、アニメーションとしてドアが回転する動きを用意しました。
ドアのオブジェクトに回転の動きをつける方法は、下記の記事を参考にしています。
https://styly.cc/ja/tips/blender/nimi-blender-animation/
また、テクスチャを利用して、下記の設定で木のマテリアルを作成しています。
FBX形式でのエクスポートでは、Blenderでマテリアルを設定していても、後にUnreal Engineで再設定が必要になります(4. マテリアルの修正で詳述)。
2. Blenderでエクスポート
エクスポートしたいオブジェクトをすべて選択します。
選択すると、オレンジ色の枠が表示されます。
メニューバーから、ファイル>エクスポート>FBXをクリックします。
エクスポートの設定をするウィンドウが開きます。
中央部分でファイル置き場を設定し、右部分でエクスポートの詳細の設定を行います。
下記画像のように設定します。
今回は、選択したオブジェクトを出力するため、内容>対象で「選択したオブジェクト」にチェックを入れています。
トランスフォーム>スケールを適用では、「すべてFBX」にします。
BlenderとUnreal Engineは基準とするスケールが異なっているため、
正しいスケールでUnreal Engineでインポートするために必要な設定です。
トランスフォーム>「前方」「上」では、作成したモデルがどの軸に向いているかに合わせます。
今回のモデルでは、手前がY軸のマイナス方向、上がZ軸のプラス方向だったため、その内容で設定しています。
また、アニメーションがあるため、「アニメーション」をベイクにチェックを入れておきます。
画面下部の入力欄で、ファイル名を決定します。
最後に、「FBXをエクスポート」を押します。
ここまでで、指定したフォルダにFBXファイルが作成されました。
3. Unreal Engineでインポート
Unreal Engineで任意のプロジェクトを開きます。
コンテンツブラウザのインポートボタンを押します。
先ほど作成したFBXファイルを選択し、「開く」を押します。
FBXインポートオプションウィンドウが開くので、インポート設定をします。
まず、ウィンドウ右上の「デフォルトにリセット」ボタンを押します。
Animation>Import Animationsにチェックを入れます。
それ以外は設定を変えずに、「全てインポート」を押します。
インポートが完了すると、コンテンツブラウザに、作成したモデルとアニメーションが読み込まれます。
オブジェクトとアニメーション関連ファイルとして、ドアとフレームのスケルタルメッシュ、アニメーション、スケルトン、物理アセットが読み込まれています。
マテリアル関連のファイルとして、マテリアル、テクスチャ3枚が読み込まれています。
ここで読み込まれているテクスチャ3枚は、Blenderで設定したものと同じベースカラー、ラフネス、ノーマルの3枚です。
各テクスチャの役割は、下記の記事をご参考ください。
https://tech.dentsusoken.com/entry/pbr-material-1
問題なく読み込めたか確認します。
「スケルタルメッシュ」と書かれているものを選択し、シーンビューにドラッグ&ドロップします。
オブジェクトがシーンビューに表示され、正しくインポートできていることを確認できました。
(マテリアルの反映はされないため、後ほど設定を行います。)
シーンビューでアニメーションを確認するには、右下の詳細パネルから表示の設定をします。
アニメーションを行うオブジェクトを選択します。
Animation>Animation Modeを「アニメーションアセット」にします。
Animation>Anim to PlayからBlenderで作成したアニメーションを選択します。
スケルタルメッシュ>Update Animation in Editorにチェックを入れます。
ここまでで、アニメーションがインポートされていることを確認できました。
4. マテリアルの修正
Unreal Engineにインポートされる際、Blenderで設定していたマテリアルとテクスチャは読み込まれていますが(下記画像黄色枠)、
マテリアルがどのテクスチャを参照するかの関連付けが切れてしまっているため、
改めて関連付けを行っていくことになります。
コンテンツブラウザ上で、マテリアルをダブルクリックします。
マテリアル用のウィンドウが開きます。
あらかじめインポート時に、TexCoordノードやTexture Sampleノードが構成されています。
TexCoordノードは、インポートしたオブジェクトのUV座標の情報を持っているノードです。
Texture Sampleノードは、テクスチャの設定を行うノードです。
「ベースカラー」につながっているTexture Sampleノードをクリックします。
左下の詳細パネルのTexutreで、色を設定するテクスチャを指定します。
「ラフネス」につながっているTexutre Sampleノードをクリックします。
左下の詳細パネルのTexutreで、ラフネス(粗さ)を設定するテクスチャを指定します。
ラフネスはグレースケールを扱うマップのため、Sampler Typeを「リニアカラー」にします。
設定したテクスチャをダブルクリックします。
右の詳細パネルのテクスチャ>sRGBのチェックを外します。
ラフネスのテクスチャを、カラーではなくグレースケールの値を持った画像として扱うためです。
「Normal」につながっているTexture Sampleノードをクリックします。
左下の詳細パネルのTexutreで、ノーマル(凹凸)を設定するテクスチャを指定します。
NormalはRGBの各チャンネルでグレースケールを扱うマップのため、Sampler Typeを「リニアカラー」にします。
設定したテクスチャをダブルクリックします。
右の詳細パネルのテクスチャ>sRGBのチェックが外れていることを確認します。
テクスチャがOpenGL形式の場合は、テクスチャ>詳細設定>Flip Green Channelにチェックを入れます。
Normalマップの形式については、「5. ノーマルマップについての補足」にて後述します。
最後に、ノードとの間のつながりが、下記画像のようになるように修正します。
シーンビューで確認すると、木のマテリアルが反映されていることを確認できました。
以降は、より細かいマテリアルの調整です。
ここまでの設定だと、Blenderで設定していたときよりも木目が大きく、木目の方向も異なっていることがわかります。
調整するために、テクスチャのサイズ、回転を変えていきます。
テクスチャのサイズを変えるには、Texture Coordinateノードで設定します。
Texture Coordinateノードの UTiling、VTilingの値を変更します。
値を大きくするほど細かく見えるようになります。
今回は、BlenderではもともとScaleを5と設定していたため、5と設定しました。
テクスチャの回転を変えたい場合は、CustomRotaterノードが便利です。
CustomRotaterノードを下記画像のように配置します。
Rotation Centerは、テクスチャの回転の中心位置を決めることができます。
Rotation Angleは、テクスチャの回転角度を決められます。
このパラメータは範囲が0~1のため、90度であれば0.25とします。
今回は、90度回転させるために、Rotation Angleからパラメータノードを作ります。
Rotation Angleの上で右クリックし、「パラメータへ昇格」をクリックします。
名前を適切なものに変更し、Default Valueに0.25と入力しました。
ここまででシーンビューで確認すると、木目が細かくなり、木目の線の方向が90度回転しました。
以上が、Blenderで作成したモデル、マテリアル、アニメーションをUnreal Engine5にインポートする方法の紹介でした。
5. ノーマルマップについて(補足)
ノーマルマップ(ノーマル設定用のテクスチャ)について補足します。
描画プログラムはソフトによって異なっており、基本的にはソフトに合わせたノーマルマップの形式を使用する必要があります。
例えばBlenderの描画プログラムはOpenGL、Unreal EngineはDIrectXです。
同様に、ノーマルマップはOpenGL形式とDirectX形式の2種類があります。
OpenGL形式とDirectX形式では、凹凸の方向が逆になります。
下記画像だと、左側がOpenGL形式で、右側がDirectX形式です。
ダウンロードしたテクスチャの場合、glやdxという接辞が名前に入っていることが多く、
前者がOpenGL形式、後者がDirectX形式と分かります。
今回はBlenderからOpenGL形式のテクスチャを持ってきており、
DirectXを使用しているUnreal Engineでは凹凸を反転する必要があったため、
ノーマルマップの設定でFlip Green Channelにチェックを入れています。
DirectX形式であれば、このチェックは不要です。
6. Blenderでのアニメーションについて(補足)
最後に、アニメーションについての補足を記載します。
Blenderでのアニメーションの作成方法は、3種類あります。
- オブジェクトの形状は変えずに、オブジェクト自体の位置や回転、スケールを変更させる
- オブジェクトの頂点を動かし、その前後変化を登録することで形状を変える
- ボーンでオブジェクトの形状を変える
それぞれについて、下記で詳細を記載します。
- オブジェクトの形状は変えずに、オブジェクト自体の位置や回転、スケールを変更させるアニメーション
これはドアの開閉の動きや、ボールの上下運動などの表現に使われます。
今回のドアを開くアニメーションもこちらに該当しています。
アニメーションの際に、ドアやボールの形状は変える必要がなく、
ドアであれば回転、ボールなら上下の位置を変えることで動きを表現できるためです。
- オブジェクトの頂点を動かし、その前後変化を登録することで形状を変えるアニメーション
オブジェクトの形状を変えるとは、オブジェクトの頂点の位置を変えることと同じです。
オブジェクトの頂点の位置を変え、変更後の形状をBlenderで設定することで
形状の前後変化をアニメーションとして表現する方法をとります。
これは人間やキャラクターの表情変化など、軽微な変化の表現に使われます。
例えば、笑った顔であれば、目尻を動かしたり口角をあげるだけで、それ以外は変える必要がなく軽微な変化と言えます。
普段の顔を変形前、笑った顔を変形後として設定して、笑った顔への変化を表現できます。
- ボーンでオブジェクトの形状を変えるアニメーション
こちらも2つ目と同様、オブジェクトの頂点の位置を変えます。
形状を変える際に、オブジェクトに入れ込んだボーン(骨組み)に合わせて、
オブジェクトの頂点が追従する方法をとります。
オブジェクトの頂点を直接動かすのではなく、ボーンという仲介を挟んで動かすところが、2つ目と異なります。
これは人間がジャンプしたり生物が歩いたりなど、人間や生物の身体の動きの表現に使われます。
これらを表現する際、始終身体の形状が変わることになります。
例えば、ジャンプであれば、予備動作で胴体を丸めたりひざやひじを曲げた後、すぐ胴体やひざを伸ばします。
オブジェクトの色々な箇所が動き、かつ同じ箇所が連続的に変化することになります。
このようにオブジェクトが全体的・連続的に動くことを想定して、
扱いやすいように骨組みを用意し、骨組みを動かすことで扱いやすくします。
この記事では、基本的な1つ目の形状変化のないアニメーションを、Unreal Engine5に移行する方法について説明しました。
今後は、2つ目と3つ目のアニメーションのセットアップや移行方法についても学習し、ご紹介できればと思います。
終わりに
今回は、UE5.2.1を使用して、Blenderで作成したモデル、マテリアル、アニメーションをUnreal Engine5にインポートする方法の紹介でした。
内容は難しくありませんが、別ソフト間でのデータのやりとりは想定外に手間どることが多いです。特にマテリアル関連は問題が生じやすい印象です。
スムーズにその後の作業に入るために、流れと起こりがちな問題について整理しておくことが大事だと改めて思いました。
また、今回はFBXファイル形式を扱いましたが、他の形式の選択肢も増えてきています。
USDやglTFなどの形式についても注目していきたいと思いました。
https://www.adobe.com/jp/products/substance3d/discover/3d-files-formats.html
最後までご覧いただき、ありがとうございました。
現在、電通総研はweb3領域のグループ横断組織を立ち上げ、Web3およびメタバース領域のR&Dを行っております(カテゴリー「3DCG」の記事はこちら)。 もし本領域にご興味のある方や、一緒にチャレンジしていきたい方は、ぜひお気軽にご連絡ください!
私たちと同じチームで働いてくれる仲間を、是非お待ちしております!
執筆:@iida.maya、レビュー:@nakamura.toshihiro
(Shodoで執筆されました)