Stable-DreamFusionで自分のVRChatアバターを作ってみた

本記事は 画像生成AI Advent Calendar 2022 の19日目です。

Needleと申します。2013年からVRにハマり、2014年から2018年までOculus日本チームに在籍した後、現在はフリーランスでVR開発の各種支援を行っています。

上記のようにVR歴はそこそこ長いのですが、現在のVRの使い道の主流のひとつであるVRChat文化には、長らく乗っかれていませんでした。というのも、どうにも自分の中で利用に至るまでの心理的なハードルがあったからです…(しばらくAIに直接関係ない話が続きます。クソ長自分語り注意)。

背景(自分語り)

アバター文化に乗れない。

…どうも自分がアニメ調美少女になる気が起きない。別にアニメ絵自体は嫌いではないのですが。
「みんな最初はそう言うんですよ」と言われてもなる気が起きないものは起きず、何を試着してみても強烈な「自分じゃない」感が拭えません。それ以外のアバターも豊富に存在はするものの、服を買いに行く服がない状態ですし、アバターミュージアムバーチャルマーケット等のアバター展示を巡ってみてもどうにもしっくり来ません。そもそもTwitterですら日本の多数派の匿名・非実写アイコンな使い方ではなく、実名を隠さず実写アイコンで長年使っていたので、今から顔や名前を隠して1からペルソナを作るのも今更感が。

現実でも自分の外見にはあまり興味を持っているほうではないのですが、現実ではどれほど外見に興味がなくて化粧や肉体改造といった外見に関する選択や操作を何も行わなかったとしても、生得的アプリオリに自分の身体や外見が「ただそこにあり」ます。一方、ソーシャルVRにおけるアバターでは、外見を選ぶことが可能であるのみならず、明確な意図を持って選ぶことを事実上強制されるとも言えます。

「やった!これまでの人生のアイデンティティから離れて自由に選べる!」と解き放たれたように感じる人には素晴らしい事なのですが、自分の場合「選べと言われても…『選ばない』っていう選択肢は無いんですか?」という感想になってしまいます。(その点ではclusterは有難いなと思っています。最初の頃はアバターが全て無個性なロボットで統一されており、後からVRM形式モデルの読み込みに対応したという経緯があるため、無個性ロボを選ぶ事である程度「選ばない」をさせてもらえます)

一方VRChatでは、アバター非表示設定時等に使われるシンプルなロボットアバターは一応存在するものの、「選ばない」事は事実上出来ません。せっかくVR界隈に身を置いているし、という事で今年の半ばあたりから意識的にVRChatを使ってみるようにしていたのですが、この時最初は前述のロボットアバターをわざと使っていました。しかしこの格好でいると「アバター選ぶの手伝いましょうか?」「ロボットになってますよ、設定合ってますか?」と親切な人が寄ってきてしまっていたたまれなくなるため(まさか好き好んで使ってるだなんて思わないのでしょう)、別の無個性なアバターをわざわざ探す羽目になりました。

なお、正確には「無個性にしたい」のではなくて「『選ばない』をしたい」なのですが、それは出来ないのでせめてなるべく無味乾燥なものを求める形になっています。もちろん、美少女アバターユーザーが沢山いるVRChatで敢えて使う人の少ない無個性ロボを選ぶのは逆に悪目立ちするのですが、それでも。

これはVRじゃなくて画像生成AIのアドベントカレンダー記事だって?

はいそうでした。ちゃんと繋がりますので。

生成的ジェネラティブAIの話題は、DALL-E 2MidjourneyDALL-E Mini(現Craiyon)が使えるようになった頃から徐々に凄いらしいという話が聞こえてきていましたが、Stable Diffusion (以下SD) の登場は衝撃でした。DALL-EにせよMidjourneyにせよ、実際の処理はWebサイトやAPI越しにどこか遠くの預かり知らぬ所にある雲の中クラウドサーバーで実行されて、自分のデバイスにはその結果が送られてくるだけでしたが、SDは手元のPCで!ローカルに!実行できます。一度インストールしてしまえばサーバーへの接続は不要です。電気さえあれば、プロバイダーの回線が落ちようが海底ケーブルが破断しようがGAFAMのデータセンターが全部爆発しようが動きます。昔PhotoshopやDOOMを初めてインストールした時に感じたような、「自分のPCが魔法の箱になった」と言う感覚を久々に味わう事になりました。

自分のPCは機械学習でデファクトスタンダードの地位にあるNVIDIAではなくAMD製のグラフィックカードを搭載していたため、最初に動かせるまでしばらく手こずりましたが、ひとたび動き出した後は使い放題なのを良いことに夢中で生成をぶん回しまくっていました。ガチャのような中毒性があります。

界隈の技術開発の速度がとんでもなく速いのも魅力です。最初こそコマンドラインを叩いてましたが、すぐにAUTOMATIC1111NMKDのユーザーインターフェイスが作られ、Textual InversionDreamboothなどモデルの追加学習手法が登場し、あの手この手で消費VRAM量や生成速度が改善され…。「日刊 画像生成AI」が無いとついていけない速さで、毎日更新されているやまかずさんには頭が上がりません。

DreamFusionの登場

そんな中、DreamFusionというText-to-3Dを実現する論文がGoogleにより発表されました。SDはプロンプト文字列から画像を生成するものでしたが、これは何と3Dモデルをメッシュとテクスチャ揃えて生成するという代物です。興味深いのは、既存の画像生成AIを活用して3Dモデルを生成するため、大量の3Dモデルデータを学習する必要が無いという点です。DreamFusionはGoogle内製・非公開の画像生成AIであるImagenの上に構築されたため、コードが一般公開されていません。しかし、論文の発表からものの一週間ほどで、論文の内容をベースにStable Diffusion上で動作するようにしたStable-DreamFusionという実装が有志により開発・公開されました。速すぎる。

ここで思いました。アバター作れるんじゃね?
前述の「外見を選びたくない」という問題の解決は置いておくにしても、作れそうと思うとやってみたくなります。

アバター自動生成

2Dラフの生成

3Dの生成は2D画像よりもはるかに時間がかかるため、まずは2Dでおおまかなイメージを考えます。試した当時のStable-DreamFusionは素のStable Diffusion 1.4決め打ちで書かれていたため、アニメ調よりは実写調に近い方で狙います。また、3D生成はまだ精度が高くないため、多少崩れてもおかしく見えにくいロボットをモチーフにしてみます。

手元のPCにインストールしてあるAUTOMATIC1111版GUIを使い、プロンプトを調整しながらたくさん生成してそれっぽいのを探します。なるべく画角中央に、はみ出さずに、Tポーズで立っていてほしいので、そうなるようにプロンプトを書き換えていきます。

A DSLR full body photo of an white with cyan stripes short sleek cybernetic humanoid child robot, arms outstretched straight horizontally t-pose, blank white featureless background, subject placed aligned in middle center of frame
“T-pose”と指定してもなかなか従ってくれない

プロンプトと絵のおおまかな感じが掴めたので、良さげなもののプロンプトとシード値をメモって3Dに行ってみます。(画像の縦横サイズが変わっただけでも絵は大きく変わるので、同じシード値を使うことにどれだけ意味があるかはわかりませんが。)

Stable-DreamFusionモデル生成

Stable-DreamFusionはRadeonでは動かなかったため、NVIDIA GPUをWeb越しにレンタルできるGoogle Colabを使います。Stable-DreamFusionのノートブックを開き、基本的には上から順番に実行ボタンを押していきますが、プロンプト内容やTraining_itersはフォーム上の値を適宜書き換えたうえで実行ボタンを押して反映させます。

Colab ProのNVIDIA A100 (VRAM 40GB)で処理を回す事40分、こんな結果が出てきました。

Prompt: A DSLR full body photo of an white with cyan stripes short sleek cybernetic humanoid child robot, arms outstretched straight horizontally t-pose, blank white featureless background, subject placed aligned in middle center of frame
Stable-DreamFusionのコマンドラインオプションにはネガティブ指定機能が見当たらなかったため、ネガティブプロンプトは無し。

思った以上にちゃんと人の形をしています!顔にあたる部分もよく見ると眼窩のようなへこみが2つ見られます。ただし、腕と足がそれぞれ3本ずつ出来てしまっています。これはJanus問題と言われ、ローマ神話のヤヌスのように頭に顔が2つついてしまったり、今回のように手足が増えてしまったりするDreamFusionの既知の問題です。せっかく生成されたものなのでそのままで残しておこうかとも思いましたが、アバターを自分で動かすときに3本目の手足は何によって動かされるべきなのか…?というのが不明なため、仕方なく切り落とす事にします。

生成後の手作業整備

ボクセルっぽさもありつつ45度角の凸凹もあるメッシュ形状。

まともにBlenderを使うのは初めてですが、生成されたモデルのobjファイルを読み込み、アバターとして使えるようにいくつか整備します。前述の3本目の腕と足を切り落とし、残った2つの足も左右が癒着してしまっているため切り離します。また、後述する自動リギングを行う際にポリゴンが離れていると一連のつながった腕として認識されないため、左右の腕の関節の浮いている箇所を繋ぎます。(この画像は腕の関節を連結させた後のものです。)

一通り整備した後、BlenderからFBX形式で出力します。いずれはこういった手作業が不要なクオリティで出力される日が来るといいのですが。

Mixamoによる自動リギング

アバターのリギングはAdobe Mixamoを使って自動で行います。読み込んだモデルの位置を微調整し、手先・関節などにあたるべき部分の点をマウスでドラッグして指定します。最初に試した時は腕の関節と腕の他の部分が離れていたためエラーが起きましたが、腕を連結させたら正しく認識されました。これによりリギング済みのFBXファイルがダウンロードできます。なお、指は5本しっかり作られていないので、手や指のボーン構造は簡易的なもので済ませます。例によって「AIは手が苦手」はここでも健在です。

VRChatアバターとして読み込み

VRChat Creator Companionから新しいアバタープロジェクトを作成してUnityで開き、リギング済みのFBXファイルを読み込みます。自作アバターは初めてなので凝ったギミックなどは入れず、解説記事を参考にしながらサイズ設定・ボーン構造の差異の修正・視点位置設定・マテリアル設定・メタデータ記入などを行います。日本人VRChatユーザーのアバターは身長が低めな事が多いので、それに合わせて身長130-140cm位に設定しました。全部整ったら最後にアップロード。

VRChatを起動して、PCに繋いだMeta Questをかぶり、アバターを適用。自分の手を見ると青いアバターの手が見えます。
鏡の前に行って体を動かすと、ちゃんと動いてます、成功です!

なぜか生成時点では白っぽかったテクスチャ(これも自動生成です)が全体的に青っぽくなっていますが、なぜこうなったのかはよくわかっていません。しかし靴のような部分は白、関節部分は黒など、部位に応じた色分けは特に指定しなくてもちゃんとされているようです。

このアバターを10月上旬に作って以来、しばらくこれを使い続けていますが、見た目の印象が珍しいからか、時々声をかけられます。AI自動生成だという事を明かすと興味を持ってもらえるし、初対面の人との話のネタにもなっています。これは「外見を選択しない」なのか?と言われるとそうではないですし、じゃあ果たしてこれは「自分」なのか?というと結局確固とした答えは出ていないままなのですが、少なくとも前よりは違和感を纏ったままVR内をうろついている感覚が減ったのは確かです。イケア効果でしょうか…。

その後やった事いろいろ

  • 「建造物も作れるのでは?」と考え、ガゼボ(公園にあるような東屋あずまやの西洋版)のモデルを生成。点対称な形状だとJanus問題の影響を受けないので楽です。なお、1回目は屋根の下が詰まった状態で生成されてしまったので失敗して、これは2回目の生成。
  • VRChat SDKでワールド用プロジェクトを作り、ガゼボを置いた簡単なワールドを作ってCommunity Labsにアップロードしてみる。VRChatがインストール済みの人はこちらのリンクから訪れることが可能です。
    • なお、地面の草のテクスチャもSDによる自動生成です。AUTOMATIC1111版GUIは縦横タイリングできる画像を作る機能があるのでそれを使いました。
  • 作ったアバターはDreamFusionから出力された素の状態では38,000ポリゴンほど。PCアバターとしてはGood判定となるものの、Questアバターとしては重いので、BlenderでデシメートしてQuest版アバターを作り、約7,400ポリゴンまで削ってQuest Excellent判定をゲット。単純にBlenderの内蔵機能でデシメートしてるだけで、普通のアバターなら露骨にガビガビになりそうですが、まあ元からカクカクしてるので気にしない気にしない。

おわりに

今回作ったアバターは抽象的で、モデルとしての質も高くなく、様々な手作業を挟む必要がありました。しかし最近ではDreamFusion以外にも、NVIDIAのGet3DMagic3D、Luma AIのImagine 3D、ほかLatent-NeRFなどなどText-to-3Dを目的とした様々なAIモデルが登場してきました。綺麗なキャラクターのアバターが半自動〜全自動で生成できるようになる日も、もしかしたら遠くないかもしれません。

なお、僕のVRChat IDはNeedleです。見かけたら遊んでください。

DAN A4-SFXのグラフィックカードをRadeon RX 6800にアップグレードした際にハマった点メモ

VR用途に力不足を感じてきたため、メインのデスクトップPCのグラフィックカードをEVGA GeForce GTX 1070 SC GAMINGからRadeon RX 6800 (リファレンス版)に換装しました。起動しない問題に当たるなど一筋縄で行かなかったので記録を残します。

TLDR: A4-SFXに入り切るサイズでVRAMが多くて排熱が遮られないカードがRX 6800 (リファレンス)くらいしか無い。起動しなくて色々いじってみたが原因は問題報告の多いライザーケーブルやマザーボードではなく、プラグイン電源の接触不良。

Continue reading
ニコニコ研究合宿タイムテーブル

ニコニコ研究合宿「電脳メガネにはあと何が足りない?」

「ニコニコ研究会 様」先週末の日曜・月曜、またも夏休みを利用して、ニコニコ学会β主催の下つくばで開催された「ニコニコ研究合宿」に参加してきました。会議は「アンカンファレンス」形式で、白紙のタイムテーブルに各々が自分の話したい議題をポストイットに書いて貼り、その場でアドホックに会議が形成されるフォーマット。

「電脳メガネにはあと何が足りない?」セッション

研究とは・学会とは・ニコニコとはといった話が多い中、僕は空気を読まずにウェアラブルコンピュータについてのセッションをやってました…w

セッション内容は、最後のまとめセッションにおいてそれぞれ短く発表しあう形でした。自分のセッションのまとめを喋る際に「MOVERIOにカンペを表示しながら喋る」というのを思いついてその場でやってみたのですが、これが思いの外便利(後でタイムシフトを観直したら早口すぎましたが)。セッションで話し合った内容=すなわち目の前に見えてた内容は、だいたい以下の通りです。

  • 電脳メガネには何が足りない?
  • OSやUIが足りないと思うのだが
  • 視神経直結(表示は出来るが入力が出来ないとコンピュータにはならない)、脳波という話が出た一方で。
  • OSやUIを考えるにしても、機能やハードから考えるのでなく、ユースケースから考える。両手が空くとできること、例えば子供を抱きながら撮影できる、とか。
  • Googleのは操作よりは大量の主観映像の入手・分析にあるのではないか。
  • あと、今の発想は実際に使ってない人の発想が多い。ヘッドマウントカメラつけて1日過ごしただけでも知見が得られた。実際に使ってみるべき。
  • ATMのパスワードが録画されちゃう、携帯電話の画面が録画されちゃう。エッチなポスターに目を奪われてるのも録画されちゃう。

これを改行無しで読める大きさの文字にして詰め込んでMOVERIOの画面いっぱい埋まるくらい。即席で作ったにしてはまあまあでしょうか。

なお、より詳しいセッションのまとめも作ろうと思ったのですが、同じく合宿に参加された湯村さんのブログにて文句なしのまとめが書かれてしまったため、リンクしてお茶を濁します。w

カンペの作成手順

カンペの作り方としては以下のようなものでした。無理矢理。

  • カンペを出すのを思いつく
  • iPadで取ってたメモをコピーしてMOVERIOから見られる場所に出そう
  • MOVERIOは文字入力が極悪でログイン操作に時間がかかるので、ログインしないと見られない所には出したくない
  • 仕方ないので自分のブログに新規エントリとしてペースト、すぐ消す前提で公開
  • MOVERIOのブラウザで自分のブログにアクセス。勿論アドレス打つのも時間かかる
  • フォントサイズを大きめに変更、キーロックON
  • 発表
  • エントリを非表示にする

即席でこんな真似が出来るのもMOVERIOだからこそです。カンペ表示専用のアプリやサービスがあればもっとスムーズに出来るはず。…こういうアプリをワンオフで実装してみるのは現状のAndroidでも出来るけど、それに適したOSか、せめて再利用できるUIツールキットくらいはやっぱり必要だよなー。

なお、アンカンファレンスの他に夜の懇親会や、JAXAなどの近隣の施設への見学も、意外な表の話・裏話を色々見たり聞いたり議論したり出来て、非常に有意義でした。もしまたあったら是非参加したいですね。

気象衛星ひまわり(実物)

「電脳メガネ元年」

電脳メガネサミットとMGOS

先週末の8月4日、福井県鯖江市で開催された「さばえIT推進フォーラム “電脳メガネサミット 〜近未来のメガネを語る〜”」に夏休みを使って行ってきました。

電脳メガネサミット

鯖江市は日本のメガネの殆どを生産するメガネの街として知られています。このイベントは現在開発が進んでいる「頭に付けるコンピュータ」、いわゆる「電脳メガネ」の現在と未来を語るという趣旨のシンポジウムでした。普及しつつあるデバイスどころか、まだカテゴリが立ち上がってすらいないものを取り上げるという、市が主催するイベントとしてはちょっと類を見ないほど先進的な題材だと思いますw。

ゲストも、「電脳メガネ」という名前やメガネ型コンピュータの概念を一躍有名にしたアニメ「電脳コイル」のプロデューサーや、エプソンMOVERIOの開発担当者さんなど架空・現実の電脳メガネにまつわる面々、また電脳メガネのアプリケーションアイデアコンテスト参加者らによる聞き応え十分な話が聞けて、はるばる行ったかいがありました。また、ゲストのみならず来場者も、懇親会で話した場ではかなり濃い面々が揃っていて、文字通り時間を忘れて話しこむほどでした。

と、全体的にとても面白いイベントだったのですが、話が展開していく中であれっ?と思った点もありました。それを抱えて会場ホールから出てきた際、地元のテレビ局に感想を求められたのですが、その場で考えをまとめきる事ができず結局コメントは辞退してしまいました。

その後、他の方の感想ツイートなども読みながらもう少し考えてみましたが、何に違和感を感じたのかまとめておこうと思います。

電脳メガネ=ハードウェアの問題?

MOVERIOのロック画面具体的には、電脳メガネ実現への課題が「通常の眼鏡は数十g程度だが、電脳メガネはまだ数百gと重い」「大きくて不恰好」など、ハードウェアの話に終始していたように感じられました。

それらハードの問題はもちろんそれぞれ重要な課題で、まさに鯖江の眼鏡に関する技術や職人芸の腕の見せ所です。しかし、電脳メガネにとって最大の問題はむしろソフトウェアやユーザインタフェース(UI)・ユーザ体験(UX)、そしてOSなのでは?と思い、それについて質問してはみましたが、「それもあるね」程度の扱いで、あまり突っ込んだ話は聞けませんでした。

アイデアコンテストに寄せられたアイデアは面白そうで、聞いていてワクワクするようなものが沢山ありました。ただ、それらを実験デバイスではなく常用できる製品として実際に実装し、更には単発の製品ではなく生態系の一要素として展開・普及させられるためには、まずそのアイデアを実装できるためのプラットフォームが存在することが前提です。

その為には、まずは現行のスマートフォンでやれている行動を満足にメガネでも出来るように、ユーザ側に向けてはハード・ソフトの統合的なUXを、開発者側に向けてはSDK/APIの設計を整備する方が先決だと思うのです。それにはUXのハードウェア面を実現するための物理的なものづくりの技術も必要ですが、UXのソフトウェア面や、開発者向けの環境を実現するための全く異なった技能もまた非常に重要になってきます。

MGOSを作る

Google Project Glass UIモックアップ過去、人とコンピュータのインタラクションのパラダイムが変わった際には、その新しいパラダイムを最初から前提とした新しいOSが産まれ、そのOSを核とした生態系が発生する事がありました。

「ウィンドウ・アイコン・メニュー・ポインタ」ベースのGUIが登場した際にはMac OSとWindows、モバイルタッチスクリーンUIの際にはiOSやAndroidが、それぞれ新たに普及したOSとして登場してきました。同様に、ヘッズアップディスプレイ(HUD)やARといったパラダイムが受け入れられるためには、HUDやARを活用する事をはじめから前提としたUI/UXを持つ新しいOSを作らなければならないのではないでしょうか。

実際、近未来で展開する「電脳コイル」の劇中登場人物たちのメガネ上で動いていたのはWindowsでもAndroidでもなく、架空のメガネ用OS「MGOS」でした。劇中の電脳メガネのハードウェアとしての祖先となるようなデバイスは現在徐々に登場しつつありますが、MGOSの祖先となるようなOSについては、少なくともあまり聞いたことがありません。

このOS(あるいはそれに値するソフトウェア基盤)をどうやって作るか?どのようなものを作るか?といった議論があまりされていなかったという点が、おそらく感じた違和感の核なのだろうと思います。UI/UX基盤を作る、OSを作る、果ては生態系を作るということは、電脳メガネのハードウェアを作るのにも匹敵する壮大なプロジェクトで、一昼夜でできることでは無いだけに余計に。

メガネの時代をもたらすのは誰になるのか

個人的には、電脳メガネをはじめとしたウェアラブルコンピュータの時代の到来はそう遠くないと思っています。ですが、それをもたらすのが誰になるのか、というのは分かりません。
正確な文を覚えていないのですが、電脳メガネサミットの中では「日本発の電脳メガネを」といった趣旨の発言がありました。また、鯖江市長さんのブログエントリには、以下のようにあります。

微細な情報機器をめがねに組み込める技術力、優れた掛け心地を実現するノウハウを持つ産地は、世界で唯一ここ鯖江にしかありません。

世界に先駆けて「めがねの電脳化」に産地をあげて取り組むことは、「産地再生の一つの鍵」になります。

この記述だけを読むと、ソフトウェア・UI・OSといった部分が言及されていないようにも受け取れてしまうのですが、杞憂であることを祈っています。

勿論、自分でそれを作る試みに取り組んでもいない癖に偉そうに、と言われるとぐうの音も出ないのですが…orz

ひとまずは出来ることから、手持ちのMOVERIOで色々実験してみようかな、と調べているところです。

オヤジとデンスケ

ニコニコ学会で発表してみた

2012年4月28日、幕張メッセで開催されたニコニコ超会議内でのイベント、ニコニコ学会において「腱鞘炎の効率厨がPC環境を改善するとこうなる」というタイトルで発表を行ってきました(第3セッション「研究してみたマッドネス メカの部」)。ああいった場での発表は久しぶりだったので至らない点もありましたが、あの場に関わることが出来て良かったと思ってます。本当に面白かった!

なお、ここで発表した操作環境ですが、ControllerMateドライバソフトウェアの設定やポップンコントローラのボタン配置など細かく説明しきれていない部分も沢山あるので、いずれ書きたいなと思っています。僕は医者ではありませんし、腱鞘炎や関節炎は人によってダメージを受ける部位が異なるのでこの環境が誰にでもベストと言うわけではありませんが、似たような環境を作りたいという方がもしいたら、Twitterの@needleやブログコメントで連絡を頂ければと思います。

発表時の資料

実演時間を確保する為にカットしたスライドを含むバージョンはこちら

発表の様子(ニコニコ生放送タイムシフト動画)

http://live.nicovideo.jp/watch/lv89954863#03:43:00

応募時の動画

また、応募とは直接関係ありませんが、Twitter上での操作環境関連のTweetをまとめたTogetterまとめもあります。