コンテンツにスキップ

SPS1 の詳細

これは SPS1(0.1.x 系)のしくみです。SPS2(0.2.x 系、SPS for NDMF が実装している方式)との違いは SPS1 と SPS2 を参照してください。実用的な設定項目だけを知りたい場合は、このページを読む必要はありません。

Socket の位置を伝える方法: 点光源

Section titled “Socket の位置を伝える方法: 点光源”

SPS1 は、Socket の位置・向き・種類(Hole / Ring など)を、Unity の点光源(人の目には見えない、色を持たない光源)を使って Plug 側のシェーダーへ伝えます。Socket が有効になると、その場所に小さな点光源が生成され、Plug のシェーダーはその光を読み取ることで「近くにどの種類の Socket がどの向きにあるか」を知り、メッシュをその方向へ曲げます。

同時に有効化できる Socket の数に上限がある

Section titled “同時に有効化できる Socket の数に上限がある”

Unity の点光源には、1つのメッシュが同時に認識できる光源は最大4つまでという仕様上の制約があります。SPS1 の Socket 1つはこのうち2つを使うため、近くに Socket が複数(あるいは現実の照明などの光源が多数)あると、Plug 側のシェーダーから認識できなくなる Socket が出てきます。

この制約に対応するため、SPS1 では Socket にメニュートグルを持つものが2個以上ある場合、既定で排他制御が自動的に働きます。つまり、どれか1つの Socket をメニューで ON にすると、他の Socket は自動的に OFF になります。

  • この排他制御を外したい場合は Dual Mode という設定があり、有効にすると同時に2個まで ON にできます。ただし、他の Socket との組み合わせによる誤動作のリスクが高くなるため、インスペクター上に強い警告文が表示されます。
  • 自分にしか見えない Stealth Mode が ON の間は、この排他制御は働きません。

SPS1 を正しく動作させるには、アバター側の VRChat 設定が影響します。Plug / Socket のインスペクターは、次のような設定が適切でない場合に警告・エラーを表示します。

  • Avatar Self Interact が ON になっていない場合はエラー(自分自身との組み合わせが動作しません)
  • Avatar Allowed to Interact が Everyone になっていない場合は警告(他のプレイヤーとの組み合わせに影響する可能性があります)
  • Pixel Light Count が High になっていない場合は警告(点光源の認識に影響します。上記の「同時に有効化できる Socket の数」とも関係します)

SPS1 は位置の伝達を点光源で行いますが、触覚通知や補助的な検出には VRChat Contacts も使います(P = Plug の数、S = Socket の数。Sender は発信、Receiver は受信)。

用途 種別 Plug 側 Socket 側 役割 有効になる条件
位置ビーコン Sender 4×P 2×S 「ここに Plug/Socket がある」と発信する。触覚通知・Depth Animations の Receiver が読む Plug は常時/Socket はメニュー ON 時
触覚通知(OGB) Receiver 8×P (4〜11)×S 位置ビーコンを検知し、触覚アプリに接触・挿入を伝える 常時(SPS2 のようなゲートが無い)
近くの Socket を探す(SPS Plus) Receiver 4×P 近くに Socket があるか検知(SPS1 のみ。SPS2 で廃止) 常時(半径3mと大きい)
スケール補正 Sender / Receiver 2×P アバターのスケールを測り挿入の計算を補正する ほぼ常時
Depth Animations Receiver (1〜2)×P (3〜6)×S 挿入の深さを測り、アニメを動かす Depth Animations を設定したときだけ
Auto 選択 Receiver Auto 対象の Socket ごとに1 複数 Socket から最寄りを自動選択 Auto 対象 Socket が2個以上

Sender と Receiver の関係は SPS2 と同じで、位置を発信する Sender を、反対側のコンポーネント(Plug の Sender ↔ Socket の Receiver、およびその逆。自分・相手どちらのアバターにもある)の Receiver が受信します。詳しくは SPS2 の詳細 — 使用する Contacts を参照してください。

実際に有効になっている Contacts の数

Section titled “実際に有効になっている Contacts の数”

SPS1 には SPS2 のような触覚 Receiver のゲート(OSC 触覚アプリ起動時のみ有効化)が無いため、Plug 側の Contacts(18個)は常時有効です。この数の多さと、SPS Plus の半径3mという大きさが、他アバターとの干渉のしやすさにつながります。

通常のプレイ(OSC アプリなし)で実際に有効な Contacts の数は、Plug の数と、メニューで ON にしている Socket の数で決まります(OFF の Socket は 0)。

世代 実際に有効な数(おおよそ)
SPS1 18 ×(Plug 数)+ 6〜13 ×(ON の Socket 数)
SPS2 4 ×(Plug 数)+ 2 ×(ON の Socket 数)

たとえば Plug 1・ON の Socket 1 なら、SPS1 は約 24〜31 個、SPS2 は約 6 個です。SPS1 の「SPS Plus」とスケール補正(Plug 側の計6個)は、SPS2 では検出を共有テクスチャ方式に移したため不要になっています。

SPS2 は Socket の位置伝達に点光源を使わないため、このページで説明したような「同時に有効化できる Socket の数の実質的な上限」や「VRChat のライト関連設定への依存」がありません。詳しくは SPS2 の詳細 を参照してください。