OGB interoperability and detection geometry
简体中文 | English
OGB/SPS parameters describe approach, entry and touch. Use their geometry and naming rules to choose readings, calibrate a depth or intensity, and connect it to a Sensa output. This reference covers Socket, Plug and independent touch-zone signals with links to the upstream definitions.
Find the actual source and complete path in the parameter list, then choose the depth or vibration template. SPS2 · PenOthersNewRoot / PenOthersNewTip pairs two readings to estimate a depth trend; SPS1 · PenOthers / PenOthersClose combines its depth signal with an effective nearby region. Keep pairs within one source, instance and Self/Others category, and enable the Avatar’s OGB_ENABLED heartbeat when needed.
External OGB paths retain upstream names. Sensa SPS four-anchor tracking and Shader parameters have their own dictionary. The online explorer shows the detection spheres and capsules, with gray profiles to explain relative Socket/Plug placement.
Research is pinned to VRCFury 6bd33f4cb453df816c943a335e47f64e6a37e188, OGB v2.1.30 643aedd493ba21b0c0859ce6e57708fe408ee9c0, and OGB v1.0.0 262164576721f12958409638851808aa662b87c7. Version 1.0.0 already reads PenOthersNewRoot/PenOthersNewTip and PenOthers. The explorer’s SPS1/SPS2 labels identify parameter geometry; use the paths actually published by the Avatar. Old consumer
The explorer was checked against VRCFury 1.1434.0. Its BakeHapticSocketsService.cs, VRCFuryHapticSocketBaker.cs and VRCFuryHapticPlugBaker.cs match the pinned commit above.
The Node OscServices receives OSC/OSCQuery and tracks sources. The shared RuntimeEngine interprets OgbDepth/OgbTouch and routes the result through the same output coordinator. Source identity keeps paired readings attached to one instance; geometry and units follow the upstream definitions below.
Starting dimensions in the explorer
Each parameter uses its upstream generation rule. Plug length, width and the automatic Socket touch region come from Avatar dimensions. The explorer provides an explicit example of those dimensions; adjust the sliders to match your Avatar.
| Scene | VRCFury generation rule | Explorer starting value |
|---|---|---|
| SPS2 · NewRoot / NewTip | Both receiver radii are 1 m; the Plug-root marker radius is 0.01 m | 1 m / 0.01 m |
| SPS1 · PenOthers and Socket Touch | Receiver radius D follows region length; automatic length is 5% of Avatar view height, with Close radius D/2.5 | Example view height 1.60 m → D=0.08 m, Close=0.032 m |
| Plug-side depth, touch and rubbing | Generated from actual Plug length L and radius W | Example L=0.20 m, W=0.03 m |
| Socket-root marker | Radius 0.001 m | 0.001 m |
| Independent Touch Zone | Default radius 0.10 local units, following object scale | 0.10 m at scale 1 |
Sensa SPS four-anchor tracking and Contact direct tracking create their own Contacts: receiver radius 2 in authored local units and target marker radius 0.001, corresponding to 2 m and 1 mm at authored scale 1. They use Sensa/SPS/… and Sensa/Contact/…; see position tracking for their geometry. Native OGB/… parameters retain the VRCFury dimensions above.
Radius and values first
Paths omit /avatar/parameters/. Orf means Socket; Pen means Plug. Their root centres are the origins, with +Z pointing forward in the author's frame. Self/Others filter matching targets on this Avatar or other Avatars.
| Symbol | Meaning here |
|---|---|
| L | Plug world length at generation |
| W | Plug world radius at generation |
| e | min(W, 0.08 m), Plug touch expansion |
| D | Socket touch-zone depth |
| R, r | Actual Receiver and spherical Sender radii |
| H | Complete capsule height, including both hemispheres |
Proximity is a continuous 0–1 value, usually increasing as a target approaches the detection center. Constant reports presence in the effective nearby region: one inside, zero after leaving. Each Proximity Receiver independently selects the matching Sender with the greatest strictly positive Proximity. SDK Beta.3 resolves two values of 1 by choosing the smaller separation between nearest inner points. A spherical receiver measures the nearest Sender surface to its centre. For two spheres:
p = clamp(1 - max(0, |senderCenter - receiverCenter| - r) / R, 0, 1)
Contact begins at approximately R + r centre distance.
The value saturates when the Sender contains the Receiver centre.
Detection distance depends on both receiver and target signal shape. For a 10 cm receiver, add the target sphere’s radius to obtain the initial center distance. Capsules and body targets use their nearest surface. VRChat limits scaled radii to 3 m and width/height/depth to 6 m. Official Contacts behavior
Socket: OGB/Orf/<id>
VRCFury generates this set through OGB Haptics; SpsForAll automatic supplementation has its own branch. PenOthersNewRoot/PenOthersNewTip and their Self pairs provide SPS2. Enabling the touch zone also generates the Touch, SPS1 and Frot parameters below.
| Leaf parameter | Type and detected object | Receiver geometry | Sensa interpretation |
|---|---|---|---|
| FrotOthers | Proximity; another Socket root tag | Center +0.05·Z, sphere R=0.1 m; needs touch zone | Approach/brushing intensity, read directly by OgbTouch |
| PenOthers | Proximity; TPS_Pen_Penetrating | Center -D·Z, sphere R=D; needs touch zone | SPS1 depth trend |
| PenOthersClose | Constant; same Plug tag | Center -D/2·Z, capsule R=D/2.5, H=D; needs touch zone | 1 when a target enters the Socket’s effective nearby region |
| PenOthersNewRoot | Proximity; another Avatar’s Plug root Sender | Root center, sphere R=1 m | SPS2 root proximity paired with NewTip for depth conversion |
| PenOthersNewTip | Proximity; another Avatar’s Plug length Sender | Root center, sphere R=1 m | SPS2 length-sphere proximity paired with NewRoot for length estimation |
| PenSelfNewRoot | Proximity; own Plug root Sender | Root center, sphere R=1 m | Corresponding SPS2 pair for Self |
| PenSelfNewTip | Proximity; own Plug length Sender | Root center, sphere R=1 m | Corresponding SPS2 length companion for Self |
| TouchOthers | Proximity; others’ Head/Hand/Foot/Finger | Center -D·Z, sphere R=D; needs touch zone | Touch intensity with TouchOthersClose |
| TouchOthersClose | Constant; corresponding body tags | Center -D/2·Z, capsule R=D/2.5, H=D; needs touch zone | 1 when a target enters the corresponding touch region |
| TouchSelf | Proximity; own Hand/Finger/Foot | Center -D·Z, sphere R=D; needs touch zone | Touch intensity with TouchSelfClose |
| TouchSelfClose | Constant; corresponding body tags | Center -D/2·Z, capsule R=D/2.5, H=D; needs touch zone | 1 when an own target enters the corresponding touch region |
D follows authored length. The component defaults to zero; an enabled touch zone then uses 5% of Avatar view height. A positive length is used directly in metre mode, or multiplied by object world Z scale in local-unit mode. A valid touch zone generates the corresponding parameters above; scale conversion is described below. Component default, Socket generator, D calculation
Official OGB still consumes legacy Orf/PenSelf, but this modern generator does not create it. Calibrate historical sources using their actual paths and authored geometry. The table lists the current generator’s supported Socket leaves.
Plug: OGB/Pen/<id>
| Leaf parameter | Type and detected object | Receiver geometry | Sensa interpretation |
|---|---|---|---|
| FrotOthers | Proximity; another Plug envelope tag | Root center, sphere R=L | Close/brushing intensity with FrotOthersClose |
| FrotOthersClose | Constant; another Plug envelope tag | Center L/2·Z, capsule R=W+0.08 m, H=L | 1 when a matching target enters the effective nearby region |
| PenOthers | Proximity; another Avatar’s Socket root tag | Root center, sphere R=L | Depth trend, using the original OgbDepth value |
| PenSelf | Proximity; own Socket root tag | Root center, sphere R=L | Corresponding depth trend for Self |
| TouchOthers | Proximity; others’ Hand/Finger/Foot | Root center, sphere R=L+e | Touch intensity with TouchOthersClose |
| TouchOthersClose | Constant; same tags | Center L/2·Z, capsule R=W+e, H=L+2e | 1 when a matching target enters the touch region |
| TouchSelf | Proximity; own Hand/Finger/Foot | Root center, sphere R=L+e | Touch intensity with TouchSelfClose |
| TouchSelfClose | Constant; same tags | Center L/2·Z, capsule R=W+e, H=L+2e | 1 when an own target enters the touch region |
Plug TouchOthers detects Hand/Finger/Foot. Socket TouchOthers includes Head in addition to those body tags. Plug generator, tag definitions
Plug depth uses PenOthers or PenSelf, mapped with its original value and intended direction. Touch and Frot use the corresponding Close conditions in the table.
Sender geometry defines the other object's size
Senders define the target shape seen by a receiver. Common generated objects are:
| Generated object | Sender shape and tag | Purpose |
|---|---|---|
| Plug Root | Root-centred sphere r=0.01 m; TPS_Pen_Root | SPS2 PenOthersNewRoot/PenSelfNewRoot |
| Plug Length | Root-centred sphere r=L; TPS_Pen_Penetrating | SPS2 NewTip and SPS1 PenOthers observe a root-centered length sphere |
| Plug WidthHelper | Root-centred sphere r=max(0.01 m,L-2W); TPS_Pen_Width | Upstream internal width aid |
| Plug Envelope | Centre L/2·Z; capsule R=W, H=L; TPS_Pen_Close | Plug frottage/independent touch zones |
| Socket Root | Root-centred sphere r=0.001 m; includes TPS_Orf_Root | Plug PenSelf/PenOthers and Socket FrotOthers |
| Socket Front | +0.01·Z, sphere r=0.001 m; TPS_Orf_Norm etc. | Upstream direction aid |
For example, Plug/PenOthers starts producing values at approximately L+0.001 m center distance. SPS1 Socket PenOthers observes the root-centered Length sphere r=L (TPS_Pen_Penetrating). SPS2 PenOthersNewRoot observes the r=0.01 root sphere, while PenOthersNewTip observes the r=L length sphere. Their shared center makes readings depend mainly on root-center distance. Approach aligned with the Socket is readily understood as a depth trend; for sideways movement or tilt, use the illustration and calibrate actual endpoints. Plug Senders, Socket Senders
Other real parameters and unsupported names
| Parameter | Actual meaning | Current Sensa behavior |
|---|---|---|
| OGB_ENABLED | Avatar input bool enabling local Orf/Pen Haptics | Explicit fixed-destination control; true every five seconds |
| VFH/Version/10 | Current generator capability-marker path | Inspect supported capabilities in the parameter list |
Legacy OGB/Pen/<id>/Version/8, OGB/Orf/<id>/Version/9, VFH/Version/9 |
Historical capability markers still recognized by official OGB | Identifies historical-source capabilities |
VFH/Zone/Touch/<id>/Self, VFH/Zone/Touch/<id>/Others |
Independent SPS Touch Zone proximity | Direct 0–1 OgbTouch reading, without Close |
TPS_Internal/Orf/<id>/Depth_In, TPS_Internal/Pen/<id>/RootRoot |
Official OGB's native TPS branch | Outside automatic OgbDepth paths; requires explicit direct mapping |
| Custom Angle/Depth/Trigger etc. | Meaning is defined by the actual sender | Configure explicit mappings such as Direct using sender documentation |
An independent Touch Zone is a sphere centred at its authored object. Its radius defaults to 0.1 local units with worldScale=false, so world radius follows object scale. It accepts body and Plug-envelope tags without the Orf/Pen Close gate, and does not register with the OGB_ENABLED gate above. Official OGB bridge and Sensa OgbTouch both read this namespace. Sensa reads each zone intensity separately by complete instance, source and Self/Others category. Zone generator, default radius, OGB path parser
Version 10 is an upstream capability marker. Sensa recognizes supported features from paths, while motion intensity comes from actual Pen, Touch or Frot readings. Marker generation, OGB capability recognition
World scale and the Socket estimate
A worldScale=true request divides the position vector, radius and height by the same build-time worldScale.x scalar. False retains authored local values. D’s local length separately uses Z scale. Inspect generated dimensions when using nonuniform scaling. Plug/Socket WorldSpace also uses ScaleConstraint to preserve world scale; OGB Receivers live under OneSpace. Runtime scaling also affects actual world radii. Receiver conversion, Sender conversion, WorldSpace constraint
For concentric Receivers with common radius R, actual Plug root radius r and unsaturated observations:
L ≈ R × (pTip - pRoot) + r
d ≈ R × (1 - pRoot) + r
Radial fraction q = clamp(1 - d / L, 0, 1)
Sensa uses the generator model R=1 and r=0.01, giving the +0.01 correction. Runtime scaling or custom dimensions make this conversion approximate, with actual R/r determined from authored geometry. Root saturation at one means d≤r, so readings stay constant within that small region. Calibrate your desired start and end positions using the actual object. Estimator
Only complete finite 0–1 pairs with a usable unsaturated length observation support the subsequent radial fraction. Starting inside with unknown length returns zero: leave and re-enter first. Lateral offset, multiple Plugs, saturation and asynchronous per-parameter updates affect results. Keeping the same object and source throughout calibration helps produce stable, interpretable changes.
Dedicated Contact direct tracking (SDK Beta)
Sensa also supports SDK 3.10.6-beta.3 and Beta.2 advanced Proximity reports for native Sender midpoint position and relative contact-point velocity through advanced Proximity parameters. Sensa uses a separate Sensa/Contact/<id>/… instance with one unique-channel own-root Sender and one Avatar-root Receiver. Position is in physical metres (AvatarRootMeters), velocity in m/s; movement strength can be calibrated with VelocityX/Y/Z, Speed or ProximitySpeed. SPS four-anchor tracking keeps Sensa/SPS/<id>/P0…P3+Sample, and existing OGB paths and the depth/touch models above keep their published meanings.
Choose this route when authoring your own root measurement. Explicit Sensa/native Contact roots work independently of VRCFury. For body linkage, a calibrated position axis can follow subtle depth trends and a Touch/Close condition can confirm contact. Beta setup, source evidence and field semantics · Dictionary
Sensa's compact entry points and prerequisites
Choose OgbDepth for depth and OgbTouch for touch. OgbDepth prioritizes SPS2 · PenOthersNewRoot / PenOthersNewTip. Missing pairs or unknown length yield zero; absent or both-zero channels permit the same instance’s SPS1 · PenOthers / PenOthersClose depth signal. OgbTouch pairs required Close values by source/full parent/feature, returning zero if absent. Explicit Direct mappings retain access to raw values. Consumer selection, Sensa address interpretation
Modern VRCFury replaces instance-name slashes with underscores. Sensa also preserves custom nested parent paths. Companion values remain isolated by source/instance/Self-or-Others. Reactivation, Avatar changes and mapping rebuilds discard learned length. Timeouts follow the currently selected signal.
Orf/Pen Haptics require enabled authoring options, client OSC and OGB_ENABLED. Sensa's osc.ogbControl defaults off and targets only explicit unicast IP/localhost and UDP ports, never inferred source ports. In OSC or Combined mode with reception running, it sends true every five seconds, attempting false to the previous destination when disabled/leaving/exiting normally. Observe whether the Avatar begins publishing readings, then save the mapping and enable device input. Upstream gating, official heartbeat
Inspect raw values, choose depth or vibration, then calibrate the actual object. The same vibration template reads independent Zones through VFH/Zone/Touch/<complete-id>/Self or .../Others. Check direction, response and Close conditions in the client, then verify device motion with a small travel range.
Upstream projects follow their respective licenses. The OGB license and VRCFury license remain applicable.