godot_oculus_quest_toolkit icon indicating copy to clipboard operation
godot_oculus_quest_toolkit copied to clipboard

Implement the Scrunch Teleport from The Under Presents

Open goatchurchprime opened this issue 3 years ago • 1 comments

There is an example of it at this point in the video https://youtu.be/BswmgR18tZ8?t=1100 (You can also experience it in the free intro for The Under Presents.)

This method is the most pleasant and efficient VR locomotion I have seen, even though it is for some reason not listed in: https://locomotionvault.github.io/

The mechanism is as follows:

  1. Reach forward with your arm in your direction of travel
  2. Press the A button and pull back towards your chest
  3. The Centre of the your Field of View bulges towards and goes slides past you so that you partly see the world from the point of view that you are intending to teleport to
  4. The Periphery of your Field of View remains stationary as seen from your original position until you release the A button and it snaps around you to meet the the moved centre of your field of view
  5. At all times approximately half of your field of view remains stationary (the periphery and then the centre) which greatly reduces VR motion sickness.
  6. The two part teleportation mechanism can be seen by other players (first the face and then the body) which greatly increases their ability to track where people are going.

Apparently this could be implemented by a vertex shader, but I don't know how or when it would get slotted into the rendering pipeline in Godot (TUP is implemented in Unity). Would it be a parameter that gets applied to every material? It should not affect the lighting geometry because it is a distortion that applies just prior to rendering.

The technique could be faked at first with a vignette (darkening of the peripheral field of view) and moving the camera to the position of step 3 above, which would get many of the advantages of speed and efficiency, even if it didn't look quite as wonderful.

goatchurchprime avatar Mar 14 '21 10:03 goatchurchprime

The "pulling" effect would be done in a vertex shader: Knowing the teleport destination and normalized direction "from player to teleport destination", get all the vertices in that direction within a small radius (probably using some sort of dot product) and transform them as if they were at the teleport destination.

The trickiest part of this effect is actually applying the effect to ALL materials. You could implement this for one mesh in a ShaderMaterial pretty easily (I would like to make a proof-of-concept using a single terrain geometry, when I can...) but having this effect on all materials isn't gonna be easy at all. Godot doesn't even allow doing this in core...

The technique could be faked at first with a vignette (darkening of the peripheral field of view) and moving the camera to the position of step 3 above

If you mean "teleport direction peripheral" instead of "player view peripheral" then I can only imagine this would be confusing for a player and not any easier to implement

Firepal avatar May 08 '21 14:05 Firepal