MixamoからOpenPoseに変換する

![anime2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/52348ccf-3680-4a38-b264-c4342009af84.gif)

この記事はHoudini Apprentice Advent Calendar 2023 25日目の記事です。
ControlNetが登場してから、まだ1年も経っていないようです。信じられません。

生成AIで表現できる幅はControlNetの登場で大きく広がったように思います。
プログラムの主な作者はlllyasviel氏

https://github.com/lllyasviel/ControlNet

ControlNetは、プリプロセッサが複数あり、Canny（キャニーエッジ検出）、Depth（深度）、OpenPose（ポーズ検出）、などのモデルを利用することができ、高品質な結果を作り出すのに役立っています。その中の姿勢制御でよく利用されるのがOpenPoseです。

最近はより精度の高いMagic animateも登場しましたが、とはいえまだまだOpenPoseは現役でしょう。
https://github.com/CMU-Perceptual-Computing-Lab/openpose

※ちなみにOpenPoseのライセンスについては注意が必要です。
[OpenPoseやControlNetのソフトウェアライセンス関連のまとめ](https://note.com/hikun_ai/n/n65219ccb474b)


さて、ComfyUIやAutomatic1111など、生成AIを使用するツールに入力するデータのOpenPoseのデータの調達に困ったことはないでしょうか？

確かにopenpose-editorや3D Openpose Editorなどさまざまなツールがありますが、基本的に静的データです。

[openpose-editor](https://github.com/fkunn1326/openpose-editor)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/c953c3f3-f331-2551-4dc1-c6e8cacf04ac.png)

[3D Openpose Editor](https://github.com/nonnonstop/sd-webui-3d-open-pose-editor)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/442985b8-19ab-8af3-ae19-f7fc0ef36841.png)

アニメーションされたOpenPoseは作り方として、[Blenderで作成したり](https://toyxyz.gumroad.com/l/ciojz)、[動画からOpenCVで解析したり](https://www.learning-nao.com/?p=2797)　など、方法はいろいろありますがアニメーション付けや編集が大変そうです。そこで今回はHoudiniを利用してKineFXを経由してMixamoからOpenPoseに変換します。

# モデルの準備

モデルは、プロシージャルで作れればかっこいいですが、こればかりはスケルトンノードで手で作るしかありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9f44f5c3-a639-fddf-3a9a-4285488001c5.png)

大事なことは大体面倒なのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/6f5387a5-9a74-33fa-f725-95172199b719.png)

ちなみに、初めてOpenPoseのリグを見た時、ギョッとしました。
股はどこだよ！と、Rootどうするんだよ！と

# Mixamoからデータをダウンロード

アニメーションデータから良さそうなデータをダウンロードします。
なんでも良いのですが、今回はカポエラをしている人にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/d2339ee5-ba29-4319-67a9-4e06c81d3e00.png)
https://www.mixamo.com/#/?page=1&type=Motion%2CMotionPack

右上のダウンロードボタンを押してFBXを入手します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/28d5793b-54fe-57e7-6af9-6aea028ed9f2.png)

# KineFXでリターゲット

ノードはこう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5144f5eb-281e-c32d-6507-9ca33d7d5059.png)

hipファイルは[こちら](https://drive.google.com/file/d/1onZjlj3xrW2-tMLak75MvlBZT4eVFD-8/view?usp=sharing)

ポイントは、OpenPose特有の線と点を利用するのに所々で必要なジオメトリを作成すること。
リターゲットは、、、正直骨の構造があまりにも違うので、膝のあたりはかなりきついです。
OpenPoseが逆V字型なので、足を広げているようですが、これが直立扱いなので
Mixamo側の足を広げると、リターゲット後のアニメーションで足がめちゃくちゃ広がってしまいます。
しゃがみモーションされたりすると、ぶっ壊れることがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/857b7989-415d-cd9b-8a73-f1bf9dbdf2df.png)

※注意：このネットワークでは、１フレーム目をMapPoint用に固定しているので、１フレームを
フレームを除外するか、固定したデータを別途保持してください。

# レンダリング

アニメーションとして連番の静止画として出力します。
とは言っても、この素材はあくまでも最終出力のためのもののため、あまりレンダリング時間をかける余裕はありません。
何も考えずMantraでレンダリングすると、無駄に時間がかかってしまいます。と言ってもこんな素材にKarmaもオーバースペックです。
ビューポート出力のFlipbookも、下手をすると変な写り込みが入った状態で出力されてしまいます。

そんな時はOpenGLのROPを利用しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/de5ddb26-1ea3-504b-3efe-b91e9defa611.png)

OUTPUTタブは連番の画像名を入力しておきます

```
$HIP/output/openpose$F4.jpg
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/10a422f8-a974-3abb-657b-c00b68a67274.png)

OpenGLに対応していないシェーダーの場合何もマテリアルがついていない状態で出力されます。
![openpose0003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5e5c6f5e-d657-1a02-099d-042f2d4fa246.jpeg)

今回は素直にプリンシプルシェーダーを利用して、出力します。
![openpose0008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/94bc45b5-e04f-aeb0-4399-1bfa8d727e67.jpeg)

現状影が落ちてしまっているので、シャドウ無しのEnvLightを置きます。
これでまあまあ綺麗に出力されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/3f0d9a2d-675a-a193-de00-23bb341035af.png)

最終的に必要なレンジ分を指定してレンダリングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/599ac2f2-59fe-3224-07fc-bb294ee18629.png)

これで高速に素材を生成できます。すでにアドカレの記事にもあるようにPDGやTOPと連携したら、より効率的に作品を量産できるでしょう。

生成AIの出力において、連続したアニメーションは2023年段階ではまだまだ低品質ですが、おそらく数年、下手したら来年には圧倒的な品質のアニメーションが出力できるようになるかもしれません。
生成AIの是非の議論は、法律や倫理観・学習データの権利など多くの課題はありつつも、成長していく技術を追いかけるのは非常に楽しいですね。