写真からフォトリアリスティックな人体モデルを生成する話は以前から何度かしておりますが、ひさしぶりに触ってみたところ、ほぼ写真と区別がつかないレベルまで到達したのではないかと実感しました。

▲1枚の写真(AI生成)から作られた3Dモデル
筆者は2020年に最初の3Dプリンタを導入し、主に妻の写真から3Dモデルを生成する試みを続けています。最初はCharacter Creatorという3DソフトのHeadshotというプラグインを使って作るパラメータベースのモデリングソフトを使い、最初は積層方式の小型モデル、次にFDM方式の等身大のモデルを作っています。
その後、生成AIの時代に突入し、Sparc3D(その後Hitem3Dに改名)というソフトの登場により、実写に近い人体モデルが1枚から4枚までの画像から生成可能になります。
最初はオープンソースで出すと言っていたHitem3Dですが、商用化に舵を切ることになり、Tripo3Dなどと競合するようになりました。ただ、リアルな人体モデリングについては一定の優位性は保っていたようです。
そんな折、ChatGPT-6 Astraを使ってTripo3Dで作ったモデルをBlenderに取り込んでボーンをつけアニメーションができるようにするといった試みがいくつか散見されるようになりました。
みてみると、Tripoのゲームキャラクターモデルもけっこう良い出来栄え。ということは、Hitem3D改めHi3Dならもっといけるのでは、と思ってサイトを見てみたら、バージョンが3.0に上がっています。
たしかバージョン2までは試していたんですが、あまり性能が上がっていなかったので放置していたのでした。なんか、3Dプリンタ向け機能が豊富になっているなあ、くらいで。
Bambuの多色フィラメントに対応しているけど、うちにある3Dプリンタは違うしなあと思っていたら、3Dモデル用にパーツ分割する機能などもついているじゃないですか。これは便利そう。
等身大モデルを作るには、どうしても身体を分割しなくてはならず、そこはCADソフト、3Dソフトでの後処理が必要となるのですが、それをHi3Dの中でやってくれるらしい。
でもその前に、モデルの出来が良くなければ意味がありません。バージョン1.5で四面図に対応したのですが、これがなかなかうまくいかず、苦労しました。
例えばChatGPT Imagesなどの画像生成AIを使えば正面の顔のポートレートがあれば四面図に展開してくれるのですが、まず、右側面と左側面を区別してくれなかったり、髪型が変わったりします。
すると、3D化したときにそこがノイズになってしまうので、具合が悪いのです。
このため、筆者は1枚の正面写真、ただし、鼻梁がわかる程度に少し角度があるものにしておくのが良いことがわかりました。真正面だと、鼻筋が欧米人か東洋人、どちらかに寄ってしまうみたいなのです。
で、1枚絵で試してみると、この出来栄えです。実写と区別がつきません。これが500万ポリゴンの威力か。
▲最初の1枚が元絵。あとは3DCG

▲生成した3Dモデルのジオメトリ情報
3Dモデルができてしまいました。
せっかくなので、これを動けるようにしたい。まずはリップシンクまでできたら……。そこで、ChatGPT-6 Astraに頼んでみました。
最初はチャットUIで聞いてみました。

現実的な提案をしてもらえそうだったので、手順書を作ってもらい、Codexに移行。

動かすマシンはRTX 4090を搭載したWindows機「AICreator」。これにBlenderをインストールしたあとは、Codexの言うとおりに、ボタンを押していくだけ。
顎を動かし、唇を動かし、まぶたを開いたり閉じたり、といったことを、一度もBlenderアプリを見ることなく、進めていきます。
うまくいっているかどうかのチェックも勝手に画像をキャプチャし、自律的に判断。ようやく筆者が確認できるようになったのは、サンプル動画が上がってから。
「こんにちは」というリップシンク動画が提示されました。なかなかよくできています。
あとは、これをベースに改良していくだけ。ここで、Claude Codeにバトンタッチし、アバターシステムに組み込めるように改良を施していきます。
そこでは、元となったAI画像と動画を参照して、口やまぶたの動きなどを修正。これは筆者による目視での確認が必要なので、時間をとって行います。
ただ、この間もBlenderはさわらず。部分的な画像やリップシンク動画を見ながら、ここは違う、この写真を参考に、などと指摘していきます。一番時間をとったのは、歯並び。妻の写真で歯がよく見えている写真を提示して、口を開いた時にどこからどこまで写っているかを指示。色や口の開き具合も調整していきます。
調整も終盤に差し掛かったので、これをリップシンク対話サービスに実装していきます。しかし、ここで予想外のことが。フレームレートが出ないというのです。理由はポリゴン数。500万ポリゴンだとレンダリングに時間がかかるため、音素ごとにプリレンダーしておく必要があると。
リアルタイムでやりたかったのですが、仕方ないと一旦はそれで進めます。その調整がある程度終わった後でもう一度、リアルタイムレンダリングができないかと投げかけたところ、ブラウザでローカルでレンダリングすれば可能、と。Three.JSを使えばできるということなので、まずは頂点数を減らすローポリ化を図ります。
ここからは、3Dモデル化を担当したAICreator(4090搭載Windows PC)と、アバターシステムを管理しているDGX Spark互換機のSparkの二人のAI(どちらもClaude)が対話しながら進めています。


正直、このような作業を自分でできる気はまったくしません。二人のAIが議論しながらやってくれているのはちょっとした感動を覚えます。ローポリ化で間引きすぎると口の周りが破綻してしまうから、ポリゴン数の予算をそこだけ増やしたい、といった議論後、テクスチャにはどのサイズとフォーマットが最適か、みたいな話を1時間以上続けていました。ついていけない。すごいぜAI。

3Dモデルを動かす試みは、Character Creatorで3Dモデル化したものをVRChatのアバターにしようとしたときにも経験したのですが、とても自分の手には負えないと途中放棄。その後、VRChat自体にも入ることは無くなりました。今ならできる気がします(でもやる時間はない)。
さて、こうしてディスプレイの中の妻とリアルタイムチャットする試みは、ついに3Dアバターの段階に入ったわけです。500万ポリゴンから58万6722ポリゴンまで減量してThree.jsで動かしています。

並行して、AI動画生成による対話システムも進んでおり、こちらもあと一歩のところまで来ています。現状だとLLMでの返答生成、そこからのTTS、さらにリップシンク動画生成といった、多重構造であるために、待機動画をいくつも用意して時間を稼いだりしているのですが、あと1桁生成スピードが高速化できれば、より自然なリアルタイム対話が可能になるはずです。
















