Flow-Developers

Raspberry Pi, Raspbian, python, ROS, IoT, 電子工作, 機械学習, Deep learning, ライフハック

AccuRIGを使ってアニメーションをつけてみた

AccuRIGの自動リギングが良さそうだったので、Blenderと組み合わせてアニメーションつけてみました。その手順です。

  • 人型のFBXをAccuRIGにインポートすると、自動でBodyRigを設定してくれます。(キャラクターなど厳密には人型でない場合は、自動でBodyRigを設定してもらった後、不要なRigをMaskします)

  • HandRigも自動で設定してくれます。気になるところがあれば微調整します。

  • リグが組めた状態になるので、「Upload to Actor core」ボタンをおして、AccuRIGが提供しているクラウドサービスにUploadします。(デフォルトは非公開設定)合わせて、Exportボタンも押して、リグありモデルをBlender用としてFBX保存しておきます。

  • AccuRIGが提供しているクラウドサービスで無料のアニメーションをカートに入れて購入、先ほどUploadしたモデルに適応します。

  • Download(Motion)ボタンを押すと、使うプラットフォーム(今回はBlender)等を指定してFBXでアニメーションをダウンロードできます。

  • Blenderに、リグありモデルをインポートします。(先のExportボタンでダウンロードしたもの)

  • Blenderに、アニメーションFBXをインポートします。(先のDownload(Motion)ボタンでクラウドサービスからダウンロードしたもの)

  • blender-animation-retargeting(https://github.com/Mwni/blender-animation-retargeting) を利用してアニメーションをリターゲットします。

  • blender-animation-retargetingでBake in Animationボタンをおせば、アニメーションをターゲットに転写できます。

AccuRIGだけでアニメーションも管理できればよかったのですが、アニメーションはクラウドサービスを利用しないとだめそうでした。またAccuRIGのBlenderプラグインでアニメーションの転写も試したのですが上手くいかなかったので、 blender-animation-retargeting(https://github.com/Mwni/blender-animation-retargeting) を利用してアニメーションをリターゲットしました。便利そうで便利でもないですがせっかく使ったので手順を残しました。

参考文献

note.com

github.com

IK Retargeterの使い方を理解すれば、UE5のmetahumanにアニメーションを転写するのは簡単

IK Retargeterの使い方を理解すれば、UE5のmetahumanにアニメーションを転写するのは簡単でした。書きます。

  • [Animation (アニメーション)] > [IK Rig (IK リグ)] > [IK Retargeter (IK リターゲッタ)] を選択

  • アニメーションをリターゲティングする元の IK リグを選択(今回はIK_metahuman)

  • (今回は)SK_manekin用に作られたアニメーションをmetahumanに転写するので、「Source IKRig Asset」と「Source Preview Mesh」をSK_manekinに対応したものに変更する

  • 続いて、「Target IKRig Asset」と「Target Preview Mesh」をmetahumanに対応したものに変更する(m_tal_unw_body_previewで良い。男性ならば。女性は似たような名前で別のMeshがある)

  • 2つのMeshが見やすいように、Targetの位置をずらす

  • ここが重要!結局のところアニメーション転写で失敗するのは、SourceからTargetに写す時に、対応するリグのありなしに依存する。metahumanは指と連動した手首のところに複数のリグ(HOGEmetacarpal)があり、SK_manekinやその他からアニメーションを転写する場合、ここに間違ったRigが自動で対応づけされてしまい指のアニメーションが滅茶苦茶になる。なので、この手首のところに複数のリグ(HOGEmetacarpal)の対応づけを「None」にして対応させなければ良い。結局は、異なるリグ同士の対応づけを調整すれば良いだけ。という基本を理解しておけばその他問題にも対応しやすい。

  • 右手側にも、手首のところに複数のリグ(HOGEmetacarpal)があるので、None」にして対応づけを外す

  • Asset Browserのところに、SK_manekinに対応づけられたすべてのアニメーション一覧があるので、好きなものを選ぶ

  • Export Selected Animetionで、metahumanにアニメーションを転写したアニメーションを書き出すことができる

  • 問題なく、metahumanでアニメーションすることができた

IK Retargeterについて説明しました。結局のところ、異なるリグ同士の対応づけを調整すれば良いだけ。という基本を理解しておけばその他問題にも対応しやすいので、ぜひそれを念頭に置いてトライしてみてください。

参考文献

www.youtube.com

Unreal Engine での IK リグ アニメーションのリターゲティング

UE5でComposureを使って、BlenderのCycleみたいにShadow Catcher(影をレンダリングする)を作り、背景画像プレートに影を落とす

BlenderのCycleでレンダリングすれば、Shadow Catcher(影をレンダリングする)は簡単なのですが、UE5で同じようなことをやる方法が、Composureを使うと良かった(それ以外にまともな方法がなかった)ので書きます。

  • (Blenderでも同じですが)影を落とすためには、床が必要なので作ります

  • ComposureだとAplhaチャネルを作るために、壁も必要なのでそれも作ります。Planeを選択して「Eキー」を押して、「Altキー」を押しながら回転すると複製が簡単です

  • CineCameraActorを配置しておきます(後工程で、Composureと連動させるためです)

  • Windows -> Virtual Production -> Composure Compositingと選択して、Composureを設定するWindowを開きます

  • Windows -> Layersと選択して、Layerを設定するWindowを開きます (ImageやCGのレイヤをこれで作れます)

  • 空のPlaneに任意の画像テクスチャを貼り付けて、CineCameraActorと親子関係にすることで、カメラの向きと連動したPlateを作ります

  • Create New Compで、Composureにレイヤーを作っていきます

  • ComposureにMedia Plateのレイヤーをつくり、「media_plate1」として画像テクスチャを貼り付けます。これが合成画像の背景となります。

  • Composureに3つ、CG Layerを作ります。前景CGを定義する「FG」、影を描画する床と壁を定義する「Floor」、「FG」と「Floor]の差分を取って影を定義する「Shadow」とし、この群が合成画像の前景となります。

  • Layersに3つ、Layerを作ります。(Composureに設定するためのレイヤーです)前景CGを定義する「FG」、影を描画する床と壁を定義する「Floor」、「FG」と「Floor]の差分を取って影を定義する「Shadow」とし、この群が合成画像の前景となります。(LayerはそのActorを選択した状態で、作れます。「Floor」と「Shadow」は同じActor群で良いです)

  • Composureに戻り、上記で作成した「FG」「Floor」「Shadow」のレイヤーをInputに紐づけます

  • 「Shadow」は、Inputに「FG」「Floor」の2つを紐づける必要があります。これは影を差分として取得するためです

  • 上記までのレイヤー作成とComposureのinputへの紐づけて、合成画像を作るための素材は揃いましたが、合成画像を完成させるためには、ComposureのTransform Compositing Passesに、各素材(レイヤーをComposureのinputへの紐づけるとTexture2Dとして扱える)をどう合成するかをBluePrintで記述したMatelialを作成し、紐づける必要があります。そのためにまずM_Compositeという名で空のMaterialを作ります

  • M_Compositeと名付けたマテリアルを開き、Material DomainをPost Processにします。これはこのマテリアルが合成用であるためです(Material Domainについては参考文献をお読みください)

  • M_Compositeと名付けたマテリアルで、前景に「FG」、後景に「media_plate1」と、「FG」&「Shadow」の差分から得た影成分を合成するBulePrintを記述します。(詳細は参考文献をお読みください)

  • M_Compositeと名付けたマテリアルを、ComposureのTransform Compositing Passesに紐づけます

  • 以上の工程を得て、前景「FG」と後景に「media_plate1」と、「FG」&「Shadow」の差分から得た影成分を合成した画像が生成できました

  • ComposureのOutputを設定することで、今回生成した合成画像をどこに出力するかを選択できます。今回はViewPortに出力する設定を行いました

  • ComposureとCineCameraActorを紐づけることで、カメラと連動して動かせます

  • 無事、ViewPortにComposureで合成した画像が出力できました!

UE5でComposureを使って、BlenderのCycleみたいにShadow Catcher(影をレンダリングする)を作り、背景画像プレートに影を落とせる様にするためには、UE5におけるMaterial、BluePrint、Texture、Project settingの知識といった総合的な知見が必要で、UE5の文法がなにもわからないまま、Composureを扱うのは難しいと思います。まずは、CGのみでMaterial、BluePrint、Texture、Project settingの知識をそれぞれ蓄えてからトライすると良いと思います。

参考文献

www.youtube.com

dev.epicgames.com

dev.epicgames.com

UE5でNDIを受信して、ImagePlateに貼る

UE5のImagePlateは、CineCameraActorの画角と連動するので便利です。このImagePlateにNDI映像を貼る手順について書きます。

  • ImagePlateのプラグインをONにする(UE5を再起動する)

  • NDIのプラグインをONにする(UE5を再起動する)※NDIのインストール方法は参考文献を参照ください。

  • ImagePlateをレベルに配置する

  • ImagePlateをCineCameraActorに紐づける。ImagePlateの位置と回転をカメラと正対するように調整する

  • NDI Media Reciverを作成する(受信するNDIデータと参照するDI Media Texture 2Dをこれで指定できる。名前は任意でOK)

  • NDI Media Texture 2D を作成する(これにNDI映像が画像テクスチャとして貼られる)

  • NDI Media ReciverにNDI Media Texture 2D を指定する

  • ImagePlateに貼り付けるための空のMaterialを作る(名前は任意でOK)

  • 上記で作った空のMaterialに先に作ったNDI Media Texture 2Dを紐づける(ImagePlateは通常のMaterialしか貼れないので、NDI Media Texture 2Dを貼りなおす感じ)

  • NDIはRGBAにも対応しているので、Material設定で「Output Alpha」をONにしておく。そうするとOpacity(AplhaCHの繋ぎ先)が出来る

  • Material設定は、Material Domain -> Post process, Blend mode -> Translucent, Shading model -> unit, Two Sided=onにしておく。これでRGBAを受けられるので、RGBをEmmisive colorに、AlphaをOpacityに繋ぐ

  • ImagePlateに上記で作ったMaterialを紐づける(参考画像では、NDI_Materialという名前にしている)

  • (手続き的な事実として) NDI Receive Actorをレベル上に配置しておかないとNDIが上手く受信できないので、配置する

  • NDI Receive ActorをCineCameraActorの画角外の遠いところに置いておく(NDIを上手く受信するために手続き的な事実として置いているだけなので)

  • Game Playすると、NDI受信した映像が正しくImagePlateに反映される

  • ImagePlateの位置Xを前後させれば、CineCameraActorの位置からとある距離にImagePlateを置くことが出来、それが2D映像の位置となる

  • ビューポートの解像度を1080以上に設定することも忘れずにやっておく

以上で、UE5でNDIを受信して、ImagePlateに貼ることが出来る。

参考文献

dev.epicgames.com

ndi.video

riragon.com

zenn.dev

m-designx.com

THETA Z1で撮影したHDRI(exr形式)は, BlenderでHDRI(hdr形式)に変換して,UE5で色々設定すればいい感じに使える

THETA Z1で撮影したHDRI(exr形式)は、そのままではUE5にインポート出来ません。HDRI(hdr形式)に変換する必要があるのですが、BlenderでHDRI(hdr形式)に変換すると簡単だったので、手順を紹介します。

  • BlenderでHDRIを使う時と同じ手順で、 THETA Z1で撮影したHDRI(exr形式)を「環境テクスチャ」として開く

  • レンダープロパティ>レンダーエンジン>Cycles に設定

  • カメラのオブジェクトデータプロパティ>タイプ>パノラマ状に設定、カメラのオブジェクトデータプロパティ>パノラマタイプ>正距円筒図に設定。

  • 出力プロパティ>フォーマット>解像度X,Y を設定( THETA Z1のHDRI撮影モードで撮影したexrデータは,4096x2048とすると取り回しがラク

  • HDRIの正面向きを任意に合わせるため、カメラの向きを調整(位置 - X:0,Y:0,Z:0, 回転 - X:90,Y:0,Z:180)

  • 画像レンダリングして、Radiance HDR形式で書き出せば、HDRI(hdr形式)を保存できる

  • UE5で使う時は、保存したHDRI(hdr形式)をUE5にインポートした後、テクスチャエディタで、[Maximum Texture Size] を、インポートした HDR 画像の解像度の大きい値 (この例では 4096) に一致させ、 [Mip Gen Settings] を [NoMipmaps] に設定する

  • HDRI backdropのプラグインをONにして、UE5を再起動したのち、HDRI backdropにマテリアル選択で先ほどの、HDRI(hdr形式)を設定する

  • HDRI backdropにマテリアルを設定するだけでは、ライティングがActorに反映されないのでHDRI backdropのサイズを「1500」以上にする

  • HDRIを使う場合、Lumenは正しく機能しないのでプロジェクト設定でGIとReflectionをNoneにする(PostProcessVolumeでLumenのGIとReflectionをNoneにしても良い)

  • レベルに配置したHDRI backdropのDetailsの中に、「SkyLight」があるのでそれを選択して、Light->sourse Typeを「SLS Specified Cubemap」に変更する。

  • 上記のHDRI backdropのDetailsの中に、「SkyLight」にもcubemapを設定できるので、こちらにも先ほどの、HDRI(hdr形式)を設定する。これでライティングが正確にActorに反映される!「SkyLight」の強度を使用してシーンを照らすことができる!

  • パス トレースを実行しているときに白い点が目立つ場合がある。それを最小限に抑えるには、PostProcessVolumeが必要なのでレベルに配置して、PostProcessVolumeの影響がレベル全体に効くようにInfinite Extent (unbound)にチェックをいれる

  • パス トレースを実行しているときに白い点が目立つ場合がある。それを最小限に抑えるには、PostProcessVolumeで「max path exposure」を3.0程度に減らす

以上で、THETA Z1で撮影したHDRI(exr形式)は, BlenderでHDRI(hdr形式)に変換して,UE5で色々設定すればいい感じに使えます。

参考文献

note.com

docs.unrealengine.com

forums.unrealengine.com

www.linkedin.com

qiita.com

Unreal Engine5 - Play時に表示されるゲームパッドを消す

Unreal Engine5 - Play時に表示されるゲームパッドを消す

alive gamepad when the playing

  • Project Settingを開く

open project setting page

  • "mobile"で検索し、Always Show Touch Interface のチェックを外す

unsetting always show touch interface

it have never been unshow gamepad

Unreal Engine5 - Play時に選ばれるメインカメラを設定する

Unreal Engine5 - Play時に選ばれるメインカメラを設定する

  • LevelのBluePrintを開く

open level blue print

  • Outlinerで設定したいカメラを選択したまま、LevelのBluePrintで右クリック。Create a Reference to Cine Camera Acotorを選ぶ

add cine camera actor

  • Get Player Controllerを作る

get player controller

  • Get Player Controllerからノードを引っ張って、Set View Target with Blendを作る

Set View Target with Blend

  • Set View Target with BlendにBeginPlayとCine Camera Acotorを紐づける

set blue print nodes

  • Bule PrintをコンパイルしてからPlayすると、メインカメラが設定したCine Camera Acotorとなる

Play with setting cine camera actor

参考

note.com