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

接触マスク

二つのマスクの役割​

マスクで接触変形に反応させない範囲や、反応を弱める範囲を指定します。マスクを指定しない場合は、全体が接触に反応します。

マスク他人からの接触自分からの接触
共通の接触マスク適用する適用する
自分用の接触マスク適用しない共通マスクに追加で適用する

どちらか一方のマスクで反応しない範囲に指定すると、その部分は自分からの接触に反応しません。自分の手の周囲を自己接触には反応させず、他人に触られたときには反応させたい場合は、その部分を自分用マスクで反応しない範囲に指定してください。

VRChatでは通常、手や指にContact Senderが自動設定されます。自分用ReceiverがこのSenderを受け取ると、手指自身のファーまで反応してしまうことがあります。手マスクはこの反応を防ぎたいときに使います。手指のファーを自分用マスクで除外しても、その手で顔や胴体などのマスクされていない部分に触れることはできます。

マスク画像はメインテクスチャと同じ位置合わせでアバターに適用されます。メインテクスチャの拡縮やオフセットを変えると、マスクが効く位置も変わります。

球体からマスクを生成する​

自動セットアップで手マスクを作った場合、生成されたアバターのContactFur Setup > Body Mask 0に生成用コンポーネントがあります。調整するときはこのコンポーネントを選択します。

手動で追加する場合は次の手順で進めます。

  1. アバター内のGameObjectに、Add Component > Contact Fur > Volume Mask Generatorを追加します。
  2. 「ファーのRenderer」と「マテリアル」を指定します。
  3. 「マスクスロット」で「自分」または「共通」を選びます。
  4. 「マスク領域」に球体を追加し、「基準Transform」に手のボーンなどを指定します。
  5. 中心・半径・ぼかしを調整し、「マスクを生成して割り当て」を押します。
  6. PNGの保存先を選びます。

もふろうさんの左右の手を覆うように球体を調整したSceneビュー

もふろうさんの具体的な調整値を確認するには、セットアップチュートリアルの「手の自己接触をマスクする」を参照してください。

項目使い方
ファーのRenderer対象のMesh Renderer / Skinned Mesh Renderer
マテリアル対象Rendererのマテリアルスロット
マスクスロット自分用か共通かを選ぶ
解像度256・512・1024・2048・4096から選ぶ。高いほど細かい範囲を指定できる
基準Transform球体を追従させる手のボーンなど。省略すると、この設定を追加したGameObjectを基準にする
中心オフセット基準Transformから球体の中心をずらす位置。基準Transformの向きに沿って調整する
マスク領域の半径 (m)接触に反応させない球体の範囲。モデルの拡大縮小にかかわらずメートル単位で指定する
ぼかし幅 (m)球体の外側で、反応しない状態から通常の反応へ徐々に戻る幅。0なら明確な境界

球体は最大64個使えます。いずれかの球体の範囲に入る部分は接触に反応しなくなります。半径0.06 m・ぼかし幅0.03 mなら、中心から0.06 mまでは反応せず、0.06〜0.09 mで徐々に反応が強まり、それより外は通常どおり反応します。

姿勢や球体を変えたら再生成する​

接触に反応させない範囲は、生成時点のモデルの姿勢と球体の位置で決まります。生成後に姿勢や球体を変えても、その範囲は自動で変わりません。位置や大きさを調整した後は、もう一度生成してください。

同じ割り当て先に生成画像が残っていれば、そのPNGを更新します。他のマスクスロットの画像は変更しません。

生成画像は2D・リニア(sRGB無効)・Mip Map無効・Read/Write無効で保存されます。再生成時もこの設定が適用されます。

表現上の制約​

  • 同じテクスチャ領域を使う部位(UVが重なる部位)には、同じマスクが効きます。左右の手などが該当する場合、片方だけ接触に反応しないようにすることはできません。
  • 細かいマスク模様には十分な画像解像度が必要です。
  • 接触変形は頂点数にも左右されます。マスクの解像度だけを上げても、頂点の少ないメッシュでは細かい変形を表しにくいことがあります。

マスク生成用コンポーネントはアバタービルド時に除去されます。生成したPNGとマテリアルへの割り当ては残り、アップロード後も有効です。手ボーンやアバター本体へEditorOnlyタグを付ける必要はありません。