二足歩行ホビーロボットビルダーの みっちー です。
最近、ホビーロボットビルダーの仲間内で「VRホビーロボット集会」という名のVRChatのイベントが開催され始め、自分もQuest2の発売をきっかけに、しばらく離れていたVRの世界に戻ってきました。
さらに、そのままVRChat沼にハマってしまいました。(笑)
ロボットの製作にはモデリングソフトではなく、3D CADソフトを使うのが一般的ですが、3D CADのデータをblenderで編集可能な形式にコンバートして、ロボットのモデルをアバター化するのが、そのコミュニティの中で流行りはじめています。
ただ、VRChat内でコミュニケーションしていると、中途半端に作った自作アバターでは使いづらいと思うこともあり・・・
今回、"人間アバターだけど自作ロボットアバターも自慢できる"、そんなアバターを作りたい!っと思って、いろいろ探し回った結果、たどり着いたアバターの作成方法と、見つけた技術(アセット)を紹介したいと思います。
目標
人型アバターの横に、サポートキャラクターみたいな小さなアバター(ロボット)を浮かべて、かつ自分のアバターと同期して動かしたいと思います。
ちなみに、主人公にくっついてるサポートキャラって良いですよね。
- カード〇ャプターさくらの「ケロちゃん」
- 姫ちゃんの〇ボンの「ポコ太」
- 幽遊〇書の「プー助」
・・・とか、みたいな感じですね。(年齢がバレるw)
普段作っているロボット自体も、そんなサポートキャラクター的位置づけのキャラクターとして製作しています。
(私、ぬいぐるみロボットとか作ってます。)
必要なもの
作業しながら集めても良いのですが、まず初めに必要なものを列挙しておきます。
- 単体のアバターのアップロードの知識
※ 自分はまず、zenさんのワニでもできる!モデリングforVRChatのかぼちゃアバターで練習しました。 - メインにしたいアバターのモデル
※今回は、boothで無料のアバターの中から、拾い部屋さんのシヴィーちゃんを使わせていただきます。 - 空中に浮かべたいアバターのモデル
今回は、自作のKO-LINK3というキャラクターを使います。
※3D CADのロボットのデータをアバターにする方法は、@Ninagawa_Izumiさんの記事「Unity/VRChatにロボット系3Dモデルをインポートして動かす全行程」をご覧ください。 - Dynamic bone (Unityアセット) 約2,000円くらい(時々セールやってます)
- VRCHAT SDK2 (3.0でも可)
- ユニティちゃんトゥーンシェーダー2.0
- Drone Movement with Dynamic Bone (無料)
拾い部屋さんのシヴィーちゃん (Boothで無料!!)
https://booth.pm/ja/items/1663470
プロジェクトの作成
適当な名前で、まずは新しいプロジェクトを作ります。
下準備(必要なアセットのインポート)
キャラクターをインポートする前に、必要なものをUnityにどんどんインポートしていきます。
事前に、VRCHAT SDK2をダウンロードしておき、Unityの上部メニュー [Assets]->[Import Package]->[Custom Package] から、「VRCSDK2-2020.12.09.04.45_Public.unitypackage」を読み込ませます。
次にDynamic Boneをインポートします。こちらは、Unityのアセットストアで有料販売されているアセットのため、webページで事前に購入しておく必要があります。
購入済みの状態であれば、[Asset Store]のタブを開いてUnity内に表示されるwebページから、Unityにログインすると、[My Asset]の中に購入済みのアセットが並びますので、そこからImportします。
(ちなみに、シヴィーちゃんはDynamic Boneを使っていないようですが、これは後々インポートするDrone Movement with Dynamic Boneのための下準備です。)
CustomPackageと同じで、インポートするファイルの確認画面が出ますので、そのままインポートします。
続いて、シェーダーをインポートします。
シヴィーちゃんは、ユニティちゃんトゥーンシェーダー2.0を使っているようなので、ダウンロードしたzipを解凍し、そのなかから「UTS2_ShaderOnly_v2.0.7_Release.unitypackage」を選んで、インポートします。
3Dモデルのインポート
下準備が終わったので、続いて3Dモデルをインポートします。
拾い部屋さんのシヴィーちゃんをダウンロードし、zip解凍した上で、Import Packageから、シヴィーちゃんのフォルダの中にある「2A7VVVVproto_191123.unitypackage」をインポートします。
Assetsにシヴィーちゃんがインポートされたので、インポートしたシヴィーちゃんのfbxファイル(2A7_VVVVproto_191107VRC)をHierarchyの直下に放り込みます。
この時、もし下準備でシェーダーのインポートをしていないと、キャラクターのマテリアルが未設定の状態になり、単色で表示されます。インポートする順番を間違えないようにしましょう。
続いて、アバターにVRChatで使うための設定を行います。
Hierarchyの2A7_VVVVproto_191107VRCを選択し、[Add Component]から[VRC_Avater Descriptor]を選んで追加します。
この選択肢が出てこない場合は、VRC SDKのインポートに失敗しています。
VRC_Avater DescriptorからViewer Pointの設定と、Defoault Animationの設定を行います。
とりあえず、Viewer Pointは、X=0,Y=1.15,Z=0.08にしてみました。
SceneをWireFrame表示にすると視点の位置が表示されます。
Defoault Animationは、女の子アバターなので、Famaleです。
ここまで出来れば、とりあえず、シヴィーちゃん単体でのアップロードが可能な状態になっています。
浮遊するアバター(Drone)を設置する
ここからサポートキャラのアバターを設置したいと思います。
まずは、Drone Movement with Dynamic Boneをダウンロードして、zipを解凍し、「DroneMovementWithDynamicBone0.2.0.unitypackage」をAssetsにインポートします。
続いて、インポートしたDroneMovementWithDBの中からRuntime->Prefabs->DroneCosDelayMovementを選択し、Hierarchyのアバター(2A7_VVVVproto_191107VRC)の中にドラッグ&ドロップします。
続いて、浮遊させたいロボット(アバター)のFBXとメッシュの入ったフォルダをまるごとAssetsの中にドラッグ&ドロップします。
(既にアバターを作っていて、unitypackageがある場合は、インポートしても構いませんが、浮遊するアバターにVRC SDKの設定(VRC_Avater Descriptor)が入っている場合は、VRC_Avater Descriptorが2つになって衝突しますので、removeしておいてください。)
浮遊するロボット(アバター)のFBXを選択して、RigをアニメーションタイプをHumanoidにして、Applyしてください。Configueの設定はしなくても良いようです。
FBXを、Hierarchy内の、DroneCosDelayMovement->DlayMovement->Targetの中にドラッグ&ドロップします。
すると、足元(原点)にアバターが出現します。
浮かべたい位置に調整します。
DelayMovementをクリックし、Sceneに出現した三軸の矢印を操作して、デフォルト位置を設定します。
次に、このアバターが、メインのアバターのどの座標に追従するか設定しますHierarchyのDroneCosDelayMovementを選択し、Add ComponentからPosition Constraintを選択、追加します。
Position ConstraintのSouceのところの「+」ボタンを押し、そこに、メインアバターのArmatureから「Chest」をドラッグ&ドロップします。
Activateをクリックし、ドローンの追従が設定できました。
ドローンの設定は、ここまでです。
ただ、このままアップロードすると、サポートキャラクターのアバターは常にTポーズのまま浮遊しています。
動かないオブジェクトならこれでもOKです。
メインアバターに連動して、浮遊アバターを動かす
主アバターの動きを空中浮遊するアバターに追従させます。
ちなみに、こちらの設定は、NazellさんのVRChat 初心者向けUnity備忘録Ver.1.0.1を参考にさせていただきました。
まず方針として、空中で足をバタバタさせるのも変なので、上半身だけを主アバターと子アバターで同期させたいと思います。
関節の同期には、[Rotation constraint]という設定を行います。
ここからはすごく地道な作業です。
まずは、メインアバターの[Neck]と浮遊アバターの[Neck]を同期します。
浮遊するアバターのArmatureからNeckを選び、Add Componentから、[Rotation constraint]を追加します。
[IsActive]にチェックを入れ、sourceの「+」をクリックし、メインアバターの[Neck]をドラッグ&ドロップします。
これで、[Neck]は完了です。
続いて[Head]、[Left Shoulder]…という具合に同期させたい関節を、同じ要領すべて設定します。
ちなみに、このロボットアバターには指がないため[hand]まで設定したら、指は設定しません。
5本指があるアバターであれば、全部設定して下さい。本当に大変な単純作業です(^^;A
ちなみに、controlキーを押しながら関節をまとめて選んで、一括して[Rotation constraint]を追加するとちょっとだけ作業は楽になります。
全部設定し終えたら、完成です!
あとは、いつも通りアップロードしましょう。
おそらくこんな感じに動くはずです。
さて、ホビロボVRC勢なみなさん、これでVRC内で自作ロボットアバターを連れて歩きませんか!?
…しかし、VRChat奥が深いというか、まだまだ出来ることのほんの一部しか触れていないようです。
VRChatはじめたばかりの自分の忘備録として、こちらの記事を書きましたが、もっと効率的な方法とか、面白いギミックとかあったら教えてむしろ欲しいです。
ゆくゆくは、ロボットの変形もやりたいですし、あ、そういえばパーティクルに関してはまだ全然触っていません(^^;A
また、面白いものを見つけたら記事にしたいと思います。
そして、VRChat内でいろいろ教えてくれた皆さん、ありがとうございます。
Quest対応について
ちなみにQuest対応についてですが、Dynamic Boneを使っているのでPCと同じように浮遊させることは出来ませんが、Rotation constraintを使って、定位置で空中で同期動作させることだけは出来そうです。
Quest対応に関して、Dynamic Boneはもちろんですが、Rotation constraintもQuest非対応でした。
とりあえず、固定で浮かべておこうか…。
(2021/01/11 訂正)
参考にさせていただいたサイトや動画
- ワニでもできる!モデリングforVRChat
https://www.youtube.com/watch?v=Xg4AXYuzEqA - VRChat 初心者向けUnity備忘録Ver.1.0.1
https://booth.pm/ja/items/2203578 - Drone Movement with Dynamic Bone
https://booth.pm/ja/items/2026750 - Unity/VRChatにロボット系3Dモデルをインポートして動かす全行程
https://qiita.com/Ninagawa_Izumi/items/974c047fdd6327621b3a