SPS (Super Plug Shader)
SPS, or Super Plug Shader, is VRCFury's deformation system for VRChat haptics.
SPS2 is now the stable default in VRCFury. It is the current replacement for DPS, TPS, and SPS1.
SPS2 Benefits
- Free
- Works on both rigged and un-rigged meshes
- Supports far more sockets and plugs without the old SPS1 light-conflict problems
- No lights needed for SPS2-to-SPS2 deformation
- No contacts needed for SPS2-to-SPS2 deformation
- Backward compatible with SPS1, DPS, and TPS when legacy compatibility is enabled
- Full tag / channel system for filtering which plugs can target which sockets
- Guided paths on sockets
- Radius-offset sockets for better surface alignment
- Supports animating blendshapes while deforming
- Works properly with avatar scaling and mesh scaling
- Plug meshes no longer increase your avatar's overall bounding box
- Compatible with many shaders, including Poiyomi Toon/Pro 7/8+, liltoon, UTS, Mochie, XSToon, Silent, Standard,
Unity/Color,VRChat/Mobile/Particles/Additive, and some Shader Graph / simple custom shaders
Important SPS2 Notes
- SPS2 deformation does not use lights or contacts between SPS2 users.
- Legacy compatibility still uses lights so SPS2 can interact with SPS1, DPS, and TPS.
- Depth animations and some haptics features still use contacts even though deformation itself no longer does.
- Each SPS plug and each SPS socket costs 2 extra material slots.
- SPS2 uses two grab passes total per world, not two per plug or socket.
- Some limits still exist. SPS2 scales far better than SPS1, but do not go crazy.
How to Set Up a Plug
- Ensure VRCFury is up to date
- If you are upgrading an existing legacy plug:
- If the plug was DPS, change the shader for the plug's material from
Raliv/PenetratortoStandardor another normal shader - If the plug was TPS, disable the
Penetratorcheckbox on the Poiyomi material - Remove any DPS
Tiplights, often found in a child object namedPhysics - Delete any old
SPS Plugcomponent if one was previously generated by an older upgrader flow
- If the plug was DPS, change the shader for the plug's material from
- Click
Tools > VRCFury > SPS > Create Plug - If your mesh is rigged:
- Drag the new SPS Plug object onto the bone nearest the base of the deforming area
- If your mesh is un-rigged:
- Drag the new SPS Plug object onto the renderer that should deform
- The plug mesh must be straight / fully extended in the editor
- SPS uses this pose for length, radius, and deformation calculations
- If you want a different resting pose in game, use
Post-Bake Actionson the plug component
- Position the SPS Plug object at the base of the deforming area
- Rotate it so the curved end points toward the tip
Plug Options Worth Knowing
Auto-Rig- If the mesh is static, VRCFury can add bones and a physbone so it can sway properly.
Animated Toggle- You can animate this on and off in your own clips to temporarily disable deformation.
Animated blendshapes to keep while deforming- Use this for blendshapes that should continue animating while SPS is active.
Allow Hole Overrun- Lets the plug extend slightly past a hole for better collapse visuals.
Disable Depth Pass- Enabled by default in SPS2.
- This prevents ghosting artifacts in depth-based post-processing, but depth-based screen effects may no longer react to the plug.
How to Set Up a Socket
Already have old DPS or TPS? Upgrade them following these instructions.
- Ensure VRCFury is up to date
- Click
Tools > VRCFury > SPS > Create Socket - Drag the new object onto the bone you want to attach it to
- Position it where you want plugs to target
- Rotate it so the arrow points inward
Socket Modes
Sockets can be:
Auto- Usually picks
Holeon hips/head style placements andRingelsewhere.
- Usually picks
Hole- A one-sided hole target.
Ring- SPS can enter from either side. Legacy DPS/TPS behavior is more limited.
One-Way Ring- Uncommon. Only enters from one side.
Socket Options Worth Knowing
Radius Offset- Offsets SPS targeting by the plug radius so the plug rides the socket surface better.
- This is especially useful for hand-style sockets.
- If the socket uses a guided path, radius offset only applies at the path entry.
Guided Path- A socket can define up to 3 path stops.
- After entering the socket, the plug is guided through those stops.
- Path segments can optionally collapse the plug.
- You can override tangents for smoother or more custom curves.
- Path stop transforms must not contain other SPS sockets.
Enable Legacy Compatibility- Keeps SPS1 / DPS / TPS compatibility enabled for this socket.
- This uses legacy lights.
- If disabled, the socket becomes SPS2-only and multiple sockets can be enabled without legacy one-socket-at-a-time restrictions.
Tags / Channels
SPS2 uses tags to decide which plugs can target which sockets.
Socket Tags
Sockets can have:
- Up to 2 custom tags
- The
GlobalSPS2 tag on or off
By default, most normal SPS2 setups leave the Global SPS2 tag enabled so ordinary plugs can target them.
Automatic Socket Tags
When a socket has the Global SPS2 tag enabled, VRCFury can also add automatic location-based tags:
- Hips:
hips - Head / Jaw:
head - Chest / Upper Chest:
chest - Left Hand:
hand,handleft - Right Hand:
hand,handright - Left Foot / Toes:
foot,footleft - Right Foot / Toes:
foot,footright
If exactly two sockets are placed on hips, VRCFury also auto-assigns:
hipsfronthipsback
Those automatic bone tags are only added when the socket is opted into the Global SPS2 tag.
Plug Tags
Plugs can have:
- Up to 2 include tags
- Up to 2 exclude tags
- The
GlobalSPS2 tag on or off - The legacy SPS1/DPS/TPS tag on or off
Each plug include/exclude tag also supports:
SelfOthers
This lets you make rules that apply only to yourself, only to other players, or both.
Change SPS Tag Action
Tags can be animated with a VRCFury Toggle using the Change SPS Tag action.
This can:
- Change plug include tags
- Change plug exclude tags
- Toggle a plug's
GlobalSPS2 tag - Change socket tags
See Actions.
Legacy Compatibility
SPS2 plugs and sockets can still work with SPS1, DPS, and TPS.
Legacy support is what keeps old systems working, but it is also the part that still relies on lights and the older limitations.
Socket-side legacy control
Each socket has Enable Legacy Compatibility.
- On:
- SPS1 / DPS / TPS users can target the socket
- Legacy lights are generated
- The old one-socket-at-a-time legacy restrictions still matter when legacy mode is enabled
- Off:
- The socket becomes SPS2-only
- No legacy lights are generated for it
- It is not forced off by the avatar's legacy mode toggle
Avatar-wide legacy default
If you add an SPS Options component to the avatar root, you can control:
- SPS menu path
- SPS menu icon
- Save sockets between worlds
- Whether
Legacy Compatibilityis enabled on avatar load
The Legacy Compatibility menu toggle only appears if you actually have at least one menu-enabled socket with legacy compatibility enabled.
Testing in the Editor
- Ensure you have Gesture Manager installed
- If you are testing a plug, add a test socket to your scene
- Ensure the light bulb button in Unity's Scene view is on
- Enter play mode
- Select the Gesture Manager object
- If testing avatar sockets, turn them on in the SPS menu
- Move things around and test
Note: A Unity editor bug can sometimes cause plugs to keep deforming after sockets are turned off in play mode. This does not occur in game.
How to Move or Rename the SPS Menu
Sockets with menu toggles create SPS menu entries automatically.
To move the generated SPS menu:
- Select your avatar root
- Add the
SPS Optionscomponent - Set
SPS Menu Path Override- The default is
SPS - For a submenu, use something like
Props/SPS
- The default is
If your avatar has sockets, VRCFury also creates an Options submenu under that path for SPS-wide options like Auto Mode, Stealth Mode, and Legacy Compatibility when relevant.
Disabling SPS Plug Deformation with a Toggle or Animation
SPS plugs deform toward sockets by default.
If you want to toggle deformation on or off:
- Add a
VRCFury | Toggle - Add an
Enable SPSaction - Drag in the SPS Plug
You can also animate the plug's Animated Toggle field directly in your own animation clips.
Scaling SPS Plugs
These are allowed while deformation is enabled:
- Uniformly scaling any parent object of the SPS Plug
- Animating blendshapes listed in
Animated blendshapes to keep while deforming, as long as they do not change plug length - Positioning, rotating, scaling, or shaping the plug in the editor default pose
These are not allowed while deformation is enabled:
- Animating the position, rotation, or scale of plug bones that are not parents of the SPS Plug object
- Animating blendshapes that change plug length
If you want to do something more extreme, animate the plug's Animated Toggle off during that part.
Performance
SPS2 performance is very different from SPS1:
- SPS2 deformation no longer depends on socket lights or plug contacts
- The two SPS grab passes are shared across the world, not added per item
- Legacy compatibility still adds lights because that is how DPS/TPS/SPS1 interop works
- Each plug and each socket adds two extra material slots
If you are worried about performance, test your actual avatar in real worlds before assuming the worst. SPS2 was specifically built to remove the old SPS1 scaling problems.
Troubleshooting
Plug works in the editor, but not in game
Ensure you have Avatar Self Interact enabled in the VRChat settings menu.
Plug works for your own sockets, but not for other players
Ensure the other player allows interactions from you. You should see a yellow hand on their name card when your menu is open.
Also verify:
- Their socket is actually enabled
- Their avatar is using SPS correctly
- They did not remove the relevant tags or disable legacy compatibility needed for your setup
Deformation works, but depth animations or sounds do not
SPS2 does not need contacts for deformation, but depth animations still use contact-based data.
This means depth animations will not work when:
- The target is a world socket/object without the avatar contact pipeline
- The other avatar is still using an un-upgraded DPS setup
If the other avatar is still on DPS, ask them to install VRCFury and run Tools > VRCFury > SPS > Upgrade DPS to SPS.
Known Issues
Depth-based post-processing / edge effects
By default, SPS2 enables Disable Depth Pass on plugs.
This means:
- Ghosting artifacts are reduced
- Depth-based screen effects may stop reacting to the plug
If you want the older behavior instead, uncheck Disable Depth Pass on the plug. That may restore edge effects, but you can get the old ghost artifacts while deforming.
If you previously changed a plug render queue to 5000, change it back to the default. That old workaround is obsolete and breaks other things.
Realtime Unity Shadows
Realtime Unity shadows still do not follow SPS deformation correctly.
You may see ghost shadows inside the mesh while deforming.
Options:
- Disable
Receive Shadowson the mesh if that look works for your avatar - Use worlds that do not rely on realtime shadows
Light Volumes and other non-realtime lighting systems still work properly.
Legacy compatibility can still hit old light limits
This only applies when you are relying on SPS1 / DPS / TPS backward compatibility.
If too many legacy lights are nearby, some may be discarded by Unity. Pure SPS2-to-SPS2 setups do not have this problem.
Triangles drawn on screen in rare worlds
In rare worlds, SPS can still show visible triangles on screen even when not actively deforming.
Known examples:
- Avatar Testing Chamber "Gray Room"
- Avatar Testing Chamber center self-camera
- Last Resort (Halo 3)
This is rare and world-dependent. Disable SPS in those areas or use a different world.
Other question?
Ask on the Discord.