0から始めるVket入稿 基礎知識編
Creator Companion (VCC)
VRChat公式から出されたCreator Companion
(VCC)は、VRChatでアバターやワールドのアップロードに必要なソフトウェアを導入から管理まで一括で行ってくれるサポートソフトウェアです。
UnityやUnityHub等必要なソフトウェアを一括で導入してくれるほか、VRChatがアップデートがされた際に更新が必要なUnityやSDKのバージョンの更新もCreator Companionで行うことが可能となっております。
※過去に作成したプロジェクト(バックアップを取りましょう)を簡単に現行バージョンに変換して開く機能もついています。
Creator Companionの詳細については公式のドキュメントを参照してください。
Unity
Unity(ユニティ)はゲーム等のアプリを開発するために使われているゲームエンジンです。
VRChatにアバターやワールドをアップロードするのにも使われています。
Vketに入稿するためにはUnityの力を借りる必要があります。
Vketの入稿に使用するUnityのバージョンは2019.4.31f1です。VCCを使ってインストールされるのがこのバージョンです。
Unityのインストールや入稿の手順については入稿ガイドを参照してください。
Unityプロジェクト
Unityを使う際は必ずUnityプロジェクトを作成します。
Unityプロジェクトとは、Unityで取り扱うファイルを全て格納しているフォルダーです。
VRChatのためにUnityを使う場合は、以下の2パターンに分かれます。
1. アバターのアップロードに使用する
アバターのモデルやテクスチャ、シェーダー、アニメーション等をフォルダーに格納します。
アバターをアップロードしたいときは、VCCの「Official Templates」の中から「Avatar」を選んでください。
2. ワールドのアップロードに使用する
ワールドのモデルやテクスチャ、シェーダー、Udonギミック等をフォルダーに格納します。
ワールドをアップロードしたいときは、VCCの「Official Templates」の中から「World」または「UdonSharp」を選んでください。
各テンプレートの詳細については公式ドキュメントを参照してください。
Vketの入稿は2の「ワールドのアップロードに使用する」に該当し、「UdonSharp」テンプレートを選ぶ必要があります。また、通常のワールドアップロードと異なり、入稿のための専用ツール「VketTools」をインポートして使います。
このため、普段アバターやワールドをアップロードするのに使用しているUnityプロジェクトとは別のUnityプロジェクトを作って使う必要があります。
Scene
Unityを使用してアバターやワールドをアップロードしたり、Vketに入稿したりする際には、Scene(シーン)と呼ばれる作業場所のようなものを作成します。
アバターをアップロードする場合は、Scene内にアバターを複数配置し、どのアバターをアップロードするかVRCSDKのウィンドウ内で選択してアップロードします。
※1個だけアバターを配置している場合は選択せずそのアバターがアップロードされます。
一方、ワールドをアップロードする場合、Scene内に配置された物全体が1つのワールドとしてアップロードされます。
Vketの入稿では専用の入稿用Sceneに出展者のみなさんのブースを配置してもらう形になっています。「入稿」ボタンを押すとSceneの中の[出展者ID]オブジェクトとAssets/[出展者ID]フォルダの中身だけがVket運営に送られ、運営スタッフ側で改めて入稿物をSceneに並べて、1つのワールドとしてVRChatにアップロードします。
入稿用Sceneには以下のような物が最初から配置されています。
- 入稿ツールが入稿ルールチェックを行うのに必要なライト等
- VRChatを起動してローカルテストを行うために必要最低限な床等
- 入稿ルールで定められているScene内のHierarchy構造
※Hierarchyについては後で説明しています。
Unityプロジェクトへのファイルインポート
Unityを使用してアバターやワールドのアップロード、Vketへの入稿を行う際には、必ずUnityプロジェクトへモデルやテクスチャ等のファイルをインポートする必要があります。
Unityの画面下部にはUnityプロジェクト内のファイルを表示する「Project」ビューと呼ばれる部分があるので、ここにファイルをドラッグアンドドロップしてインポートしましょう。
Unityパッケージ
Unityパッケージは、モデルやテクスチャ等の複数のファイルをUnityプロジェクトへインポートできる形でまとめた物です。ファイル名に .unitypackage の拡張子が付いています。
※正式には「アセットパッケージ」という名前でUnityマニュアル内で説明されています。
アセットパッケージ - Unityマニュアル
Vketへの入稿を行う際には以下のツールをUnityプロジェクトにインポートする必要がありますが、このツールはUnityパッケージの形で配布されています。
- VketTools (入稿ツール)
VRCSDK
Unityを使用してアバターやワールドのアップロードを行う際には、VRCSDKと呼ばれるツールのUnityパッケージをUnityプロジェクトにインポートする必要があります。
アバターをアップロードする場合とワールドをアップロードをする場合に使用するVRCSDKは別々に分かれています。また、これら2種類のVRCSDKは1つのUnityプロジェクトに両方インポートすることはできないため、アバター用のUnityプロジェクトとワールド用のUnityプロジェクトは分ける必要があります。
Vketへの入稿ではVRCSDKはVCCからインポートします。
VketTools (入稿ツール)
VketTools(入稿ツール)は、出展者のみなさんがブースを入稿するために使用するツールです。
以下のような機能があり、入稿には必ず必要です。
- Unity上でVketアカウントにログインする
- 空の入稿用Sceneを作成する
- ブースが入稿ルールに従っているかどうかのチェックを行う
- 入稿を行う
アセット
Unityプロジェクト内にインポートしたモデルやテクスチャ等のファイルをアセットと呼ぶことがあります。
アセットはUnityプロジェクトのフォルダー構造の中の「Assets」という名前のフォルダー内に格納されます。Unityの画面下部の「Project」ビューにはAssetsフォルダーが最初に表示されています。
VketTools等もAssetsフォルダー内にインポートされるアセットの一種になっています。
Hierarchy
Hierarchy(ヒエラルキー)とは、Scene内にブース等を配置する際の階層構造のことを指します。
Unityの画面内では、左に「Hierarchy」ビューがあり、この中には現在開いているSceneのHierarchyが表示されています。
HierarchyはWindowsのフォルダーと似たような概念で、「Hierarchy」ビューでは階層構造が▼マークで表示されています。
Vketへの入稿ではScene内に特定の階層構造を作る必要があり、入稿ルールでも説明されています。詳しくは、後述のStaticとDynamicの説明を参照してください。
ゲームオブジェクトとコンポーネント
Hierarchy上に配置するモデル等の「物」を、Unityでは「ゲームオブジェクト」と呼びます。
Hierarchy上に表示される物は全てゲームオブジェクトです。ゲームオブジェクトはモデルやライト、コライダーといった物の他にも、単に階層を作るためのフォルダーのような物も同様にゲームオブジェクトです。
ゲームオブジェクトがどのような役割を持っているかは、そのゲームオブジェクトが何の「コンポーネント」を持っているかによって変わります。コンポーネントは、Hierarchyビューでゲームオブジェクトを選択した際に画面右側の「Inspector」ビューに表示されます。
例えば、fbxファイルをHierarchyにドラッグアンドドロップして作成したゲームオブジェクトには「Mesh Filter」や「Mesh Renderer」コンポーネントが自動的に作成されます。アバターモデルのようにボーン構造を持つモデルの場合は代わりに「Skinned Mesh Renderer」コンポーネントが作成されます。
どのような役割のゲームオブジェクトにどのようなコンポーネントが必要なのかはある程度決まっており、Hierarchy上で右クリックすることでCubeやLight等の役割ごとに必要なコンポーネントが付いたゲームオブジェクトを作成することができます。「Create Empty」ではコンポーネントが何もない空の「GameObject」が作成されます。
※位置座標を示すTransformコンポーネントだけは作成されます。
「Inspector」ビューにはコンポーネント内の様々な設定値が表示されていて、これらを変更することでコンポーネントの特性を変化させることができます。
例えば、Transformコンポーネントでは3次元空間内での位置、回転角度、拡大縮小率が表示されており、数値を変更することでこれらを変化させることができます。
また、既に作成済みのゲームオブジェクトにコンポーネントを追加したり削除したりすることも可能です。
マテリアルとシェーダー
Scene内に配置した3Dモデルには、色や質感等の見た目を決めるための「マテリアル」が割り当てられます。
マテリアルにはまず「どのシェーダーを使用するか」という選択が含まれており、選択したシェーダーによってさらにシェーダー毎の細かい設定情報が決められています。
ワールドやブース等の背景モデルでは「Standard」というデフォルトのシェーダーをそのまま使用することが多いですが、アバターの見た目にはあまり向いていません。そのため、ブースの建物にはStandardシェーダーやFilament Standardシェーダーを、そこに配置するアバターペデスタルモデルにはアバター用のシェーダーを、というようにマテリアルを設定することになります。
Vketの入稿ではVketToolsに付属する形でよく使われるシェーダーを「Packages」からインポートすることができます。これらの中から使いたいシェーダーを選ぶと良いでしょう。それ以外のシェーダーを使いたい場合は、別途Unityプロジェクトにインポートして、シェーダーのファイルをAssets/[出展者ID]フォルダに同梱する必要があります。
StaticとDynamic
Unityには、Hierarchyにゲームオブジェクトを配置した時点で
「このゲームオブジェクトは固定されていて動かない」
「このゲームオブジェクトはアニメーションやピックアップ等で動く」
という情報を予め設定しておき、動かないゲームオブジェクトの描画処理を簡略化する等の最適化を行う仕組みがあります。
動かないゲームオブジェクトを「Static」、動くゲームオブジェクトを「Dynamic」と呼びます。
Vketのワールドもこの仕組みを使用してなるべく最適化を行うために、出展者のみなさんにStaticとDynamicを分けて入稿して頂く必要があります。
入稿ルールではHierarchy内の構造が決められており、「Static」という名前のゲームオブジェクト階層以下にStaticのゲームオブジェクトを、「Dynamic」という名前のゲームオブジェクト階層以下にDynamicのゲームオブジェクトを配置するようになっています。
典型的な例では、ブース背景等の動かないモデルをStaticに、アニメーションが設定されていて動くモデルをDynamicに配置します。
また、アバターペデスタルのモデルのようなアバターモデルは、アバター向けシェーダーがStaticを想定していない場合があり、その場合はDynamicにすることで見た目上の問題を回避することがあります(例: UTS2でStaticにするとアウトラインの太さが変わる)。
Prefab
Prefab(プレハブ)は、Hierarchy上に構成したゲームオブジェクト階層の一部分をアセットとして取り出して保存した物です。HierarchyからProjectビューにゲームオブジェクトをドラッグアンドドロップするだけで作成できます。
作成したPrefabは、Hierarchyにドラッグアンドドロップするとドラッグアンドドロップ先にコピーが作成されます。
複数のゲームオブジェクトを組み合わせて作った構造を再利用するために使用することができます。
VRChatでは、PhysBonesやVRC Avatar Descriptorをセットアップ済みのPrefabをHierarchyにドラッグアンドドロップしてアバターをアップロードしたり、ワールドにiwaSync動画プレイヤーのPrefabをドラッグアンドドロップして使ったり、といった場面で登場します。
Udon
UdonはVRChatワールドにギミックを実装する際に使用するプログラミング言語です。
通常、ワールドにギミックを作り込みたい場合はUdonのプログラムを作成する必要がありますが、既に作成済みのプログラムPrefabをHierarchy上にドラッグアンドドロップするだけで使えるようになっている物も多数あります。
Vketへの入稿でも、ブースでよく使うUdonギミックをPrefabとして用意しています。使い方はマニュアルを参照してください。