【VRChat】Cats Blender PluginとVRCQuestToolsを使ってアバターをQuest対応する

はじめに

最近、Oculus Questを入手してVRChatを始めました。

Oculus Questではデフォルトで表示されるアバターに制約があり、パフォーマンスランクがPoor、Very Poorだと見えません(参考:Avatar Performance Ranking System)。

この記事では、アバター京狐さん)をQuest対応した際に行ったことをまとめています。

f:id:nafuka11:20210805233526p:plain:h400

注意点

  • この記事を書いた人はVRChatもUnityもBlenderも初心者です。手順に誤ってる箇所があるかもしれません。
  • Unity 2018での手順です。

作業環境

macOS Mojave 10.14.6

Unity Hub 2.4.5

Unity 2018.4.20f1

Blender 2.93.1

必要なもの

Unity HubとUnity

UnityはVRChatのアバターをアップロードするのに必要なゲーム開発環境で、Unity HubはUnityのバージョンを管理できるツールです。

VRChatの Currently Supported Unity Version から、

  • Click here to install Unity Hub
  • Click here to install the current version of Unity via Unity Hub

をクリックし、Unity HubとUnityをインストールします。

Unity周辺ツール

VRChat SDK

VRChat用のソフトウェア開発キットです。VRChatのコンテンツの開発を支援するunityパッケージです。

Unityのプロジェクトにインポートして使います。

https://vrchat.com/home/download

VRChat SDKは現在バージョン2と3があるようです。

京狐さんは VRChat SDK 2に対応なので、2をダウンロードしました。

VRCQuestTools

アバターをQuest用に変換してくれるツールです。

https://booth.pm/ja/items/2436054

VRChatThumbnailer 2020

アバターのサムネイルを好きな画像に設定できるツールです。

https://booth.pm/ja/items/2327103

Blender

3Dを作成するためのツールです。アバターのポリゴン数、マテリアル数を削減するために使います。

blender.org からダウンロードし、インストールします。

周辺ツール

Blenderプラグインを導入します。Edit → Preferences → Add-ons → Install → ダウンロードしたzipを選択して、プラグインをインストールします。

Material Combiner

後述する Cats Blender Plugin に必要なツールです。

https://github.com/Grim-es/material-combiner-addon

Cats Blender Plugin

VRChat用にアバターを最適化できるBlenderプラグインです。シェイプキーを保持しながらポリゴン数を削減したり、マテリアル数を削減できたりします。

https://github.com/GiveMeAllYourCats/cats-blender-plugin

プラグインをインストール後、「n」キーを押してメニューを出し、CATSタブ → Optimization → Atlas から、Pillowをインストールします。

Macの場合は、以下の記事を参考にするとpillowをインストールできました。

https://qiita.com/kjunichi/items/a36fdc9db3876e068249

Dynamic Bone

https://vrc.wiki/beginner/1459/#Dynamic_Bone%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88

手順

1. Blenderでのアバターの最適化

Blenderを起動し、「ESC」キーを押してスプラッシュスクリーンを閉じます。

「n」キーを押してメニューを出し、CATSタブ → Import Model からモデルを取り込みます。

VRMファイルを選択し、「Import Any Model」ボタンを押します。

そうすると、モデルが取り込まれます。

MacでのBlenderの操作方法は以下を参考にしました。

https://ameblo.jp/chicktack123/entry-11645338950.html

Cats Blender Pluginを使ってポリゴン数、マテリアル数を削減していきます。手順は以下のサイトを参考にしています。

https://shinrinmusic.com/cats-blender-plugin-how-to-use/

ポリゴン数の削減

CATSタブ → Decimation → Trisを15000にして、「Quick Decimation」ボタンを押します。

f:id:nafuka11:20210805182441p:plain:h400

「Fix Model」を押してモデルを最適化します。不要なボーンを削除したり、いろいろやってくれるらしいです。

マテリアル数の削減

Optimization → Atlas → Generate Material List → 「Save Atlas to...」ボタンを押し、統合されたマテリアルを保存します。

モデルの保存

「Export Model」ボタンを押し、「Export FBX」ボタンを押して、最適化したモデルを保存します。

File → Save as... からblenderファイルも保存しておきます。

2. Unityプロジェクトの作成

Unity Hubを開き、プロジェクトを新規作成します。テンプレートは3Dを選択します。

f:id:nafuka11:20210805182536p:plain

VRChat SDK等をインポートする

Assets → Import Package → Custom Package → VRCSDKのunitypackageを選択し、Openします。

インポートするファイル一覧が現れるので、そのまま「Import」ボタンを押します。

同じことを、VRCQuestTools、VRChatThumbnailer 2020でも行い、インポートします。

通常版、最適化したアバターをインポートする

まずは通常版のアバターをインポートします。このアバターはPC用のアバターとして使います。

Assets → Import Package → Custom Package → 京狐さんのunitypackageを選択し、Openします。

Assetsにフォルダが追加されるので、Prefabファイルを左上のSceneにドラッグアンドドロップします。

f:id:nafuka11:20210805182735p:plain

京狐さんがSceneに追加されました。

f:id:nafuka11:20210805182806p:plain

Unityの操作方法はこの辺りを参考にしました。ズームや移動ができればなんとかなります。

https://qiita.com/guru_taka/items/b78b05844b05631e164b

今度は最適化したアバターをインポートします。

Assets に保存しておいたfbxファイルをドラッグ&ドロップしてインポートします。

その後、先ほどと同じように、fbxファイルをSceneにドラッグ&ドロップします。

f:id:nafuka11:20210805183032p:plain

まだマテリアルが適用されていないので、グレーな見た目になっています。

3. Unityでのアバターの設定

最適化したアバターの設定

通常版のアバターから各種設定をコピーします。

  • 通常版のアバターを選択 → 右側Inspectorタブ → VRC_Avatar Descriptor の右側にある歯車ボタンを押す → Copy Component をクリック

f:id:nafuka11:20210805183431p:plain

コピーした内容をペーストします。

  • 最適化したアバターを選択 → Inspectorタブ → 「Add Component」ボタンをクリック → VRC_Avatar Descriptor を選択 → VRC_Avatar Descriptor の右側にある歯車ボタンを押す → Paste Component Values をクリック

Face Meshを変更

マテリアルの適用

  • 保存しておいたマテリアルを Assets にドラッグ&ドロップします。それだけでマテリアルが適用されるはず。
  • 適用されない場合、最適化したアバターを選択 → Inspectorタブ → Modelの「Select」ボタンをクリック → Materialsタブ → On Demand Remap → 右端の小さいマルをクリック → Noneを選択し直すと直ることがあります。
    あるいは、Locationを「Use External Materials (Legacy)」にして、Namingを「By Base Texture Name」にすると直るかも。

  • この段階ではシェーダーがデフォルトなのでグレーに表示されてますが問題ないです。

f:id:nafuka11:20210805184027p:plain:h400

ボーンの設定

  • 最適化したアバターを選択 → Inspectorタブ → Modelの「Select」ボタンをクリック → Rigタブ
    • Animation Typeを「Humanoid」にして「Apply」ボタンをクリック
    • 「Configure」ボタンをクリック
    • ダイアログが出たら「Save」ボタンを押します
  • ボーンをマッピングする画面になります
    • Body
      • Chestで右側の丸を押して、Chestを選択します
        f:id:nafuka11:20210805234740p:plain:h400
      • Upper Chest、Toesは未選択で問題ないようです
    • Head
      • Jawを選択してdeleteキーを押してNoneに
        f:id:nafuka11:20210805184935p:plain:h400
    • 完了したら、右下にある「Done」ボタンを押して設定を終了します。
      f:id:nafuka11:20210805185102p:plain:h400
      • ダイアログが出たら「Apply」ボタンを押します。

最適化したアバターにVRCQuestToolsを適用

最適化したアバターを選択した状態で、VRCQuestTools → Convert Avatar for Quest を選択します。

Textures Size Limitは1024x1024でなく、2048x2048でも問題なく表示できたので変更してもいいかもしれません。

「Convert」ボタンを押します。

f:id:nafuka11:20210805185252p:plain:h400

シェーダーがToonLitに変わったことにより、ポリゴン数が少なくてもいい感じに見えるようになりました。

f:id:nafuka11:20210805185427p:plain

サムネイルを設定する

Assetsにサムネイル画像をドラッグ&ドロップして追加します。

空のオブジェクトを作り、Incpectorタブから「Add Component」ボタンをクリック → VR Chat Thumbnailerを選択します。

Assetsのサムネイル画像を、グレーの枠にドラッグ&ドロップしてサムネイルを設定します。

f:id:nafuka11:20210805185627p:plain

4. アバターのアップロード

通常版のアップロード

VRChat SDK → Show Control Panelを選択。

AuthenticationタブからVRChatのユーザとしてログインします。

Builderタブを選択。「Build & Publish for Windows」でアバターをアップロードする画面に移ります。

f:id:nafuka11:20210805222729p:plain

アバターをアップロードする画面で、Avarar NameとDescriptionを入力し、下のチェックボックスにチェックをつけ、「Upload」ボタンを押してアップロードします。

Avatar NameとDescriptionはコピペすると日本語を入力できるようです。

Quest版のアップロード

アバターはBlueprint IDというIDを使い、アバターが同一かどうかを識別しています。

そのままQuest版をアップロードしてしまうと、別のアバターとなってしまうので、Blueprint IDを同一にします。

InspectorタブからPipeline ManagerにあるBlueprint IDをコピーします。

Quest版アバターにBlueprint IDをペーストして、Attachします。

f:id:nafuka11:20210805221940p:plain

「Switch Build Target to Android」してQuest用のビルド設定にし、「Build & Publish for Windows」を押してアップロードします。

課題

表示が崩れてしまう

ポリゴン数を削減する関係で表示が崩れてしまうことがあるようです。

f:id:nafuka11:20210805233554p:plain:h400

アウターの腕にある赤線が欠けたり、インナーの切り替えのラインが崩れたりしてしまいました。

メッシュの裏側が表示されない

Questで使えるシェーダーはメッシュの両面描画をサポートしていないそうで、アウターの裏面が表示されませんでした。

f:id:nafuka11:20210805233652p:plain:h400

以下のサイトを参考に裏面メッシュを作ると表示できるようです。

https://narazaka.hatenablog.jp/entry/2019/04/12/VRChat%E3%81%A75000%E3%83%9D%E3%83%AA%E3%82%B4%E3%83%B3%E4%BB%A5%E5%86%85%E3%82%A2%E3%83%90%E3%82%BF%E3%83%BC%E6%8C%81%E3%81%A1%E3%81%8C%E8%B6%85%E9%9B%91%E3%81%ABOculus_Quest%E5%AF%BE%E5%BF%9C

https://3dcg-school.pro/blender-normal-flip/

おわりに

課題は残っていますが、とりあえずQuestに京狐さんを表示できてよかったです。