Skip to main content
Inspiring
April 19, 2014

Simple experiments with gamepad controls and VR

I thought I'd share some of the small experiments I'm making with gamepad controls. This is a WIP and nothing ground breaking or very exciting but it's I thought it would be as good a starting point as any for a discussion/collaboration on VR and gamepad controls.

*NEW UPDATE 2014-04-27*

This is based on SDK 0.2.5.

Ugly paste of the description from the readme file:

Simple experiments with VR and gamepad controls by Hugo Tremblay aka Mr.Green.

This has been made using the 360 controller on Windows.


*Press the Back button of the 360 controller to see the control options*

1 - Control Modes

You can cycle through the different control modes by using the left and right
D-Pad buttons of the 360 controller or the + and - keys of the keypad.


1.1 - OculusSDK

This is the default mode of the Oculus SDK. You walk in the direction you're
looking at.

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Turn left/right.
Left analog click: 180° turn.
Left trigger: Run.

1.2 - FreeHead

This mode lets you look and walk in different directions.

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Turn left/right.
Left analog click: 180° turn.
Left trigger: Run.

1.3 - FreeHeadLS

This mode is like the FreeHead mode with strafing and turning swapped to give full
control to the left stick.

Left analog stick: Walk forward/backward. Turn left/right.
Right analog stick: Strafe left/right.
Left analog click: 180° turn.
Left trigger: Run.

1.4 - HeadStick

This mode lets you turn with your head when you're moving (walking or strafing).

When you turn your head past a configurable angle (default 20°) to either the
left or right, you beging turning at a configurable senstivity, much like an analog
stick.

You can freely look around normally when not moving.

Also, it assumes that if you're looking up 15° or more, you're probably looking
at something and will NOT turn.

This mode is requires good VR legs.

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Free.
Left analog click: 180° turn.
Left trigger: Run.

1.5 - FixedAngle

This mode is probably very similar to what CloudHead's VR Comfort Mode. You
walk in the direction you're looking at but you can make broader turns using
the left stick, which turns in fixed increments (default 20°). The angle is
configurable.

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Turn left/right in fixed increments.
Left analog click: 180° turn.
Left trigger: Run.

1.6 - FixedAngleLS

This mode is identical to the FixedAngle mode except that it gives you full control
with the left stick and puts strafing on the right stick.

The strafing could be put as a button modifier or removed altogether, which would
leave the right stick free for a potentialy more useful role like a free gun aiming
mode for instance.

Left analog stick: Walk forward/backward. Turn left/right in fixed increments.
Right analog stick: Strafe left/right.
Left analog click: 180° turn.
Left trigger: Run.

1.7 - FixedAngleHead

This mode is a mix of FixedAngle and HeadStick.

When you turn your head past a configurable angle (default 20°) to either the
left or right, you will turn in that direction by that angle.

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Free.
Left analog click: 180° turn.
Left trigger: Run.

1.8 - TurnButton

This mode lets the user set his orientation (walking direction) to where he's
looking at with the press of a button. Initiates a rotation by the delta
between the camera orientation and the "body" orientation. Both the camera and
the body rotate by the same angle, which lets the user recenter his head and have
the new orientation facing forward.

Kinda hard to explain, try it for yourself!

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Turn left/right.
Left analog click: The Turn Button.
Left trigger: Run.


1.9 - TECHNOLUST

This mode has been demanded by Anticleric over at the Oculus forums for his game
TECHNOLUST.

It's meant as a very simple mode for newcomers. It lets you walk forward simply
by pressing the left bumper or X and goes in the direction you look at. Holding the
right trigger lets you look around freely when walking, and turns you to the
direction you're looking at when you release it.

It also has the FixedAngle functions on the analog sticks.

Left analog stick: Walk forward/backward. Strafe left/right.
Right analog stick: Turn left/right in 45° increments.
Left analog click: 180° turn.
Left trigger: Run.
Left bumper/X: Walk backward.
Right bumper/Y: Walk forward.
Right trigger press: Independent walking/looking directions.
Right trigger release: Sets the walking direction to the looking direction.


2 - Options

2.1 - "Blink" turning

Experimental function to alleviate discomfort while turning with a gamepad.

On [default]: The image goes dark while turning. Simulates the user blinking his eyes.
There's a "deadzone" which lets the user make very slight adjustments
without blinking.
Off [stock OVR SDK]: No change in the camera behavior while turning.

You can toggle this feature by pressing the right analog stick button on the 360
controller or by pressing CapsLock on the keyboard.

2.2 - Turn angle

Specifies by how many degrees fixed angle modes will turn.

For head controlled modes, this is also the angle you need to turn your head
to start turning.

Default is 20°. A minimum of 30° is recommended for the FixedAngleHead mode.

Home: Increases turn angle
End: Decreases turn angle.

2.3 - Smooth Turns

This applies to the automatic turning initiated by multiple functions: (Fixed angle
turns, 180° turns, Turn Button).

You can activate smooth turns if instant changes in the point of view when
turning are disorienting to you. Could cause motion sickness though.

On: The camera rotation is fast but perceptible.
Off [default]: Instant point of view change.

B button or ScrollLock: Toggle Smooth Turns.

2.4 - Turn speed

When using Smooth turns, sets the speed of the rotation in degrees/s

PageUp: Increases turn speed
PageDown: Decreases turn speed.

2.5 - Sensitivity

Analog stick and Head turning sensitivity (HeadStick mode).

PageUp: Increases turn speed
PageDown: Decreases turn speed.



Modified Tuscany demo - Windows - 64 bit

Unity package of the modified OVRPlayerController prefab - SDK 0.2.5
    This topic has been closed for replies.

    68 replies

    Participant
    April 24, 2014
    "mrgreen72" wrote:
    Actually, contrary to popular belief, slowing down the rotation is worse! Playing with the mouse, which is way faster, feels a lot more comfortable. So you want to make it as fast as possible while remaining precise enough.


    I've always thought it wasn't the speed so much as the direct 1:1 control scheme of the mouse. Your hand motion directly controls your angle, where-as an analog stick is one level of indirection further up.
    mrgreen72Author
    Inspiring
    April 24, 2014
    "brantlew" wrote:
    "mrgreen72" wrote:
    Actually, contrary to popular belief, slowing down the rotation is worse! Playing with the mouse, which is way faster, feels a lot more comfortable. So you want to make it as fast as possible while remaining precise enough.


    I've always thought it wasn't the speed so much as the direct 1:1 control scheme of the mouse. Your hand motion directly controls your angle, where-as an analog stick is one level of indirection further up.


    There's probably some of that, but I do think speed is also a factor. At least it definitely does feel better to me, but YMMV.

    Dimming the view to almost complete darkness while turning also does the trick. It's a pretty lame solution but it's better than having to stop playing after 5 minutes.

    Anyway, it's definitely a fun and challenging area to explore. :)
    Inspiring
    April 24, 2014
    "brantlew" wrote:
    "mrgreen72" wrote:
    Actually, contrary to popular belief, slowing down the rotation is worse! Playing with the mouse, which is way faster, feels a lot more comfortable. So you want to make it as fast as possible while remaining precise enough.


    I've always thought it wasn't the speed so much as the direct 1:1 control scheme of the mouse. Your hand motion directly controls your angle, where-as an analog stick is one level of indirection further up.


    I'm also going to have to say it seems like a bit of both. I've been messing with stuff all week (with the help of Mr. Green here) and I can say with 100% certainty that the mouse controls keep me feeling fine. As soon as I tried moving with the control stick the wave of illness hit me. This made it pretty tough to work considering I was trying to get a good controller scheme working with Technolust. Slowing down the rotation speed made it almost instantly worse (ontop of being annoying to get around). When I cranked the speed up on the stick rotation it felt much better, but in the end it was basically just twitch turning.

    Right now I'm using the 20 degree jump and it seems to make my brain a little more happy, the downside is that it's less immersive and annoying to watch.

    What I would be really interested to try would be a high resolution trackpad (ala the steam controller), which would allow a swipe to turn. I have a feeling that would be the best of both worlds.
    IRIS VR - TECHNOLUST - KERSER - BODY/MIND/CHANGE - QUANTUM CAPTURE - OCCUPIED VR
    mrgreen72Author
    Inspiring
    April 24, 2014
    The Turn Button, man. The Turn Button.

    I know it sounds a little weird but one you wrap your head around it (quite literally actually), it works pretty well. As long as you're not making a twitch FPS, that is...

    It probably needs tweaking and there is more stuff I wanna try but I think it's promising.

    Or maybe that's just wishful thinking. :lol:
    mrgreen72Author
    Inspiring
    April 25, 2014
    New update:

    - Scratched SDK 0.3.1 version for now.
    - Made a separate options screen for my stuff. Press the Back button of the 360 controller to display it.
    - Added Turn Angle for modes where it applies. Set it using Insert/Delete.
    - Added Turn Speed for modes where it applies (When Progressive turning is used). Set it using Home/End.
    - Added a dead zone to the left analog stick in the FixedAngleLS mode to avoid unwanted turns.
    Up and Coming
    April 26, 2014
    this is the kind of discussion/information i have been looking for :) awesome work so far guys! i have been reading through this off and on since i found it this morning. been thinking about this all day. i really wish i had the hardware to help you guys test this out...

    you said you were interested in crazy ideas right mrgreen72?




    *i did not make this video*

    this is going to sound extremely weird and counter-intuitive (very crazy) but... take the above animations, switch camera to first person perspective and apply the following controls....

    tank mode: full torso manipulation:
    -joysticks 1:1 leg movement?
    -bump up the left joystick to step forward with left leg
    -bump up the right joystick to step forward with the right leg
    -bump down for walking backwards (same as above but in reverse)
    -to run you bump the joysticks up faster but must always do so in an alternating pattern
    -if you bump both joysticks up simultaneously it would be like a lunge or jump forward
    -if you bump both joysticks down simultaneously it would be like a lunge or jump backwards
    -in order to fast turn you have to bump one joystick up and bump the other down at the same time
    -in order to slowly turn you just push the left joystick forward and the right joystick down gently
    -you can even sidestep with this
    -to side step bump the right joystick right to step right, then follow with the left joystick
    -this is like tank mode (literally feel like you are operating a tank on tracks)
    -you can free look all you want but the camera will not rotate.
    -rotation is locked and is completely at the mercy of the torso manipulation/animation

    *joystick = analog stick not an actual joystick*

    insight: if you keep bumping up the left joystick (for example) the torso will not automatically rotate. the torso will just be stomping its foot on the ground. rotation must be done by alternating the joysticks; one has to go up and the other one has to go down for rotation to engage.

    the above control scheme is what i was thinking about when designing a mirrors edge clone for VR

    i still want to experiment with an eye bot mode that is optimized for 1:1 positional tracking. this mode is essentially the complete opposite side of the spectrum....



    "eye bot" mode;
    -this is like controlling a flying eye bot/flying camera) posting.php?mode=quote&f=26&p=110652
    -animation of the torso is completely at the mercy of how you control the flying camera
    -rotation is completely at the mercy of positional tracking data 1:1 (unless seated in game)
    -left joystick moves forwards and backwards (only)
    -right joystick side steps left and right (only)
    -for this mode rotation must be done by actually rotating your head or torso in real life..
    -i was actually thinking about allowing the player to adjust altitude of the flying camera with the right joystick at first...

    once you have the modes dialed in, you could map the modes to the triggers:
    -hold left trigger to engage "tank mode"
    -hold right trigger to engage "eye bot mode"

    but there is a "hybrid" mode that i am having difficulty designing...

    hybrid mode would be the default mode. it is the mode that is active when you are not holding any triggers at all. i have absolutely no clue how to design the hybrid mode at this time....

    questions;
    -has any game ever tried to do 1:1 walking manipulation with two joysticks?
    -would it be worth it? sounds way counter-intuitive but perhaps maybe just maybe it would help alleviate motion sickness?
    -is full torso walking manipulation even possible with just joysticks?
    -lots of questions....
    Up and Coming
    April 26, 2014
    i think i just figured out a simple way to prototype my experimental "tank mode: full torso manipulation" idea. if anyone is interested in giving it a go with the rift let me know. i would be most interested to hear the results :)
    mrgreen72Author
    Inspiring
    April 26, 2014
    It's something I've often thought about myself cubytes. Even before VR. But the risk-averse publisher part of me thinks people wouldn't bother. :lol:

    I'm not saying it's not worth a shot though. Apart from the input method, the turning would essentially work just like the "comfort mode" which does a fine job of reducing motion sickness.

    I have a few things on my plate but I'll see what I can do.

    Thanks for your input mate! :)
    Up and Coming
    April 26, 2014
    right on right on. just thinking out loud. if comfort mode works then I wouldn't bother with it.

    a simple way to test if it has any potential or not would be to clone the left analog stick function onto the the right analog stick. then hack a step limiter of 2 or 3 steps per stick. then practice the alternating patterns to continuously move without getting stopped by the limiter. that should give you a good idea of how it would feel.
    mrgreen72Author
    Inspiring
    April 27, 2014
    New update:

    - New HeadStick mode.

    This mode lets you turn with your head when you're moving (walking or strafing).

    When you turn your head past a configurable angle (default 20°) to either the
    left or right, you beging turning at a configurable senstivity, much like an analog
    stick.

    You can freely look around normally when not moving

    Also, it assumes that if you're looking up 15° or more, you're probably looking
    at something and will NOT turn.

    - New FixedAngleHead mode.

    This mode is a mix of FixedAngle and HeadStick.

    When you turn your head past a configurable angle (default 20°) to either the
    left or right, you will turn in that direction by that angle.

    - Got rid of the ?&%$@! OVRPlayerControllerEditor class.

    - Various changes to the UI and tweaks.


    As usual, please see the OP for complete info!