More Ways to Make Your Users Sick – A talk about WebVR and UX Design

Post on 16-Mar-2018

567 views 2 download

transcript

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

More Ways to Make Your Users SickAbout WebVR and UX Design

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

geildanke.com @fischaelameer

You should care about WebVR,because you care about your users.

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

VR Concepts

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

VR Concepts WebVR API

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

VR Concepts WebVR API UX Design & VR

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Virtual Reality is tricking our eyes and brain to think of a 2D image to be in 3D.

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Virtual Reality changes the way we relate to technology.

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

VR Is Good For Understanding Spatial Relationships

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

VR Is Good For Multi Tasking

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

VR Is Good For Simulations

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

What is VR Bad At?

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://www.reddit.com/r/VRFail/comments/4p9zgj/pool_shot/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://www.reddit.com/r/VRFail/comments/4p9zgj/pool_shot/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Virtual Reality Hardware and Concepts

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Mobile VR Desktop VR Standalone VR

Google Cardboard Samsung Gear VR Google Daydream View

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Mobile VR Desktop VR Standalone VR

Oculus Rift HTC Vive Playstation VR

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Mobile VR Desktop VR Standalone VR

https://en.wikipedia.org/wiki/Virtual_Boy

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Stereoscopic Images

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

IPD = Interpupillary distance

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Tracking

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Rotation

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Rotation

Position

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 http://bit.ly/2iK1Zv7

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 http://bit.ly/2iK1Zv7

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Rotation

Position

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

https://github.com/mrdoob/three.js

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebGL

https://github.com/mrdoob/three.js

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebVRWebGL

https://github.com/mrdoob/three.js

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebVRWebGL

https://github.com/mrdoob/three.js

three.js

Ricardo Cabello

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

x: 0, y: 1.6, z: 0

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

x: 0, y: 1.6, z: 0

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let scene = new THREE.Scene();let camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 10000 );let renderer = new THREE.WebGLRenderer();

renderer.setSize( window.innerWidth, window.innerHeight );document.body.appendChild( renderer.domElement );

let geometry = new THREE.SphereGeometry( 500, 60, 40 );geometry.scale( -1, 1, 1 );

let video = document.createElement( 'video' );let videoTexture = new THREE.VideoTexture( video );let videoMaterial = new THREE.MeshBasicMaterial( { map: videoTexture } );let mesh = new THREE.Mesh( geometry, videoMaterial );

function render() {requestAnimationFrame( render );renderer.render( scene, camera );

}

render();

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let scene = new THREE.Scene();let camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 10000 );let renderer = new THREE.WebGLRenderer();

renderer.setSize( window.innerWidth, window.innerHeight );document.body.appendChild( renderer.domElement );

let geometry = new THREE.SphereGeometry( 500, 60, 40 );geometry.scale( -1, 1, 1 );

let video = document.createElement( 'video' );let videoTexture = new THREE.VideoTexture( video );let videoMaterial = new THREE.MeshBasicMaterial( { map: videoTexture } );let mesh = new THREE.Mesh( geometry, videoMaterial );

function render() {requestAnimationFrame( render );renderer.render( scene, camera );

}

render();

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let scene = new THREE.Scene();let camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 10000 );let renderer = new THREE.WebGLRenderer();

renderer.setSize( window.innerWidth, window.innerHeight );document.body.appendChild( renderer.domElement );

let geometry = new THREE.SphereGeometry( 500, 60, 40 );geometry.scale( -1, 1, 1 );

let video = document.createElement( 'video' );let videoTexture = new THREE.VideoTexture( video );let videoMaterial = new THREE.MeshBasicMaterial( { map: videoTexture } );let mesh = new THREE.Mesh( geometry, videoMaterial );

function render() {requestAnimationFrame( render );renderer.render( scene, camera );

}

render();

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let scene = new THREE.Scene();let camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 10000 );let renderer = new THREE.WebGLRenderer();

renderer.setSize( window.innerWidth, window.innerHeight );document.body.appendChild( renderer.domElement );

let geometry = new THREE.SphereGeometry( 500, 60, 40 );geometry.scale( -1, 1, 1 );

let video = document.createElement( 'video' );let videoTexture = new THREE.VideoTexture( video );let videoMaterial = new THREE.MeshBasicMaterial( { map: videoTexture } );let mesh = new THREE.Mesh( geometry, videoMaterial );

function render() {requestAnimationFrame( render );renderer.render( scene, camera );

}

render();

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let vrDisplay;

navigator.getVRDisplays().then( function( displays ) { if ( displays.length > 0 ) { vrDisplay = displays[ 0 ]; } else { console.log( 'No VR Displays found.' ); }});

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

VRDisplay.isConnectedVRDisplay.isPresenting

VRDisplay.getEyeParameters()VRDisplay.requestAnimationFrame()

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

vrDisplay.requestPresent( [ { source: myCanvas } ] );

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

myButton.addEventListener( 'click', function() { vrDisplay.requestPresent( [ { source: myCanvas } ] );});

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

myButton.addEventListener( 'click', function() { vrDisplay.requestPresent( [ { source: myCanvas } ] ) .then( function() { vrDisplay.requestAnimationFrame( render ); });});

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

function render() { vrDisplay.requestAnimationFrame( render );

}

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

function render() { vrDisplay.requestAnimationFrame( render );

// update display pose // update scene and meshes

}

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let pose = vrDisplay.getPose();

console.log( pose.orientation );// [ 0, 0, 0, 1 ]// [ -0.0000724312, -0.06752134, 0.0028374712, 0.9977243 ]console.log( pose.position );// null// [ 0.05234, -0.043485, 0.0003243 ]

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

let leftEyeParameters = vrDisplay.getEyeParameters( 'left' );

console.log( leftEyeParameters.offset );// [ -0.03, 0, 0 ]console.log( leftEyeParameters.renderWidth );// 640.5console.log( leftEyeParameters.renderHeight );// 721

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

function render() { vrDisplay.requestAnimationFrame( render );

// update display pose // update scene and meshes

vrDisplay.submitFrame( pose );}

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://caniuse.com/#search=webvr

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebVRWebGL

three.js WebVR Polyfill

https://github.com/googlevr/webvr-polyfill

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

WebGL & static image fallbacks

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

WebGL

Touch & Gyroscope Input

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Mobile and Desktop VR Devices

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Mobile and Desktop VR Devices

Progressive Loading

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebVRWebGL

three.js WebVR Polyfill

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebVRWebGL

three.js WebVR Polyfill

A-Frame by Mozilla

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Browser

WebVRWebGL

three.js WebVR Polyfill

A-Frame by Mozilla React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

<head> <script src="aframe.js"></script></head><body> <a-scene> <a-assets> <video id="video" src="video.mp4" autoplay loop></video> </a-assets> <a-videosphere src="#video"></a-videosphere> </a-scene></body>

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

<head> <script src="aframe.js"></script></head><body> <a-scene> <a-assets> <video id="video" src="video.mp4" autoplay loop></video> </a-assets> <a-videosphere src="#video"></a-videosphere> </a-scene></body>

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

<head> <script src="aframe.js"></script></head><body> <a-scene> <a-assets> <video id="video" src="video.mp4" autoplay loop></video> </a-assets> <a-videosphere src="#video"></a-videosphere> </a-scene></body>

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

<head> <script src="aframe.js"></script></head><body> <a-scene> <a-assets> <video id="video" src="video.mp4" autoplay loop></video> </a-assets> <a-videosphere src="#video"></a-videosphere> </a-scene></body>

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

<a-box> <a-cone> <a-cylinder> <a-dodecahedron><a-icosahedron> <a-octahedron> <a-ring> <a-sphere><a-tetrahedron> <a-torus-knot> <a-torus>

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

A-Frame by Mozilla

geildanke.com @fischaelameer

<a-video> <a-videosphere> <a-image> <a-sound><a-gltf-model> <a-obj-model> <a-text><a-light> <a-sky> <a-cursor>

<a-box> <a-cone> <a-cylinder> <a-dodecahedron><a-icosahedron> <a-octahedron> <a-ring> <a-sphere><a-tetrahedron> <a-torus-knot> <a-torus>

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

import React from 'react';import { AppRegistry, VideoPano, View } from 'react-vr';

class GEILDANKE_REACTVR_PANO extends React.Component { render() { return ( <View> <VideoPano source={{uri: 'video.mp4'}} /> </View> ); }};

AppRegistry.registerComponent('GEILDANKE_REACTVR_PANO', () => GEILDANKE_REACTVR_PANO);

React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

import React from 'react';import { AppRegistry, VideoPano, View } from 'react-vr';

class GEILDANKE_REACTVR_PANO extends React.Component { render() { return ( <View> <VideoPano source={{uri: 'video.mp4'}} /> </View> ); }};

AppRegistry.registerComponent('GEILDANKE_REACTVR_PANO', () => GEILDANKE_REACTVR_PANO);

React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

import React from 'react';import { AppRegistry, VideoPano, View } from 'react-vr';

class GEILDANKE_REACTVR_PANO extends React.Component { render() { return ( <View> <VideoPano source={{uri: 'video.mp4'}} /> </View> ); }};

AppRegistry.registerComponent('GEILDANKE_REACTVR_PANO', () => GEILDANKE_REACTVR_PANO);

React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Box Cylinder CylindricalPanel Plane Sphere

geildanke.com @fischaelameer

AmbientLight DirectionalLight PointLight SpotLight

Model Sound VrButton

Pano Video VideoPano

React VR by Facebook

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Browser

WebVRWebGL

three.js WebVR Polyfill

A-Frame by Mozilla React VR by Facebook

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Browser

WebVRGamepad WebGL

three.js WebVR Polyfill

A-Frame by Mozilla React VR by Facebook

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Browser

WebVRGamepad Web AudioWebGL

three.js WebVR Polyfill

A-Frame by Mozilla React VR by Facebook

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Browser

WebVRGamepad Web Audio Web SpeechWebGL

three.js WebVR Polyfill

A-Frame by Mozilla React VR by Facebook

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

UX Design for VR

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Comfort

Interpretability

Usefulness

Delight

Beau Cronin

https://medium.com/@beaucronin/the-hierarchy-of-needs-in-virtual-reality-development-4333a4833acc

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Presence

Comfort

Interpretability

Usefulness

Delight

Beau Cronin

https://medium.com/@beaucronin/the-hierarchy-of-needs-in-virtual-reality-development-4333a4833acc

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Ergonomics

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

It was the pioneer days; people had to make their own interrogation rooms. Out of cornmeal. These endless days are finally ending in a blaze. When I say, 'I love you,' it's not because I want you or because I can't have you. It's my estimation that every man ever got a statue made of him was one kind of sommbitch or another. Oh my god you will never believe what happened at school today. From beneath you, it devours. I am never gonna see a merman, ever.It was supposed to confuse him, but it just made him peppy. It was like the Heimlich, with stripes! How did your brain even learn human speech? I'm just so curious.Apocalypse, we've all been there; the same old trips, why should we care? Frankly, it's ludicrous to have these interlocking bodies and not...interlock. I just don't see why everyone's always picking on Marie-Antoinette. You're the one freaky thing in my freaky world that still makes sense to me. You are talking crazy-person talk.

http://www.commercekitchen.com/whedon-ipsum/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

It was the pioneer days; people had to make their own interrogation rooms. Out of cornmeal. These endless days are finally ending in a blaze. When I say, 'I love you,' it's not because I want you or because I can't have you. It's my estimation that every man ever got a statue made of him was one kind of sommbitch or another. Oh my god you will never believe what happened at school today. From beneath you, it devours. I am never gonna see a merman, ever.It was supposed to confuse him, but it just made him peppy. It was like the Heimlich, with stripes! How did your brain even learn human speech? I'm just so curious.Apocalypse, we've all been there; the same old trips, why should we care? Frankly, it's ludicrous to have these interlocking bodies and not...interlock. I just don't see why everyone's always picking on Marie-Antoinette. You're the one freaky thing in my freaky world that still makes sense to me. You are talking crazy-person talk.

http://www.commercekitchen.com/whedon-ipsum/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

It was the pioneer days; people had to make their own interrogation rooms. Out of cornmeal. These endless days are finally ending in a blaze. When I say, 'I love you,' it's not because I want you or because I can't have you. It's my estimation that every man ever got a statue made of him was one kind of sommbitch or another. Oh my god you will never believe what happened at school today. From beneath you, it devours. I am never gonna see a merman, ever.It was supposed to confuse him, but it just made him peppy. It was like the Heimlich, with stripes! How did your brain even learn human speech? I'm just so curious.Apocalypse, we've all been there; the same old trips, why should we care? Frankly, it's ludicrous to have these interlocking bodies and not...interlock. I just don't see why everyone's always picking on Marie-Antoinette. You're the one freaky thing in my freaky world that still makes sense to me. You are talking crazy-person talk.

http://www.commercekitchen.com/whedon-ipsum/

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

70°

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

130°

Comfortably bending 30° to each side

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

230°

Stretching 80° to each side

https://www.youtube.com/watch?v=00vzW2-PvvE

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

0.5m

20m

https://www.youtube.com/watch?v=00vzW2-PvvE

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

~20px

~10ppd

< 20px

60ppd

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://www.youtube.com/watch?v=ES9jArHRFHQ

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

dmm

https://www.youtube.com/watch?v=ES9jArHRFHQ

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

dmm = distance-independent millimeter

https://www.youtube.com/watch?v=ES9jArHRFHQ

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://sizecalc.com

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://sizecalc.com

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Gaze Cues

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Gaze Cues

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Gaze Cues

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Gaze Cues

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

Gaze Cues

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Goodbye, UX metaphors!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Goodbye, UX metaphors!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

Goodbye, UX metaphors!

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

avoid eyestrain: use darker colors

avoid focussing on different depths

do not trigger phobias

use correct scales

do not move things fast towards the camera

do not attach things near the camera

make the user comfortable

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

avoid eyestrain: use darker colors

avoid focussing on different depths

do not trigger phobias

use correct scales

do not move things fast towards the camera

do not attach things near the camera

make the user comfortable

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

avoid eyestrain: use darker colors

avoid focussing on different depths

do not trigger phobias

use correct scales

do not move things fast towards the camera

do not attach things near the camera

make the user comfortable

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

avoid eyestrain: use darker colors

avoid focussing on different depths

do not trigger phobias

use correct scales

do not move things fast towards the camera

do not attach things near the camera

make the user comfortable

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

avoid eyestrain: use darker colors

avoid focussing on different depths

do not trigger phobias

use correct scales

do not move things fast towards the camera

do not attach things near the camera

make the user comfortable

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

avoid eyestrain: use darker colors

avoid focussing on different depths

do not trigger phobias

use correct scales

do not move things fast towards the camera

do not attach things near the camera

make the user comfortable

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerIcon made by Freepik from www.flaticon.com

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerIcon made by Freepik from www.flaticon.com

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://web.colby.edu/cogblog/2016/05/09/2451/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://web.colby.edu/cogblog/2016/05/09/2451/

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

http://vtrav.com/2015/04/nose-reduces-simulator-sickness/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

http://vtrav.com/2015/04/nose-reduces-simulator-sickness/

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

no acceleration

do not move the horizon or the camera

always keep a low latency and a high frame rate

avoid flicker and blur

add a stable focus point

support short usage

abstract design is better than realistic

do not make your users sick!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://blog.mozvr.com/a-painter/http://www.kotaku.co.uk/2016/12/16/the-state-of-virtual-reality-in-2016

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://blog.mozvr.com/a-painter/http://www.kotaku.co.uk/2016/12/16/the-state-of-virtual-reality-in-2016

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

You are responsible for the well-being of your users!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://www.reddit.com/r/Vive/comments/4i49d3/when_instinct_takes_over/https://www.reddit.com/r/VRFail/comments/4s7nc1/friend_loses_his_vrginity_and_then_some_crappy/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://www.reddit.com/r/Vive/comments/4i49d3/when_instinct_takes_over/https://www.reddit.com/r/VRFail/comments/4s7nc1/friend_loses_his_vrginity_and_then_some_crappy/

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://imgur.com/gallery/DDaNZhttps://giphy.com/gifs/leroypatterson-l3UcefaIhwXpDFeBa

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

https://imgur.com/gallery/DDaNZhttps://giphy.com/gifs/leroypatterson-l3UcefaIhwXpDFeBa

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017

You are responsible for the well-being of your users!

geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer

http://www.uxofvr.com/

https://webvr.rocks/

General information

https://webvr-slack.herokuapp.com/

Community

https://www.reddit.com/r/WebVR/

https://w3c.github.io/webvr/

https://github.com/googlevr/webvr-polyfill

https://threejs.org/

API, frameworks, libraries

https://facebook.github.io/react-vr/

https://aframe.io/

https://geildanke.com/en/vr/

Geil,Danke!

https://bit.ly/webvrcomet

geildanke.com @fischaelameer

Thank you!

@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017