Skip to main content

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/Penetrator to Standard or another normal shader
    • If the plug was TPS, disable the Penetrator checkbox on the Poiyomi material
    • Remove any DPS Tip lights, often found in a child object named Physics
    • Delete any old SPS Plug component if one was previously generated by an older upgrader flow
  • 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 Actions on 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 Hole on hips/head style placements and Ring elsewhere.
  • 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 Global SPS2 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:

  • hipsfront
  • hipsback

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 Global SPS2 tag on or off
  • The legacy SPS1/DPS/TPS tag on or off

Each plug include/exclude tag also supports:

  • Self
  • Others

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 Global SPS2 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 Compatibility is 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 Options component
  • Set SPS Menu Path Override
    • The default is SPS
    • For a submenu, use something like Props/SPS

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 SPS action
  • 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:

  1. Uniformly scaling any parent object of the SPS Plug
  2. Animating blendshapes listed in Animated blendshapes to keep while deforming, as long as they do not change plug length
  3. Positioning, rotating, scaling, or shaping the plug in the editor default pose

These are not allowed while deformation is enabled:

  1. Animating the position, rotation, or scale of plug bones that are not parents of the SPS Plug object
  2. 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 Shadows on 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.