独自modelへの適用
Mesh channel
SabaProps/Soft Surfaceは次を前提にします。
- local +Yが押される表面の外向き法線
COLOR.r: 変形mask。0は固定、1は完全に変形COLOR.g: ambient occlusion係数。0で暗く、1で変化なし- 上面に十分なsubdivisionがある
generatorのrounded boxは端部のCOLOR.rを0へ落とします。独自Meshでもside/縫い目と共有する境界を固定し、変形面と非変形面の亀裂を防いでください。
Component構成
- MeshRendererへ
SabaProps/Soft Surfaceを設定する - 同じGameObjectにBox型
VRCContactReceiverを追加し、上端を見た目の表面から約12 mmにする - Collision Tagsへ
Head、Torso、Hand、Foot、必要ならFingerを設定する - 同じGameObjectに
SoftSurfaceContactControllerをUdonSharp componentとして追加する targetRenderer、surfaceTransform、surfacePlaneYを設定する
World ContactのeventはReceiverと同じGameObject上のUdonBehaviourに送られます。Receiverをchildへ分ける場合はcontrollerも同じchildへ置いてください。
World objectの接触開始をCollider形状に合わせる場合は、対象面のProbe CollidersへSphereCollider/CapsuleCollider/BoxColliderを登録します。Probe Kindsを同じ順序で0(指)/1(棒)/2(板)に設定します。最大8slotのうち登録数分を予約し、残りをavatar用に使用します。Senderは不要です。
棒/板のfootprint寸法はRod Half Length / RadiusまたはPlate Half Length / Widthで設定します。底面距離はColliderから計算しますが、footprintは軽量な形状近似です。棒はY軸のCapsuleColliderを表面と平行に置く使い方、板はBoxColliderを平行に置く使い方を想定します。負のscale、shear、MeshColliderは対応範囲外です。
Avatarと同じContact経路を使用するworld objectにはSoftProbeFinger/SoftProbeRod/SoftProbePlateのSender tagを設定できます。ただし、この経路では初回接触点の追跡による近似となり、登録Colliderと同等の接触精度にはなりません。
Collider
変形shaderはColliderを変更しません。歩行面では安定性を優先してrest poseの上面にBoxColliderを残します。寝転びanimationを使用するstationでは、avatar poseと見た目の沈み込みが一致するようCollider上面を2~4 cm下げる調整が可能です。
立位荷重を使う面は、非Triggerの支持Colliderとcontrollerを同じGameObjectへ配置し、Player Standing Loadを有効にします。足元の判定範囲はSurface Half Size、高さはSurface Plane Yです。足元と未変形面の高さの差が35 mmを超えると立位として扱いません。