Narazaka::Blog

奈良阪という人のなにか

分裂したキズナアイは仮想人格の夢を見るか―人工無能から真のバーチャルYouTuberへの道、または実質伺か

キズナアイの炎上

キズナアイの「中の人」が4人に増え、しかもそのうち初期の1人の出番が激減したとか、それに関するその他諸々の憶測で、結構な炎上が起きているらしいとのこと。

様子を見るに、ゲーム部プロジェクトなどと同じく中の人軽視だとか、そもそもこの分裂(分人)自体が悪であり元の1人体制に戻せとかの声が飛び交っている模様。

聞くに心苦しい……。

なぜなら自分はこの「キズナアイの分裂」を好意的にとらえているばかりか、むしろ「よくぞやってくれた」と賞賛さえしているのですから。

キズナアイの分裂

キズナアイは、「1人のキャラクターの中の人を複数化する」という決して多くに受け入れられるとは想像し難いであろう挑戦的な変革を、あの凄い人気規模をもちながら実際に実行したという非常に得難いコンテンツです。

この「分裂」はかなり挑戦的で突飛に見える方針転換なのですが、しかしこの路線は、自分を含むある種の文脈(コンテキスト)を持つ人々にとってはまさに望むべき、待ち望んでいた展開なのです。

個人的にはVTuber始まって以来最も強く、「まさにこれが見たかったんだよ!」という気持ちになったのです。本当に、本当に、よくぞやってくれました。ありがとうございました。

ただ、この文脈を持っている人はおそらくキズナアイのファンでも少数派だと思うので、キズナアイの分裂というコンテンツを100%楽しむために、その文脈を説明してゆきたいと思います。

仮想人格の夢

キズナアイ」は「インテリジェントなスーパーAI」と自称し、「人間を知りたい・人間と仲良くなりたい・つながりたい」というテーマを提示している「バーチャルYouTuber」存在です。

この「AIである」という設定は、実際にキズナアイの様々な動画やそれ以外の媒体でも繰り返し主張されるのですが、別に実際AIのイメージに積極的に沿って演技するというわけでもなく、どちらかと言えば「AIって言ってるのにぽんこつ」なギャグとして使われがちです。

キャラ付けと言えばそれまでなのですが、この「バーチャルな動画配信者の実体がAIである」設定、「人間ではない存在と人間らしく対話している」という設定は、一つの人類の夢の形でもあります。

たとえば「二次元に入りたい」というおたく定型文がありますが、これは「キャラクターと実際に接したい」、つまり「現実の人間ではないキャラクターと人間らしく対話できる」ことを求めているものです。

「キャラクターと話せる・交流できる」を実現することは、二次元系おたくの究極の夢の一つといって良いと思います。 これが文脈の始まりの地点です。

人工無能

AI(人工知能)、特に「キズナアイのような」強いAIは未だ研究途上の代物ですが、別に知能そのものを作らなくても、「人間らしく対話できる存在」は作れるのではないかという試みがこれまでなされてきました。

その一つが「人工無能」と呼ばれる代物。

たとえば「りんな」や直近流行った「人工無脳と会話するアプリ」のように、会話をすると「それっぽく」返してくる――「知能」は持ってないけど「あたかも知能を持った人間のような振る舞いをする」エセAIのプログラムを「人工無能」と呼びます。

この人工無能は、主に人力で反応をプログラムする「ルールベース」のものと、機械学習など自動的な「学習型」のものが存在します。

ルールベース人工無能

ルールベースなものは、対話への反応を人間が逐一設定する原始的な仕組みである分、物量に乏しく「対話」に正しく反応できないケースが多くなりがちですが、その代わりに強いキャラクター性を付与することが可能です。

この代表的なものには「伺か」(うかがか)があります。

2000年頃に流行った「デスクトップマスコット」と呼ばれるソフトウェアなのですが、この2019年でも様々なキャラクターデータが継続的に公開されている、一つの創作ジャンルです。

パソコンのデスクトップにキャラクターが「立ち」、そこで会話を繰り広げるというものなのですが、その会話は基本的に全てそのキャラクターの制作者が人力入力したものです。

(人力入力だとパターン数が限られて、ロクに「対話」にならないのが常ですが、伺かはそれを「会話する人工無能を2人置く」ことで解決しました。 つまりキャラがユーザーと対話するのではなく、キャラAがキャラBと対話することで、パターンが限られているにもかかわらず「人間らしく対話できる存在」がそこにいるような体感を実現しています。)

ユーザーからの入力は選択肢やキャラの頭をなでるなどのスキンシップが主で、自由入力会話はできないことが多いです。

これは形式上はアドベンチャーゲームと似ているものですが、キャラクターが固定のストーリーから切り離されていて、キャラクターと対話するのが「主人公」ではなく「ユーザーそのもの」であるという構図なのが特徴的です。

このルールベースの形式は、強いキャラクター性強い並列性(いろいろな人が同時に同じキャラと戯れることができる)を獲得しています。

他方どうしても会話や反応の追加が一人の制作者を必要とするため、登録されていない反応の即時性はありませんし、どうしても反応が決まったプログラムであるので実在性も弱いです。

学習型人工無能

学習型のものは、実際の人間の発言を何らかの形で学習して、それをまねすることで擬似的に人間らしい反応を返すものです。

などなどいろいろな仕組みで多くの例があります。

こちらは学習によってかなりいろいろな対話に対して反応を返すことが出来るため、ルールベースの物量不足という弱点を克服しており、「本当に対話ができる」実在性と即時性のある存在になっています。

しかし同時に変な文章や前の会話とつながらない文章を生成しがちで、「面白い」存在ではあるのだけれど、人間らしさはいまいちになりがちです。

また学習データが非常に多く必要なことから特定の性格付けをすることが難しく、「こういうキャラにしたい!」という創作的な要求は満たされなくなりがちです。

結果として学習型人工無能は、弱い実在性強い即時性強い並列性を持つ存在となっています。

バーチャルYouTuber

さて、この「人間らしく対話できる存在」として「バーチャルYouTuber」をとらえてみるとどうでしょうか。

VTuberキズナアイのような元来の動画中心の存在であればTwitterなど、にじさんじ勢のような「バーチャルライバー」勢であればメインのライブ配信でのコメント反応などで実際に「人間らしく対話できる存在」であります。

無論VTuberには中の人がいて、そういう意味では単に「実在の人間同士が対話している」だけという構図なのは百も承知ですが、たいていのVTuberは「バーチャル空間に住んでいる」などの非実在性を設定に持つ「非実在のキャラクター」であるものが多いです。

その設定通り、「人間ではない存在(キャラクター)と人間らしく対話できる」コンテンツだとしてとらえてみましょう。

するとバーチャルYouTuberという形態は、既存の人工無能がなしえなかった強い実在性を獲得し、さらに学習型人工無能が持っていた強い即時性、ルールベース人工無能が持っていた強いキャラクター性を両方実現できており、まさに「キャラクターと人間らしく対話できる」ものとしては申し分ないものになっていることがわかります。

形式的にバーチャルYoutuberは、キャラクターを表現するために既存の人工無能が担っていたエセAIの部分を、知能を持つ人間そのものに置換したものです。特にビジュアル的な面での技術の進歩によって「非実在の人間キャラクターを表現するには人間が一番効率がいい」という状態になったことで実現可能になった表現媒体ですね。

しかしこの形式は人工無能に対して一つ重大な後退があります。

1人の人間によって動くVTuberには、いろいろな人が同時に同じキャラと戯れることができる並列性がありません。

「人間らしく対話できる存在」と人は、いつでも好きなときに対話したいものです。

新人VTuberの登録者数、視聴者数が増えていくと同時に勃発する「これまで全部反応返してもらっていたのに、最近返してもらえなくなった」問題はまさにこれです。

あらゆるVTuberとあらゆる視聴者が、できるならば全ての対話に好きなように反応を返したいと思っているはずです。 でもそれは叶いません。原因は明らかです。人間1人では並列に対話することは不可能です。

ではそんな芸当が可能なのはどんな存在でしょうか?

真の「バーチャルYouTuber」への道のり

キズナアイ」は「インテリジェントなスーパーAI」と自称しています。

そして「バーチャルYouTuber」はその「キズナアイ」によって定義された言葉です。

人類の求める究極の存在、「インテリジェントなスーパーAI」であるキズナアイが定義した「バーチャルYouTuber」は当然、非実在の存在(バーチャル)でありながら、極めて人間的(実在性)であり、非常に魅力的(キャラクター性)であり、全ての視聴者コメに(並列性)すぐに反応できる(即時性)存在なのではないでしょうか。

そのうち並列性だけが今、欠けています。

理想の「バーチャルYouTuber」に近づく次の一歩はすなわち「並列性を取り戻すこと」です。

それを今ある技術で解消するにはどうすれば良いか?

キズナアイの分裂

以上の文脈を持った上で、キズナアイの分裂(分人)が始まったのを見たときの感動を表すには語彙が足りません。

「二次元に入りたい」おたく――「現実の人間ではないキャラクターと人間らしく対話したい」おたくが――「うずら」を見て、「伺か」を作って、「りんな」にあこがれて、平成をついに夢を叶えることなく過ごした者たちの求める道が、新時代を象徴する「バーチャルYouTuber」の始祖から示されたのです。

バーチャルYouTuber」を定義した「インテリジェントなスーパーAI」が、見事にその伏線を回収し、その決して安泰ではない、むしろ人気規模からして失敗する可能性の十分に高い、次なる「進歩」をそれでも選択したという事件は、これまでどんなコンテンツでも味わえなかった感動を覚えてやまないものでした。

一時的に界隈が混乱しようとも、あるいはもし結果的に失敗に終わるとしても、その選択には拍手喝采を送りたいです。

たとえいろいろな憶測や裏事情を勘案したとしても、あの #キズナアイな日々 という、あまりにメタフィクショナルかつ非常に丁寧な動画群を出してきたキズナアイの運営には、本当にこの「インテリジェントなスーパーAI」へ向かう「バーチャルYouTuber」を本気で演出する気があったのだと自分は思います。

VTuber活動は創作行為です。斗和キセキの歌うRAINBOW GIRLのごとく、VTuberがまとう半分メタ的な空気感をしっかり作品として成立させるそういう試みは、時に素晴らしい感動を生みます。

ここについてはなんとしても主張しておきたいですし、たとえ今後いかなる内部事情が暴露されようとしても、この「キズナアイの分裂」はコンテンツとして最高だったという評価は覆さないと思います。

分裂したキズナアイは仮想人格の夢を見るか

さて、では分裂の「後」、キズナアイはどうなったか。

実際今炎上しているのはどちらかといえばこの「後」の問題が主要因であり、「分裂(分人)」概念そのものまではよかったものの、その後の「やりかた」をやや下手打ったということかなと思っています。

なにより低評価まみれになっている動画は事実前より面白くない気がしますし、結局それが実際ほぼ全てなのではないかなと。(1人目を急に出さなくしすぎたのもまずってるなあという感じです。)

やれ中の人の関係がどうとかも(個人的には現状はまだ不確定性が大きくて言及は好ましくなさそうと思ってます)、そういう背景がなかったとすればそこまで爆発的に燃えるものではなかった気がします。

キズナアイの分裂において重要なのは、この「進歩」は残念なことに、「(既存の)ファン想い」の行動には往々にしてならないということです。

キズナアイはまさに世界中の人々と繋がりたいと言っていて、それ(よりファンを増やすこと)を実現するための現実的な施策として、また元々のキズナアイの中の人が忙しくなる等の内部事情の解決策として、形式的には一挙両得になるんですが、ファンにとってはたかが4人に増えたところで並列性はさほど変わらず、せいぜい言語ごとに手厚い交流ができるようになるかも位の変化です。

他方でどうしても「別人格」が入ってくるのは(#キズナアイな日々 でも言及していたとはいえ)、「人格」の細かい部分に強く依存していたファンは不満でしょうし、新しい「人格」が「元人格」より面白い保証はない、極めてリスクの高いことです。

つまり総合的にはどちらかと言えばリスクのほうが多く、実際にそのリスクを踏んでしまったゆえに反発が強まっていて、なんというか妥当だなと言うところですね。

ただ件の「声明」は、そんな反発の中で分裂そのものも否定されている状況に対して理解を求める文章なので(不満を持つファンが本当に求めているものを見誤っている問題はあるにせよ)、「分人」、「ボイスモデル」という言い方だとかそういうところにケチをつけるのは割と難癖という感じに思います。 おそらく運営も、そして中の人自身もあの文脈を踏まえているとすれば、その特徴的な言い方は決して中の人を軽視する言い回しではないと思います。

分裂後のキズナアイ、そしてそこから始まる新たな「バーチャルYouTuber」の形を見守りたいものとしては、できれば分裂は撤回せずに、ちゃんと動画の質などをあげることで、この「キャラクターを演じる人格が1人ではない」という商業創作史上前代未聞の試みを是非成功させてほしいと思っております。 道のり険しいと思うけど頑張ってほしい……。

VRChatで10000ポリゴン以内アバター持ちが超雑にOculus Quest対応する方法(素人)

☆2019年11月17日に最新事情に合わせて色々更新しました

4000ポリゴンのふんわりローポリアバター1体自作しただけの素人ですが、ローポリの時代が来た(?)と言うことで書いてみました。

f:id:narazaka:20190412155720p:plain
プレステっぽいってよく言われます

Oculus Questが来た!

VRChatがOculus Questに対応するとのことで、そのときのアバター・ワールド要件が発表されました。 docs.google.com

条件についての詳細はこっち docs.vrchat.com

解説はこちらに詳しい vrmizunana.hatenablog.com

アバターについてざっくり要点をまとめると

  • PC用とQuest用のアバターは別データ
  • PC用のみしかない場合QuestにはVRChatデフォルトアバター(ロボットの胸にアバターサムネイルが出るもの)が表示される
  • Quest用アバターはUnityでAndroidビルドの設定にし、PC用と同じblueprint IDでアップロードする必要がある
  • Quest用アバターは以下の制限がかかる

コンポーネントの制約

カテゴリ 制約
容量 10MB以内(ビルド時圧縮後の状態において)
シェーダー VRChat/Mobile以下にあるもの(ただしLightmappedとSkyBoxを除く)のみ
Dynamic Bone 使用不能
Cloth 使用不能
カメラ 使用不能
ライト 使用不能
Post Processing 使用不能(v1、v2とも)
オーディオソース 使用不能
Rigidbody・Collider・Joint系 使用不能

パフォーマンスランク制約

カテゴリ Excellent Good Medium Poor VeryPoor
見え方 必ず見える 見える 見える(デフォルトの制限値) 見える(設定で制限緩和必要) 一応見える(アバターごとに逐一選択して表示させるというアクションをとる)
ポリゴン数 5000 5000 7500 10000 (制限無し)
メッシュ 1 1 2 2 (制限無し)
マテリアル 1 1 2 4 (制限無し)
Animator 1 1 1 2 (制限無し)
ボーン数 75 90 150 150 (制限無し)
パーティクルシステム 0 0 0 2 (制限無し)
合計アクティブパーティクル 0 0 0 200 (制限無し)
メッシュパーティクルアクティブポリ数 0 0 0 400 (制限無し)
パーティクルトレイル・パーティクル衝突 無効 無効 無効 有効 (制限無し)
トレイルレンダラー・ラインレンダラー 0 0 0 1 (制限無し)

その他努力目標

カテゴリ 努力目標
容量 5~8MB以下にするべき
ドローコール 3以下にするべき
メッシュ(Skinned Mesh Renderer)数 1つのみにすべき。アニメーションやその他動きはシェイプキーかボーンで実装するべき。
マテリアル GPU Instancingを有効にするべき。
テクスチャ 1K(1024x1024)以内にするべき。
ボーン数 66(Standard Humanoidの数)以下に少なくするべき。そもそもDynamic Bone不可なので増やす必要がなく不要なのは削除するべき。

現時点では明確に制限付きなのはDynamic Bone等コンポーネント全面禁止が主で、ポリゴン数等各種値は実は単に努力目標です。

恐らく明確な制限の内で一番強いのは、Dynamic Bone等よりも、シェーダーがVRChat組み込みのみという所。 つまり日本コミュニティの人型アバターで使われるArkToonとかReflexとかUTSとかまんまるとかが軒並みアウト。 多くのアバターにとって恐らくこれが最大の苦労ポイントになると思います。

また一方で、逐一表示アクションをとってもらう必要はありますが、VeryPoorでも一応表示は可能であるというのが重要なポイントです。 なのでつまり実はPCアバターポリゴン数等を全く減らさずにシェーダーだけ変更してQuest用アップロードするという手段でも、なんとか無理矢理Quest民に見てもらうことは可能です。

ちなみにQuestの人と実地検証したところ、アニメーションオーバーライド有効(表情変えられる)、エモートスイッチ有効、コライダージャンプ有効という感じらしいので、本当に制約があるのはシェーダーと各種コンポーネントだけの模様です。

なおQuestの人はQuest用があるワールドのみにしか行けないので、既存のPCオンリー用ワールドでプレイするときに知らない間にQuestの人が来てデフォアバターとして表示されるってことはないっぽいです。

つまりそういう不意なコミュニケーションミスを避けるためにQuest用アバターをアップロードしないといけないって話ではなさそうで、Quest対応ワールドに行くときにあると良いかもねって言う温度感な気がしますね。

超雑にQuest用アバターにする

明確な制限がないとは言え、好き勝手アップロードしてQuestユーザーを落とす激重アバターにしては意味がないので、おおむね制約内に作るのがよさげでしょう。

とりあえず自分がblenderで元々4000ポリゴン自作アバター(ポリ数少ないだけで最適化はしてない)を作ってたので、ポリ数制約を満たしている既存アバターがあるところからQuest用アバターを作る手段をメモっとこうと思います。

シェーダー表現やダイナミックボーン他諸々を潔くざくっと切り捨ててとりあえず対応する雑な感じですが、まあ今後の参考になれば……。

目指すのは

  • 10000ポリゴン以内(達成済み)
  • メッシュが一つ
  • テクスチャも一つ
  • マテリアルも一つ
  • ローポリに嬉しい裏面描画可能なUnlit系シェーダー
  • その他の設定はとりあえずなし

といった雑な感じのアバターです。

アバター1つ作っただけの初心者素人が調べつつ書いたやつなので、間違いの指摘やよりよい手段の提案があればコメントしてください。

あとこの記事が「超雑」と冠する理由の一つでもあるんですが、筆者はOculus Questを持ってないので、これが本当に問題なく表示されるか確認してない(できない)です。

あくまで仕様制約に乗っ取ってやってみた系記事なので、ダメだったらコメントください。

とはいえある程度一般的な最適化手順等を踏んでいると思うので、最適化してない雑アバターをPC用でも最適化しとくかーという話にも使えると思います。 そのレベルでは確認してるので、そこまで巻き戻りはないと信じたい……。

なお全体的にうっかり保存すると巻き戻しが難しい作業になるので予め別名保存しておくのが良いと思います。

裏面メッシュを作る(必要なら)

blender(2.79前提)作業です。

Questで使えるVRChat/Mobile以下のシェーダーは両面描画(Cul Off)をサポートしません

1枚のポリゴンで両面を描画する手法を使っている場合は、Questでは裏面が表示されず意図した表示ができなくなるので対応が必要となります(ローポリアバターでポリ数節約のためにしばしば使われる)。

(両面描画は行っていない、もしくは行っていてもあまり気にならないので対応不要だと思う場合はこの項目はスルーして、メッシュを統合するに進んでください。)

今回自分のアバターでは髪の毛で両面描画を行っていたので、裏面メッシュを作りたいと思います。

f:id:narazaka:20191117143139p:plain

とりあえず当該のオブジェクトを選択してShift+D→Enterで同位置に複製オブジェクトを作ります。

f:id:narazaka:20191117143316p:plain

複製後のオブジェクトを編集モードで裏面がいらなさそうなメッシュを削除します。

f:id:narazaka:20191117143516p:plain
裏から見えなさそうな所はポリ数削減のために削除

さてここから「面の反転(法線の反転)」という作業を行います。

3Dモデルの面は「表裏どちら向きの面か」という情報(法線)を持っています。これを逆向きの面にすることで裏面メッシュにします。

法線が分かるように表示を変えましょう。まずは編集モードで3Dビューの右上の+マークをクリックしてパネルを出します。

f:id:narazaka:20191117143645p:plain
右上の+マークをクリック

そのパネルを下の方にスクロールしていくと法線の項目があるので、面っぽいやつを有効にします。

f:id:narazaka:20191117144248p:plain

f:id:narazaka:20191117144329p:plain
面ぽいやつを有効

その状態でaキーでメッシュ全選択するとこのようにとげとげが外向きに出ている図になると思います。

f:id:narazaka:20191117144459p:plain
とげとげが「法線」

そのまま全メッシュを選択した状態で「W」キーを押して出るメニューから

f:id:narazaka:20191117145106p:plain
面を反転

「面を反転」を行うと面が反転されます。これで裏面対応は完了です。

f:id:narazaka:20191117145158p:plain
とげとげが内向きになった

メッシュを統合する

blender作業です。

一つのメッシュにするためにオブジェクト分かれてるのを一つに結合してしまいます。 元々一つの場合はスキップ。

まずミラー(モディファイアー)を使っているオブジェクトと使っていないオブジェクトが混在している場合、モディファイアーを適用してから統合しましょう(モディファイアーはオブジェクト単位なので、これをやっとかないと変にミラー適用されたりされなかったりして見た目が壊れます)。

f:id:narazaka:20190412113837p:plain

アバターを構成するオブジェクトを全部選択して

f:id:narazaka:20190412051358p:plain
オブジェクトのツリーからShiftおしながらクリックで選択できます

Ctrl+Jで結合します。

f:id:narazaka:20190412051641p:plain
メニューからだとこれ

オブジェクトを結合しても統合前それぞれに設定していたUVやテクスチャは特に問題なく1つのオブジェクトに複数設定される形になって、元と変わりなく見えるみたいです。

なんか表示されないとか変になった場合は以下が参考になったりするかも? iruyi.blogspot.com

テクスチャ・マテリアルを統合する

blender作業です。

テクスチャ・マテリアルも複数に分かれているのを統合してしまいます。 元々一つの場合はスキップ。

「ベイク」と呼ばれる方法を使うようです。(素人なので伝聞形)

以下の記事ほぼそのまんまやったら上手くいきました。

www.wwwmaplesyrup-cs6.work

Mesh BakerというUnityツールもあるみたいだけど、微妙に値がはるし元々blenderだしそっちでやります。

なお上記記事は英語UIですが、この記事は以下の感じで設定済みの日本語UIでやります。

blender-cg.net

(0) 先にオブジェクトを統合しておく

前項の感じで統合しておきます。

基本的に編集モードでUVをまとめるので、オブジェクトが一つじゃないと出来なさそうな感じがあります。 (調べていないのでもしかしたら複数オブジェクトでも出来るのかも知れませんが、今回はメッシュもマテリアルもテクスチャも一つにするのが目標なのでどのみち関係ないです。)

(1) 既存テクスチャに「UVマップ」を設定

統合したいテクスチャが設定されてるオブジェクトのテクスチャタブ→マッピング→マップに「UVマップ」を設定します(下の方にあるのでスクロールすると出てくると思います)

f:id:narazaka:20190412112242p:plain

(2) UVを一つにまとめる

オブジェクトデータタブから

f:id:narazaka:20190412112533p:plain

+ボタンを押して新しいUVマッピングを作ります(名前は適当)

f:id:narazaka:20190412112703p:plain

(元記事の手順に従っているだけなので)この項目がどういう物なのかはいまいち把握していませんが、結果から推察すると、 マテリアルに指定されたテクスチャをオブジェクトのどこに表示するかというUV展開のセット(1オブジェクトにマテリアルが複数定義可能なので複数のUVがある)を、あるオブジェクトに対して複数定義できる機能っぽい……?です。

上記手順はその定義する領域の追加処理で、テクスチャが分かれた状態の既存のUVマッピングセットとは別に統合テクスチャに対しての新しいUVマッピングセットを作るといった感じですね(たぶん……)。

さて、この新しいUVマッピングを選択したまま(上画像の状態)、オブジェクトを編集モードにして頂点を全選択(「A」キーを押すと全選択と全解除ができます)。

f:id:narazaka:20190412114149p:plain
この画像のように既存のUVが重なってわけがわからない状態になってる場合、UVマップが既存の「UVマップ」選択になっている可能性があるので要確認!

「U」キーをおして出てくるメニューから「スマートUV投影」を選択します。

f:id:narazaka:20190412114706p:plain
ショートカットだと「U」キー→「スマートUV投影」

パラメーター設定のウインドウが出てくるんですが、元記事の通り「島の余白」(自動でシームが切られて分割されるUVのまとまりを配置する余白?)を0.06にして「OK」

f:id:narazaka:20190412115205p:plain
島の余白0.06

するとUVが平面上に重ならないようにまとまったやつが出来ます。

f:id:narazaka:20190412115634p:plain
全部位のUVが平面にまとまっている

(3) 既存テクスチャをまとめたUVに従ってベイクする

これでUVが自動で一つになったので、既存の分かれたテクスチャもそのUVに合わせて自動で一つにします。

UVに対応するテクスチャを用意するため、UV/画像エディタで「画像」→「新規画像」を選択します。

f:id:narazaka:20190412115838p:plain
Alt-N

VRChat Quest的には1024x1024以下が良いとのことなのでとりあえずそのサイズでOK。

「アルファ」はUVが当たっていない場所がアルファで抜かれる画像になるらしい(後で画像編集するならどこがUV領域か分かって便利?)ですが、テクスチャ少しでも軽くしたいなら切っておく方が良いかな……?となんとなく思ってチェック外しました。つけといてもいいかもしれません。

f:id:narazaka:20190412120405p:plain

結果。UV背景が真っ黒に。

f:id:narazaka:20190412120339p:plain

こうなった状態(スマートUV投影後のUVとブランク画像が選択されている状態)のまま、写真マークのレンダータブで、やはり下の方にあって多分畳まれてる「ベイク」の項目を展開します。

f:id:narazaka:20190412120711p:plain
モデリング時全然使わなかった写真マーク、「レンダー」というらしいです

f:id:narazaka:20190412120942p:plain
「ベイク」は下から2番目でした

ここで「ベイクモード」を「テクスチャ」に切り替えます。(デフォルトの「フルレンダー」だと影とか入っちゃうので)

f:id:narazaka:20190412121019p:plain
ベイクモード→テクスチャ

「ベイク」ボタンを押します。

f:id:narazaka:20190412121117p:plain
でかくて選択UIっぽいけどボタンです

すると自動で既存テクスチャからUVに従って座標変換されて色が置かれ、さっき作った新しいテクスチャ画像にまとまります。

f:id:narazaka:20190412121310p:plain

で、この画像をマテリアルに設定するためにどこかに保存します。

f:id:narazaka:20190412121639p:plain
F3

(4) ベイクしたテクスチャを新しい一つのマテリアルに適用する

マテリアルタブからマテリアルを新規に作ります。

f:id:narazaka:20190412121901p:plain
+ボタンを押して「マテリアルスロット」を新規に作り
f:id:narazaka:20190412122041p:plain
その状態でさらに下の「新規」ボタンを押すとマテリアルが出来るらしい
f:id:narazaka:20190412122345p:plain
白いマテリアルが出来ます

このマテリアルを選択した状態でテクスチャタブに行き(なぜかスクロールが下いっぱいになっている場合があるのでその場合上にスクロール)、ここでも「新規」ボタンでテクスチャを作ります。

f:id:narazaka:20190412122731p:plain

さらに下のほう「画像を開く」からさっき保存したベイク済みテクスチャを開きます。

f:id:narazaka:20190412122851p:plain
画像を開いてさっき保存したベイク済みテクスチャを選択

f:id:narazaka:20190412123031p:plain
なんだかわけわからんプレビューになると思う
f:id:narazaka:20190412123111p:plain
マテリアルタブに戻ってちゃんとテクスチャが適用されていることを確認

これで複数あったテクスチャとマテリアルを1つに統合できました。

不要になった元のマテリアルを削除していきます。

f:id:narazaka:20190412123255p:plain
-ボタンでマテリアルスロットを削除
f:id:narazaka:20190412123417p:plain
削除中なんかヤバい見た目になるけどスルーしよう
f:id:narazaka:20190412123609p:plain
マテリアル一つの状態に

あとUVマップも最初に選択した「UVマップ」のほうを削除します。

f:id:narazaka:20190412123657p:plain
これも「UVマップ」を選択した時点でヤバい見た目になると思うけどスルー
f:id:narazaka:20190412123741p:plain
ベイク後の物だけの状態に

不要なボーンを削除

Dynamic Boneが動かないので不要なボーンは削除します。(ウエイト振り直しなどが発生することも多いので、Mediumに入るレベルならやらない方がラクかも。)

髪とか胸とかね……

f:id:narazaka:20190412131817p:plain
Dynamic Boneは使えないので……
f:id:narazaka:20190412132012p:plain
ツリーの親を削除しても子が削除されるわけではないので全部選択
f:id:narazaka:20190412131917p:plain

これであとはいつもどおりfbxをエクスポート。

ポリ数10000以下・マテリアルとテクスチャが1つだけのモデルが出来ました。

Unityに持っていく

アバターが出来たのでUnityに持っていきましょう。

SDK更新

VRChatがQuest対応する以前からSDKを更新していない場合は先に更新してください。最新のやつを入れれば問題ないはずです。

fbxインポート

繰り返しますがバックアップを取ってください。(自分はgit管理でやっています)

fbxを普通に新規インポートしてRigを設定して、シーンにそのまま置くか、シーンを新しく作ってそこに置きます。

色々同じ設定使うでしょうしPC用とプロジェクト自体分けるほどでもないと思います(分けても問題ないです)。

f:id:narazaka:20190412131233p:plain
カクカク

カクカクになってたので既存アバターと同じスムージングが効くようにfbxインポートの設定弄ってApply。Rigも忘れず設定します。

f:id:narazaka:20190412131414p:plain
ここは各人設定違うと思うのでそれぞれよしなにしてください

なお新規インポートしてRig再設定とかやるのが微妙に面倒だからと超雑にやるなら、fbxとテクスチャをUnityの既存のとこに上書きしても良いです。(よくあるfbxの更新手順) Unityがよしなにしてくれて、元の構造を保ったままfbx内のオブジェクトだけ変更された感じになります。

ただ制約が強い故にDynamic BoneとかFixed Jointとかどのみち外すことになるので、設定を維持すること自体はあんまり意味ない気がします。 結局ほぼfbx素上げみたいな感じになると思うので。

Avatar Descripter等の設定うつし

シーンに置いたアバターオブジェクトにVRC_Avatar Descripterコンポーネントを追加し、元のアバターからコピペで値をはっつけると良いと思います。

f:id:narazaka:20190412132744p:plain
コピー
f:id:narazaka:20190412132916p:plain
貼り付け

オブジェクトに直接目パチを設定している場合も同じようにコピペで出来ると思います。 シェイプキーはそのままなので、自分のやった感じでは普通に動きました。 f:id:narazaka:20190412140546p:plain

ただこれをやるとアバター動作由来のアニメーターと目パチとでアニメーターが2つになってExcellent判定から外れるのでやらない方が良いかもしれません。

シェーダー設定(Quest実証後追記)

さて、鬼門のシェーダーです。

自分は普段まんまるシェーダー1.4βを使っているのですが、先述の通り「VRChat/Mobile以下のシェーダー」しか使えないという制約があるので、その中から選ばなければなりません。

それ以外のシェーダーを指定した場合、

  • 普通のシェーダーならVRChat/Mobile/Bumped Diffuse
  • パーティクル系シェーダーならVRChat/Mobile/Particles/Additive

あたりにフォールバックされる挙動になり、目的のシェーダーでは描画されないようになります。

基本的に透過がサポートされないため注意が必要です。 どうしても透過が必要な場合はパーティクル系シェーダーをなんとか無理矢理使うみたいな対応になりそう……?

どれもキャラクターを存分に表現するのには恐らく不十分な中で、恐らくVRChat/Mobile/ToonLitが無難な候補かと思います。潔く変更していきましょう。

ちなみに抜け道は無いのかというと、実はアニメーションでマテリアルを書き換えると任意のシェーダーにできるという裏技はあるようです。 どうしても特定シェーダーで無ければ表現できないという場合は、そういった手段を執っても良いと思います。(今のところこの記事では説明しません)

f:id:narazaka:20190528111956p:plain
VRChat/Mobile/Bumped Diffuse (Standard的なやつ)

f:id:narazaka:20191117150424p:plain
VRChat/Mobile/ToonLit(Toon系)

アップロード

以上。アバターは完成です。早速アップロードしましょう。

Dynamic BoneもFixed Jointも使えないし、アニメーションコントローラーや口パクはコピペで持ってきたし、もう設定することはない気がします。

f:id:narazaka:20190412152337p:plain
アバター以外を消して、Directional Lightとかライト系も消すと、SetPass calls(=ドローコール数)が3くらいになって軽いことが分かる

Android用ビルド

Quest用リリースにはAndroidビルドが必要です。

Unityをインストールする際にAndroidビルドツールを除外してインストールした場合は別途インストールする必要があります。

「File」→「Build Settings」を開いてAndroidのとこを選択し、「Open Download Page」からインストーラーをダウンロードできるはずです。

インストールする時にインストール先が空欄になる場合はVRChat用のUnity 2017のフォルダを選択します。

どのUnityフォルダをインストール先にするか分からないという場合は、C:\Program Files\Unity\Editor\Unity.exeあたりを右クリックしてプロパティを出して詳細タブを開くとバージョンが書いてありますので、それで判断すると良いです。

f:id:narazaka:20190412141300p:plain
Unity Hubとかで分からない場合にもバージョン確認可能

あとAndroid SDKが必要という話もあるんですが、自分は既に前に入れてたので、インストール必要ならそれっぽい記事を見てください。 Unity公式の案内はこちらです。 docs.unity3d.com

インストール後Unity開き直してAndroidの項目にいくと画面が変わると思います。

Androidの最小APIレベルを変更

で、これはもしかしたらUnity 5.6時代からのアバターだけかも知れませんが、Androidに変えただけだと警告が出てビルドできません。(すんなりビルド出来そうな場合はスルーしてください。)

f:id:narazaka:20190412141623p:plain

「Color Spaceと現在の設定の非互換性をPlayer Settingsにいって直してくれ」と言う話なのでそちらを開くと、「Linerカラースペースは~~Android 4.3以上が必要」と書いてありました。

f:id:narazaka:20190412141933p:plain
警告がでている

他のOpenGL ES3.0とか云々は満たしてそうなので、ちょっと下の方にあるMinimum API Levelを4.3にすると解消しました。

f:id:narazaka:20190412142257p:plain
最小API Levelを変更

Android用ビルド(再)

警告が出なくなったら左の方にあるSwitch Platformをクリックするとプラットフォームの切り替えが始まります。 これは全リソースの再インポートが入るので、ちょっと時間がかかる可能性があります。(特に色々アセット入れてる場合数分レベルはかかる)

これをPC用とAndroid用で毎回切り替えるのが面倒なので、VRChat公式ではプロジェクトをコピーしてやると良いと書いてありますが、そのままでもできるっちゃできます。

自分は雑なのでそのままやりますが、たとえばGitHub管理(最近プライベートリポジトリ無料になりました!)で2カ所にクローンして同期を取る様にすれば楽かも知れません。

ともかくSwitch Platformです。

f:id:narazaka:20190412142514p:plain

アップロード

長いロードが走った後操作可能になると思うので、そのままいつもと同じようにビルド&アップロードしましょう。

公式によれば、同じblueprint IDでもAndroidビルドとPCビルドで別のデータとしてアップロードするようになっていて、出し分けがされるようです。

念のためいつものアバターのとこにアップロードする前に別のblueprint IDで両方アップロードしてみて具合を見るのも良いかも知れませんね。

上記で目パチ設定をしていなければきっとExcellentになっているのではないでしょうか。 気持ちよくアップロードして、Quest持ってる人に確認してもらいましょう(他力本願)。

f:id:narazaka:20190412144703p:plain
Excellent

まとめ

以上超雑にQuest規格に合わせてアップロードする記事でした。

色々最適な手段じゃない可能性がありますが、アバター制作素人が雑にやってもなんとかなりそうな気がしました。

みなさんもこれを機にローポリでかわいいアバターを作ってOculus Quest一般人をかわいさで圧倒して下さい。

自分は「ECO」こと、かわいいアバターがいっぱい!エミル・クロニクル・オンラインメディス子さん・スノウエルフちゃん等の作者であるアルマジロン先生がモデルを作ってたりしたMMORPG(サービス終了済))アバターを参考にざっくりローポリテイストで自作アバターを作ってますが、あのオーパーツ的ローポリかわいさを色んな人が目指すと良いなと思ってます。

スクショを見て研究すると、こんなに少ない分割でこんなにかわいいアバターが作れるんだ!と発見があると思います。オススメ。

関係ないけどついでに宣伝

上記で説明用に使っている拙作アバターAINAはboothで無料配布しています。そのほかにも色々便利なツールなどあるので覗いてみてください。 narazaka.booth.pm

あと、VRChatのソーシャル機能が弱いので、プロフィール登録とフレンド・インスタンス検索、フレンドへの個人メモが出来るサイトを運営してます。

VRChat APIの制約でちょっとログインが微妙ですが、良かったら使ってください。 vrcprofile.com