Skip to main content

SPS (Super Plug Shader)

SPS, or Super Plug Shader, is a free deformation shader for VRChat that can used to deform meshes towards a target. This is a full backward-compatible replacement for DPS (Dynamic Penetration System by Raliv), and TPS (Thry Penetration System in Poiyomi Pro).

Benefits

  • Free (!?!?!?!)
  • Works fully with both rigged AND un-rigged meshes
  • Supports animating blendshapes WHILE deforming!
  • Active development, often several updates per week!
  • The deformation curve doesn't cause stretching issues like other alternatives
  • Works properly with Avatar Scaling, and scaling of mesh
  • Backward compatible with all TPS and DPS systems
  • Easy setup of blendshape and other types of animations based on depth
  • Very easy setup
  • Compatible with nearly ANY shader! Poiyomi Toon or Pro 7/8+, liltoon, UTS, Mochie, XSToon, Silent, Standard, and MORE!

How to Set-up a Plug

(Known as a "Penetrator" in other systems)
  • Ensure VRCFury is up to date (we're always adding features and fixing bugs!)
  • Tools > VRCFury > SPS > Create Plug
  • If your mesh is rigged (it has bones):
    • Drag the new object onto the bone nearest the "base" or "bottom" of the area that should deform
  • If your mesh is un-rigged (no bones):
    • Drag the new object onto the mesh renderer for the mesh that should deform
  • The plug mesh must be straight / "fully extended" in the editor!!
    • This is the orientation that will be used during deformation.
    • If you wish for the plug to be curved or not extended in the avatar's resting state, you can use an animation in the plug component's "Post-Bake Actions" box to pose it how you'd like it to be when not deforming.
  • Position the new SPS Plug object so that it's located at the "base" or "bottom" of the area that should deform
  • Rotate the new SPS Plug object so that the curved end is at the "tip" of the deformed area

Upgrading from DPS?
Find the Tip object in the hierarchy, and remove the Light component, then change the shader on the material from Raliv/Penetrator to Standard (or whatever other shader you want!)

Upgrading from TPS?
Disable the Penetrator checkbox on the Poiyomi material

How to Set-up a Socket

(Known as an "Orifice" in other systems)
  • Ensure VRCFury is up to date (we're always adding features and fixing bugs!)
  • Tools > VRCFury > SPS > Create Socket
  • Drag the new object onto the bone you'd like to attach it to
  • Position the new object so it's located where you'd like plugs to target
  • Rotate the new object so the arrow points INWARD

Already got DPS or TPS orifices?
You can keep them as is (SPS is backward-compatible), or you can upgrade them automatically with
Tools > VRCFury > SPS > Upgrade Legacy Haptics!

Testing in the Editor

  • Ensure you have Gesture Manager installed (Available in the VCC "Manage Your Project")
  • If you are testing a plug, add a test Socket to your scene (see above). It does not need to be inside your avatar.
  • If you are testing socket animations, be sure the plug has contacts. Non-upgraded DPS does not contain contacts. You can upgrade plain DPS plugs by selecting them, then clicking Tools > VRCFury > SPS > Upgrade Legacy Haptics.
  • Ensure the light bulb button on the top left of unity's 3d view is ON
  • Go into play mode
  • Select the Gesture Manager object (if you don't have one, Tools > Gesture Manager Emulator)
  • If you are testing a socket on the avatar, be sure to turn it on in the "SPS" menu in Gesture Manager
  • Move things around and have fun!

Note: A bug in the unity editor can cause plugs to continue deforming when all sockets are disabled. This does not occur in game.

How to move/rename the generated "SPS" menu

SPS sockets that you create automatically include a menu toggle to turn them on and off in game. If you would like to move those toggles:

  • Select your avatar root object in the hierarchy (the same object that contains your VRC Avatar Descriptor)
  • At the bottom of the Inspector on the right, click Add Component and search for SPS Options.
  • In the new component's Menu Path box, type where you'd like it to be in your menu. The default is SPS.
    • If you'd like it to be in a submenu like "Props", you'd put Props/SPS

Disabling SPS Plug deformation using a toggle or other animation

SPS Plugs will deform toward sockets by default. If you wish to be able to toggle this on/off in your menu, you can add a VRCFury | Toggle component somewhere within your avatar, and give it an Enable SPS action, and drag in the SPS Plug component. Then, when you turn this toggle on or off, the plug's ability to deform will enable/disable.

If you have a more complex animation or controller, and wish to only enable the plug's deformation at specific poses / times, you can animate the Animated Toggle checkbox in the SPS Plug component on or off within your own animation clip.

Scaling SPS Plugs

There are some limitations on how SPS plugs can be manipulated in animations.

These are allowed:

  1. You can animate the scale (uniformly) any PARENT object of the SPS Plug object
  2. You can animate blendshapes of the SPS Plug's renderer, but only if you add the blendshape name to the "Animated Blendshapes" list on the plug component, and only if they DO NOT impact the plug's length
  3. You can position, rotate, scale, or use blendshapes in the editor's "default pose" (not within an animation)

These are not allowed:

  1. You CANNOT animate the position, rotation, or scale of any bone belonging to the SPS Plug's renderer that is not a parent of the SPS plug object
  2. You CANNOT animate blendshapes that impact the plug's length

So how do you "lengthen" a plug in an animation without increasing its girth?

In your animation, you can scale up the overall mesh (uniformly), then create and use a blendshape to reduce its radius. Remember, blendshapes should not impact plug length.

Note: All of these limitations only apply while deformation is enabled. If SPS plug deformation is disabled by animating off the "Animated Toggle" box within the SPS plug component, then you can go nuts and do whatever you want.

Troubleshooting

Plug seems to work in the editor, but doesn't deform in game?

Ensure you have Avatar Self Interact enabled in the VRChat settings menu.

Plug works in game for sockets on my avatar, but not for sockets on other avatars?

Ensure the other player has allowed interactions for you. You should see a yellow hand in their name card when your menu is open.

You should also verify that they actually have their socket enabled in the SPS menu. Verify if their socket works for others to determine if the issue is on your end or theirs.

Deformation works, but depth animations / sounds do not work?

Plugs and sockets stored within worlds, and un-upgraded DPS (not SPS) on other avatars, cannot trigger depth animations because they do not contain contacts. Ask the other player to install VRCFury and run Tools > VRCFury > SPS > Upgrade Legacy Haptics to upgrade their DPS with contacts. There is no solution to this problem for objects stored within worlds.

Other question?

Ask on the discord!