本日はUnity調査枠です。
先日お仕事でUnity上でポーズをつけたキャラクターモデルの形に合わせてクロスシュミレーションを行って布のオブジェクトを作成するというものがありました。
Unityではシーン上にある一定のオブジェクトに関してはFbxExporterを使用することでfbxとして書き出すことができます。
しかしFbxExporterはSkinnedMeshRendererのオブジェクトに対応しておらず、エクスポートしたモデルをBlenderでインポートした際にメッシュ構造が破壊されていることがわかります。
今回はこの現象を回避するためにRenderDocを使用してメッシュを抽出する形でエクスポートします。
〇RenderDocとは?
RenderDocはオープンソースで開発、提供されている、GPU上で実行されている処理を見ることができるソフトウェアになります。
RenderDocではGPUで処理中のメッシュを見ることができます。今回はここから抽出する形で本来SkinnedMeshRendererのモデルをエクスポートした場合モデルが破断する問題を回避していきます。
なおRenderDoc自体の導入や使い方は過去の記事を参考ください。
〇RenderDoc To FBXの導入
今回は以下のリポジトリで公開されているRenderdoc2fbxを使用していきます。
これはRenderDocの拡張プラグインになります。
今回はZipファイルをダウンロードしました。
ダウンロードしたzipファイルを解凍するとinstall.batがあります。
WindowsPCの場合このbatファイルを実行するだけでRenderDocに拡張プラグインが導入されます。
ファイル実行時に次のようにセキュリティが働くことがあります。
この場合は詳細を表示を一度行うことで実行が選択可能になります。
実行後はウィンドウが閉じてしまいますが、問題ありません。
この状態でRenderDocでキャプチャを行い任意のメッシュをMeshViewerで表示します。
Row Offsetの値を1に設定しパズルのアイコンを選択しNo extension commands configuredを選択します。
Extension Managerが開きます。 ここでAlways Loadを選択します。
一度ウィンドウを閉じて再度パズルのアイコンを選択するとExport FBX Meshが選択可能になります。
これを押すことでメッシュをエクスポートできます。
本日は以上です。
SkinnedMeshRendererを持つ変形したメッシュをエクスポートする方法としてはもっとシンプルなものがあるかもしれませんが、RenderDocはUnityに依存していないため汎用性が高いテクニックと感じます。
しかしながらここでエクスポートできるのはGPUEventごとのため本来統合されていたメッシュがばらばらにエクスポートされるなどBlenderなどで再調整が必要な手法でもあります。