Other

画像1枚から3Dモデルを生成してアニメーションさせる【pifuhd/mixamo】

人物の画像1枚だけで3Dにしてアニメーションさせることってできない?

画像一枚だけから3Dアニメーションを生成することってできないのかな?なんて疑問に思いますよね。

そこで、この記事では人物が写った画像1枚からその人物の3Dモデルを作成して、アニメーションさせるっていうことをしていきます。

この記事でやること

  • pifuhdで画像から3Dモデルを作成する
  • 3D化したモデルをmixamoで動かす

画像から3Dモデルを作成したり、アニメーションさせたかったりする人はどんなことをするのか見てみてください。

1枚の写真から3Dアニメーションさせてやろう。

1枚の画像から3Dアニメーションさせる方法

今回画像から3Dモデルを作成してアニメーションさせる手順としてはこうです。

3Dアニメーションまでの流れ

  • pifuhdで画像から3Dモデルを作成する
  • 3D化したモデルをmixamoで動かす

pifuhdもmixamoも分からん。。

どちらも普通に生活していたら使わないだろうからね。。

pifuhdとmixamoがどんなものか見てみましょう。

pifuhdは画像から3Dモデルを生成してくれる

pifuhdは1枚の画像から3Dモデルを作成してくれるAIプログラミングを用いたなんかすごいやつです。

左のような画像から右側の3Dモデルを生成できるの?

そうですね、プログラムを実行すれば生成できます。

pifuhdのgithubを見るとGoogleColaboratoryのリンクがあるから、そこからコードを実行することができる。

上から再生ボタンを押していくと用意されているデモのコードが実行されます。

どんな感じか知りたければgooglecolaboratoryからコードを実行して確かめてみるといいですね。

mixamoは3Dモデルにアニメーションを付けてくれる

mixamoは3Dモデルをアップロードすると、そのモデルにアニメーションを付けることができるというサービスです。

左側の選択したアニメーションを適用できるの?

はい、クリックするだけでモデルに動きをつけてくれます。

mixamoを使って作成した3Dモデルを動かすっていうことは以下の記事でやっているから、気になったら見てみてください。

3Dモデルにしてアニメーションさせる画像

今回アニメーションさせる画像はこの画像でいきます。

使う画像は人物の全身が写っている画像で、できるだけ左右対称の姿勢になっているものがいいです。3Dモデルにしてアニメーションするときに姿勢が複雑だと、mixamoでのリギングがうまくいかなかったりするので。

人物画像をpifuhdで3D化させる

pifuhdのgithubからGoogleColaboratoryを起動してやっていきます。

コードは上から実行していくんですが、途中でファイル選択することができるのでここで3Dモデルにしたい画像を選択します。

選択したイメージはフォルダの[pifuhd→sample_images]の中に配置されます。

実行していく中でpytorch3dをインストールする箇所があるんですが、うまくいかない場合には@stableなどのコメントアウトを外してインストールするといいです。

# !pip install pytorch3d

# If you get an error in the next cell, you can instead try the following command (don't forget to comment out the one above!).
# Note that this error is caused by inconsistent cuda version for the pytorch3d package and pytorch in Colab environment.
# Thus, this issue may persist unless pytorch3d in the pip package is updated with the cuda version consistent with pytorch in Colab.
# Also please be aware that the following command is much slower as it builds pytorch3d from scratch.

!pip install 'git+https://github.com/facebookresearch/pytorch3d.git@stable'

# You can try another solution below as well. This is also slow and requires you to restart the runtime.

# !pip install 'torch==1.6.0+cu101' -f https://download.pytorch.org/whl/torch_stable.html
# !pip install 'torchvision==0.7.0+cu101' -f https://download.pytorch.org/whl/torch_stable.html
#!pip install 'pytorch3d==0.2.5'

コードを実行してうまくいけば、画像から3Dモデルが作られます。

3Dモデル作られたね。

足の部分ちょっと変なの残っちゃいましたけど作れました。

足の下の方に変なものが残ってしまいました。元画像の影を反映してそうなってしまったと思われるので、pifuhdを通す前に画像は加工しておくといいですね。

生成された3Dモデルをダウンロードする

作成された3Dオブジェクトは[results→pifuhd_final→recon]にあるので、これをダウンロードします。

開いてみるとこんな感じです。

この3Dモデルを今度は動かしていきます。

3D化した人物をmixamoで動かす

mixamoでは3Dモデルをアップロードすればアニメーションを簡単に付けることができます。

アップロードするとこんな感じになりました。

素材を動かすために、リギングします。これは右側に表示されている画像のように顎や膝に〇を配置していけばいいだけです。

こんな感じですね。

すると綺麗に動いてくれました。

後は左側から好きなアニメーションを選べばいいだけです。

良い感じのアニメーションがついたらダウンロードします。

アニメーションが付いた3Dモデルを再生する

ダウンロードした3Dモデルと再生してみるとこんな感じで、良い感じにアニメーションが付きましたね。

本当はBlenderで色とか付けたかったけど、素材が綺麗に分かれているわけではないのでちょっとしんどそうだなと思い断念しました。とはいえ1枚の静止画からここまでできるなんてなかなか凄い時代になりましたね。

まとめ

今回は1枚の画像から3Dモデルを作って動かしてみたけど、以下のことを行いました。

  • pifuhdで画像から3Dモデルを作成する
  • 3D化したモデルをmixamoで動かす

色を簡単に付けることができないのが残念だけど、それ以外は結構簡単にできてしまうから凄いです。きっと今後はもっと簡単にクオリティ高くなっていくんだろうなあ・・・と考えると複雑な気持ちですね。

-Other