3D Body Reconstruction with RealityCapture

はじめに

本演習では、Raspberry Pi + Pi Camera2を120台の人体スキャナを利用して撮影した写真データをもとに、RealitiCaptureで3Dデータ化する方法を学ぶものである。

Back To Top

写真データの準備

事前に人体スキャナで撮影して、写真データ120枚を準備しておく。

Back To Top

写真データの読み込み

レイアウトは1+1Layout、左パネルが2Ds、右パネルが3Dsで作業する。

WORKFLOW > 1.Add imagery > Folderをクリックする。

フォルダを選択してOKを押す。

2Dsパネルにサムネイルが表示される。

さらに、2Dsを1Dsに切り替えて、Imagesに120 imagesが登録されていることを確認する。1Dsでは登録画像や生成した3Dメッシュをツリー表示で確認することができる。

Imagesを開いて特定の画像をダブルクリックすると1+1+1Layoutになり、右パネルで画像が表示される。今回は特に必要とはしないが、特徴点のマニュアル設定を行うこともできる。

レイアウトはそのままでも1+1Layoutに戻してもよい。

Back To Top

Aligning Images(低密度点群)

今回の人体スキャナシステムはRaspbery PiのPi Cameraを利用したものである。撮影した写真データは2464 x 3280となり、iPhone 8(4032 x 3024)と比較しても低い解像度となる。そのため、Alignmentの処理精度を上げて解析する必要がある。

ALIGNMENT > Registration > Settingsをクリックする。

Alignment SettingsのMax features per image(写真当たりの特徴点)を80,000(初期値40,000)に変更する。

スクロールして下方にあるPreselector features(特徴点の事前選択)を40,000(初期値10,000)に変更する。

ALIGNMENT > Registration > Align Imagesをクリックする。

1Dsを表示してComponent 0を確認する。
下図では118/121であり、118画像のみAlignmentに成功したことがわかる。

今回利用している人体スキャナは調整が未完了であり、全ての画像が成功する確率は低い。ただし、110枚程度成功していれば、人体の三次元化には問題ない。

Back To Top

Reconstruction Region / Ground Plane

Reconstruction Regionを設定する。特に上からの視点に切り替えて回転させることで、人体とReconstruction Regionの直方体を合わせておく。

地面は後から削除するので、靴と地面の境界は少し余裕を持って設定してもよい。

ある程度合わせた段階で、SCENE 3D > TOOLS > Scene Alignment > Set Ground by Reconstruction Regionをクリックする。

グリッドの原点に対してReconstruction Regionが整列される。

上視点から再度確認して、人体がグリッドに対して水平もしくは垂直になっていることを確認する。ずれが大きければ再度微調整する。

本演習では最終的にmixamoへアップロードするが、その際mixamoでは90度単位でしか調整できないので、ここで調整しておく必要がある。

Back To Top

Reconstruction(メッシュ生成)

MESH MODEL > Create Model > Normal Detailをクリックする。

Back To Top

不要なメッシュの削除

SCENE 3D > TOOLS > Mesh Model > Lasso or Rectを利用してメッシュを選択する。
ツールで囲んだ領域の視点の奥まで選択されるのでビューを回転して確認しながら行う。

  • 左ドラッグ:メッシュの選択
  • CTRL+左ドラッグ:連続した選択範囲の追加
  • SHIFT+左ドラッグ:選択範囲の削減
  • 選択範囲全解除:Deselect

注意点として、このとき視点移動はできない。LassoとRectはトグル方式なので、もう一度クリックして解除してから視点移動する。

カメラプレビューが邪魔な場合は表示(SCENE 3D > VIEW > Alignment Cameras > Enabled)をOFFにしておく。

Filter Selectionでメッシュ削除する。

視点を切り替えながら不要な部分を削除していく。
下図は正面視点。
このとき靴が水平でなければGround Planeを微調整する。

視点を変えて残りを削除する。

メッシュ削除が完了したら、Lasso or Rectをもう一度クリックして解除しておく。

Back To Top

Clean Model

※Close Holesでは複数穴は塞がれない場合がある(まだ理解しきれていない)。

下図のように足裏のメッシュがない状態から行う。

Clean Modelを行う前に、現在のメッシュの状態を検査する。
MESH MODEL > Analyze > Check Topologyをクリックする。

Hole countが3となっており、足の裏以外にも穴もしくはメッシュが存在していることがわかる。小さなメッシュが浮遊している可能性があり、探して削除しておく。

MESH MODEL > Analyze > Clean Modelをクリックする。

両足裏にメッシュが作成された。

もう一度、MESH MODEL > Analyze > Check Topologyをクリックする。

Holes(穴)が塞がれたことがわかる。

Back To Top

Simplify(メッシュ削減)

1Dsで現在のメッシュ(ポリゴン)の数を確認する。
Component 0の中にModelが複数あるが一番下が最新のModel。
右側の3.4M trisがメッシュ数。
さらに内部に入ると2つに分かれているのがわかる。ここでは関係ない。

メッシュ削減は一度に行うと表面のディティールが著しく損なわれる。
3.4M tris  = 3,400,000 trisなので、3,400,000  → 1,000,000 → 500,000 → 250,000のように徐々に減らしていく。

メッシュ削減にはSimplify T00lを利用する(トグルボタン)。
SCENE 3D > TOOLS > Mesh Model > Simplify Tool

下図のTaget triangle count(初期値1,000,000)を変更しながらsimplifyボタンを押す。

今回は最終的に250,000 trisまで削減する。mixamoにアップした際に重くないようにしておく。
※mixamoからDLしてBlenderでプレビュー再生する場合は10,000 tris程度まで削減しておいた方がよい。もしくはリトポロジーする方がベスト。

下図はメッシュ数の違いによる比較(クリックして拡大)。

終了後は、Simplify Toolをもう一度クリックして解除しておく。

Back To Top

Texturing(テクスチャ生成)

MESH MODEL  > Mesh Color & Texture > Textureをクリックする。

Texturing処理が始まる。

今回来ていた服が細かいストライプ柄だったのでモアレが発生していますね。

Back To Top

書き出し

MESH MODEL > Export > Mesh and PointCloud
4つのファイルができるので、保存先は新規にフォルダを作成しておいた方がよい。

下図のSettingsが表示されるが、今回は何も変更せずにOKを押す。

以下の4つのファイルができる。
rcinfoファイルはログファイルなので、RealityCapture以外では不要。

Back To Top

紹介のみ)Blenderでポーズ調整

必要に応じてBlenderのSculptツールなどを利用して、ポーズを調整する。

今回は利用しない。

Back To Top

応用)mixamoへアップロード(課題)

授業内で指示する。

  1. OBJ、MTL、PNGの3つのファイルをZIP圧縮 ※rcinfoは必要ない
  2. mixamoのUPLOAD CHARACTERからアップロードする
  3. オブジェクトを正面に向ける
  4. Auto Rigging設定(Fingerあり、Symmetryは解除して設定)
  5. キャラクターにアニメーション設定を行う

課題提出は、mixamo上のアニメーション状態を画面共有することで提出完了。

Back To Top

紹介のみ)mixamoからダウンロードしてBlenderへ

授業内で紹介する。
※今回は別のmixamo標準キャラクターで実験する。

  1. RealityCaptureの1DsでModelを確認して、一つ前のModel(Texture付)を削除。10,000 trisまでメッシュ削減してTexturing、書き出しを行う。
  2. mixamoアップして前回同様の作業を行い、FBX7.4でダウンロードする。
  3. BlenderでFile > Import > FBX(mixamoでFBX7.4DL)
  4. Shading表示
  5. OverlaysからBonesを非表示
  6. Collection > Armature >defaultを選択して、Material PropertiesのShow Backfaceを非表示
  7. オブジェクトを移動して、複数回FBXを読み込む
  8. アニメーションループ再生(mixamoのアニメーションフレーム数に合わせる)

Back To Top