メインコンテンツまでスキップ

アバタークリエイト機能について

ここではルーガン族アバターで採用されている、Avatar Creatorシステムについて解説します。

概要​

AvatarCreatorはUnityエディタ上でVRChat用のアバターをゲームのキャラクリエイト機能のような感覚で組み立てる機能を自分のアバターに対して実装することができる機能です。

AvatarCreatorは以下のアバター編集機能を備えます

  • 部位に応じた色変更機能 (Custom Layered Texture)
  • 服などのパーツ表示に連動した肌などのメッシュ非表示機能 (Layered Alpha Texture)
  • BlendShapeの調整と書き出し時のベイク機能
  • シェーダーパラメーターの動的変更
  • AnimationClipによる詳細なパラメータ制御
  • 設定のプリセット化
  • エクスポート時のオブジェクト結合・最適化

AvatarCreatorにはAvatarCreatorSettingというコンポーネントとAvatarCreatorPartsSettingというコンポーネントの2種類のコンポーネントがあり、それぞれ以下のような役割を持ちます。

  • AvatarCreatorSetting: アバターのベース設定を定義するコンポーネントです。アバターのルートオブジェクトにアタッチします。

  • AvatarCreatorPartsSetting: AvatarCreatorSettingが適用されたアバターの子オブジェクトにアタッチし、追加のパーツ(衣装、アクセサリーなど)に関する設定を定義するコンポーネントです。

AvatarCreatorSettingが設定されたアバターがシーンに存在し、Unityの再生モードを開始すると、AvatarCreatorSettingは自身および子オブジェクトにアタッチされたAvatarCreatorPartsSettingを収集し、それらの設定に基づいてキャラクリエイト機能を構築します。この構造により、ベースアバターの設定を直接編集することなく、アドオン形式で衣装やパーツのカスタマイズ項目を追加できます。

Skinned Mesh Renderer Combine Info​

Skinned Mesh Renderer Comobine InfoはいくつかのメッシュをGroup Tagに合わせて出力時に結合する機能です。 Avatar Creator SettingではSkinned Mesh Renderer Comobine Info Listにメッシュを登録することでこの後の設定項目でスキンドメッシュとマテリアルが認識されます。

Avatar Creator Parts SettingではSkinned Mesh Parts Info ListにSkinned Mesh Parts Infoというコンポーネントを設定することでメッシュを登録します。 Skinned Mesh Parts InfoではCopy Root Boneにベースにおけるルートボーンに当たるオブジェクトを設定します。

GroupTagは何も指定しない場合はスキンドメッシュはBodyという名前のオブジェクトで1メッシュとしてまとめられます。 それ以外の場合、同じ名前のオブジェクトで結合されます。

共通パラメータ(Shared Parameter)​

共通パラメータは、キャラクリエイト機能でユーザーが変更可能なパラメータを表します。

以下のタイプが存在します。

  • Float: 0から1の範囲の数値。ブレンドシェイプのウェイトやシェーダーの数値パラメータなどに使用します。
  • Color: 色情報。マテリアルの色などに使用します。
  • Texture: テクスチャアセット。マテリアルのテクスチャスロットなどに使用します。
  • GameObjectToggle: ゲームオブジェクトの表示・非表示を切り替えます。
  • Preset: 後述するプリセット機能のためのパラメータです。

AvatarCreatorPartsSettingで定義されたSharedParameterは、AvatarCreatorSetting(ベース設定)に同名かつ同タイプのSharedParameterが存在する場合、AvatarCreatorSettingのものが優先的に使用されます(実質的にベース設定のパラメータを参照する形になります)。AvatarCreatorSettingに存在しないパラメータのみ、AvatarCreatorPartsSetting独自のものとして扱われます。パーツ間で直接パラメータが統合・競合解決されることはありません。

項目説明
Parameter Nameパラメータ名
Hideユーザーからは非表示にするか
Typeパラメータータイプ
Valueパラメータータイプに応じた初期値

Layered Alpha Texture​

Layered Alpha Textureは、特定のパーツ(服など)が表示される際に、その内側にあるメッシュ(肌など)を非表示にするためのアルファマスクを動的に生成する機能です。

GameObjectToggleタイプの共通パラメータに連動し、対応するパーツが表示状態のときに、指定されたアルファテクスチャを合成していきます。例えば、複数の衣装パーツがあり、それぞれが肌を隠すためのアルファマスクを持つ場合、現在表示されている衣装パーツに対応するアルファマスクのみが合成された最終的なアルファマスクテクスチャが生成されます。 この生成されたLayered Alpha Textureは、Custom Layered TextureのAlpha Maskスロットに設定することで、メッシュの貫通を防ぐ効果が得られます。

項目説明
Combined Texture ID結合される対象とアルファテクスチャ。共通パラメーターから選択されます
Toggle Object IDここで設定されたGameObjectToggleパラメータが有効な時に合成されます
Source Texture ID結合するマスクテクスチャ。共有パラメーターから選択されます

Custom Layered Texture​

Custom Layered Textureは、テクスチャの部分的な色変えを実現する機能です。シェーダーの機能に依存せず、実行時にカラー画像を直接生成するため、様々なシェーダーと組み合わせて使用できます。

処理の概要は以下の通りです。

  1. BaseColor: 基本となる色を設定します。
  2. MaskTexture適用: MaskテクスチャのR, G, B各チャンネルに対応する領域に、それぞれ指定された色(MainColor, SubColor, AccentColor)を重ねます。
  3. ShadowTexture合成: Shadowテクスチャを合成します。
  4. HighlightTexture合成: HighlightテクスチャをScreenなどの方法で合成します。
  5. DetailTexture合成: Detailテクスチャを乗算などの方法で合成します。
  6. AlphaMaskTexture適用: (オプション) Layered Alpha Texture機能で生成されたアルファマスクを適用します。

ShadowTextureの合成手法​

シャドウはシャドウテクスチャの値に応じてHSV値の明度を50%減少させるという特殊な処理になっています。 この合成方法を使用することで、色の統一感を保ちつつ自然な陰影がシャドウマスクのみでできる仕組みになっています。

陰影ブレンド機能​

Shadow TextureとHighlight TextureのみBlend Paramを使用してRチャンネルとGチャンネル間を線形補間した合成値を扱うことができます。この機能は体型変化による陰影やハイライトの変化を想定したものです。

生成されたCustom Layered Textureは、任意のマテリアルの任意のテクスチャスロットに設定できます。これにより、体色や服の一部分だけの色変更などを柔軟に実現できます。

項目説明
Texture NameこのCustom Layered Textureの名前(パーツ内で一意になるようにしてください。)
Layer Mask Tex Param色分けのマスクテクスチャとして使用するテクスチャ
Shadow Tex Param陰影用の合成テクスチャ
Highlight Tex Paramハイライト用のスクリーン合成テクスチャ
Detail Tex Param色分けマスクによる影響を受けないアルファ合成テクスチャ
Alpha Mask TexParam画像のアルファ値を決定するマスクテクスチャ。衣装などを着せたときに消える対象となるLayerd Alpha Textureを指定するのに使います
Base Color Param色分けマスクで黒い部分に当たる色パラメータ
Main Color Param色分けマスクでRチャンネルに当たる色パラメータ
Sub Color Param色分けマスクでGチャンネルに当たる色パラメータ
Accent Color Param色分けマスクでBチャンネルに当たる色パラメータ
Blend Param陰影ブレンド機能のためのブレンド用Floatパラメータ
Is Standard Multipyシャドウテクスチャの特殊な合成処理を使用せずに通常の乗算合成をする
Resolutionテクスチャ解像度(512,1024,2048の3種類)

Custom Layered TextureはCustom Layered Texture Slot Listで特定のマテリアルのテクスチャスロットに設定することができます

項目説明
Materialテクスチャを設定するマテリアル
Shader Parameterテクスチャを設定するシェーダーパラメータ
Custom Texture設定するCustom Layered Texture

Preset​

プリセット機能は、複数の共通パラメータの状態を一つのセットとして保存し、一括で切り替えることができる機能です。 プリセットの切り替えは、Presetタイプの共通パラメータの値を変更することで行われます。例えば、ルーガン族ではBodyTypeのマスクを変更する為に使っています。

項目説明
Shared Preset Parameter ID設定するプリセットパラメータ
Preset Nameプリセットの項目の名前
Shared Parameter ID変更する共通パラメーター

Custom Shader Parameter​

Custom Shader Parameterは、共通パラメータ(Float, Color, Textureタイプ)の値を、指定したマテリアルの特定のシェーダーパラメータにリアルタイムで適用する機能です。 これにより、シェーダーで公開されている様々な値をキャラクリエイト画面から動的に制御できます。

項目説明
Shader Parameter Name変更するシェーダーパラメータ
Shared Parameter ID共有パラメーター
Material ID変更対象のマテリアルID

BlendShape Parameter​

BlendShapeParameterは、共通パラメータ(Floatタイプ)によってブレンドシェイプのウェイトを制御する機能です。

AvatarCreatorでは、アバターの書き出し処理(メッシュ結合時など)において、特定の接頭辞を持つブレンドシェイプに対して特殊な処理を行います。

  • defShape.: この接頭辞を持つブレンドシェイプは、書き出し時の設定値に基づいてメッシュに変形が焼き込まれ(ベイクされ)、書き出し後のメッシュからはブレンドシェイプ自体が削除されます。
  • eyeDef.: 同様にメッシュに変形がベイクされ、ブレンドシェイプは削除されます。ただし、eye. eye.l. eye.r. といった接頭辞を持つ他の表情用ブレンドシェイプの変形結果に影響を与えないように、eyeDef.の変形が適用されます。これは、デフォルトの表情(例:半目など)をeyeDef.で作成しベイクした際に、他の表情ブレンドシェイプ(例:笑顔、怒り顔)が破綻しないようにするための仕組みです。
  • eye. eye.l. eye.r.: これらの接頭辞は、メッシュ書き出し時にブレンドシェイプ名から削除されます。

これらのブレンドシェイプに関する処理は、主にアバターのエクスポート時に行われるメッシュ結合処理の仕様に基づいています。

項目説明
Shared Parameter ID共有パラメーター
Skinned Mesh IDシェイプキーがあるスキンドメッシュ
Blend Shape ID変更すブレンドシェイプ

Animation Clip Parameter​

AnimationClipParameterは、共通パラメータ(Floatタイプ)の値をアニメーションクリップの再生時間にマッピングし、その時点でのアニメーション結果をアバターに適用する機能です。 AnimationClipを使用することで、CustomShaderParameterやBlendShapeParameterでは設定できないような、より複雑で非線形な変化(オブジェクトのトランスフォーム変更、コンポーネントのプロパティ変更など)を実現できます。共通パラメータのFloat値(0~1)が、AnimationClipの正規化された時間(0~1)に対応します。

項目説明
Shared Parameter ID共有パラメーター
Root Objectアニメーションのルート階層オブジェクト
Clipアニメーションクリップ