SabaProps

性能設計

1変形面あたりのcost

  • World Contact Receiver: 1
  • Udon behaviour: 1
  • 動的Material instance: 1
  • 接触slot: 8
  • 接触中のMaterial write: 位置とfootprintのVector4を各8個、既定30 Hz
  • shader: vertexごとに最大8接触点。pixel側は通常のopaque surface shaderと織り目計算のみ
  • 登録world probe: 最大8 Colliderの支持点を既定30 Hzで計算。全sceneのCollider探索はしない
  • ローカル立位補助: 接地状態・面内座標・高さを満たす場合だけ、下向きRaycastを1回実行する

VRChatはworld内のactive Contact Sender/Receiver合計に1024個の上限を設けています。Sofaは6 Receiverを使用するため、同じSofaを100台置くと600 Receiverになります。通常の家具配置では上限よりshaderのvertex costが先に問題になります。

配置時の推奨

  • 1 room内では変形面を32~48個程度までに抑える
  • 遠距離から見える家具にはLODGroupを追加し、低LODでは非変形mesh/Materialを使用する
  • 触れられない展示物ではReceiverとUdonBehaviourを無効化し、非変形Materialへ置き換える
  • Update Rateは通常30 Hz、柔らかく復元の遅い物では20 Hzまで下げられる
  • Contact Radiusを必要以上に大きくしない。半径自体はvertex演算回数を変えないが、同時に視認される変形範囲が増える

同期

接触slotをUdonSyncedにしないでください。8点を継続同期するとbandwidthとownership処理が増えます。World Contactsは各clientでavatar Senderを評価できるため、視覚効果はlocal reconstructionとします。