SlideShare ist ein Scribd-Unternehmen logo
1 von 162
Downloaden Sie, um offline zu lesen
geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
More Ways to Make Your Users Sick
About 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.isConnected
VRDisplay.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.5
console.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/DDaNZ
https://giphy.com/gifs/leroypatterson-l3UcefaIhwXpDFeBa
@fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017
https://imgur.com/gallery/DDaNZ
https://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

Weitere ähnliche Inhalte

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

Ähnlich wie More Ways to Make Your Users Sick – A talk about WebVR and UX Design (20)

WebXR: A New Dimension For The Web Writing Virtual and Augmented Reality Apps...
WebXR: A New Dimension For The Web Writing Virtual and Augmented Reality Apps...WebXR: A New Dimension For The Web Writing Virtual and Augmented Reality Apps...
WebXR: A New Dimension For The Web Writing Virtual and Augmented Reality Apps...
 
WebVR: Developing for the Immersive Web
WebVR: Developing for the Immersive WebWebVR: Developing for the Immersive Web
WebVR: Developing for the Immersive Web
 
Mixed Realities for Web - Carsten Sandtner - Codemotion Amsterdam 2018
Mixed Realities for Web - Carsten Sandtner - Codemotion Amsterdam 2018Mixed Realities for Web - Carsten Sandtner - Codemotion Amsterdam 2018
Mixed Realities for Web - Carsten Sandtner - Codemotion Amsterdam 2018
 
Портируем существующее Web-приложение в виртуальную реальность / Денис Радин ...
Портируем существующее Web-приложение в виртуальную реальность / Денис Радин ...Портируем существующее Web-приложение в виртуальную реальность / Денис Радин ...
Портируем существующее Web-приложение в виртуальную реальность / Денис Радин ...
 
Up And Running With Web VR Fall 2014
Up And Running With Web VR Fall 2014Up And Running With Web VR Fall 2014
Up And Running With Web VR Fall 2014
 
Browser-Based Virtual Reality April 2015
Browser-Based Virtual Reality April 2015Browser-Based Virtual Reality April 2015
Browser-Based Virtual Reality April 2015
 
FINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile webFINHTML5 - Breaking the mobile web
FINHTML5 - Breaking the mobile web
 
Migrating your Web app to Virtual Reality
Migrating your Web app to Virtual RealityMigrating your Web app to Virtual Reality
Migrating your Web app to Virtual Reality
 
XebiConFr 15 - Brace yourselves Angular 2 is coming
XebiConFr 15 - Brace yourselves Angular 2 is comingXebiConFr 15 - Brace yourselves Angular 2 is coming
XebiConFr 15 - Brace yourselves Angular 2 is coming
 
Effective Application State Management (@DevCamp2017)
Effective Application State Management (@DevCamp2017)Effective Application State Management (@DevCamp2017)
Effective Application State Management (@DevCamp2017)
 
Cloud Spin - building a photo booth with the Google Cloud Platform
Cloud Spin - building a photo booth with the Google Cloud PlatformCloud Spin - building a photo booth with the Google Cloud Platform
Cloud Spin - building a photo booth with the Google Cloud Platform
 
Browsers with Wings
Browsers with WingsBrowsers with Wings
Browsers with Wings
 
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
 
Codemotion Progressive Web Applications Pwa Webinar - Jorge Ferreiro - @jgfer...
Codemotion Progressive Web Applications Pwa Webinar - Jorge Ferreiro - @jgfer...Codemotion Progressive Web Applications Pwa Webinar - Jorge Ferreiro - @jgfer...
Codemotion Progressive Web Applications Pwa Webinar - Jorge Ferreiro - @jgfer...
 
Writing Virtual And Augmented Reality Apps With Web Technology
Writing Virtual And Augmented Reality Apps With Web TechnologyWriting Virtual And Augmented Reality Apps With Web Technology
Writing Virtual And Augmented Reality Apps With Web Technology
 
Writing Virtual And Augmented Reality Apps With Web Technology
Writing Virtual And Augmented Reality Apps With Web TechnologyWriting Virtual And Augmented Reality Apps With Web Technology
Writing Virtual And Augmented Reality Apps With Web Technology
 
NEW LAUNCH! Building Virtual Reality and Augmented Reality Applications with ...
NEW LAUNCH! Building Virtual Reality and Augmented Reality Applications with ...NEW LAUNCH! Building Virtual Reality and Augmented Reality Applications with ...
NEW LAUNCH! Building Virtual Reality and Augmented Reality Applications with ...
 
Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016Enabling Microservice @ Orbitz - GOTO Chicago 2016
Enabling Microservice @ Orbitz - GOTO Chicago 2016
 
Introduction to Immersive Web
Introduction to Immersive WebIntroduction to Immersive Web
Introduction to Immersive Web
 
Getting Started on Your Mixed-Reality Strategy
Getting Started on Your Mixed-Reality StrategyGetting Started on Your Mixed-Reality Strategy
Getting Started on Your Mixed-Reality Strategy
 

Mehr von GeilDanke

Mehr von GeilDanke (8)

Using New Web APIs For Your Own Pleasure – How I Wrote New Features For My Vi...
Using New Web APIs For Your Own Pleasure – How I Wrote New Features For My Vi...Using New Web APIs For Your Own Pleasure – How I Wrote New Features For My Vi...
Using New Web APIs For Your Own Pleasure – How I Wrote New Features For My Vi...
 
Using New Web APIs For Your Own Pleasure
Using New Web APIs For Your Own PleasureUsing New Web APIs For Your Own Pleasure
Using New Web APIs For Your Own Pleasure
 
Creating Augmented Reality Apps with Web Technology
Creating Augmented Reality Apps with Web TechnologyCreating Augmented Reality Apps with Web Technology
Creating Augmented Reality Apps with Web Technology
 
2016 First steps with Angular 2 – enterjs
2016 First steps with Angular 2 – enterjs2016 First steps with Angular 2 – enterjs
2016 First steps with Angular 2 – enterjs
 
2014 HTML und CSS für Designer – Pubkon
2014 HTML und CSS für Designer – Pubkon2014 HTML und CSS für Designer – Pubkon
2014 HTML und CSS für Designer – Pubkon
 
2013 Digitale Magazine erstellen - Konzeption und Redaktion
2013 Digitale Magazine erstellen - Konzeption und Redaktion2013 Digitale Magazine erstellen - Konzeption und Redaktion
2013 Digitale Magazine erstellen - Konzeption und Redaktion
 
2014 Adobe DPS Update 29
2014 Adobe DPS Update 292014 Adobe DPS Update 29
2014 Adobe DPS Update 29
 
2012 Digital Publishing IDUG Stuttgart
2012 Digital Publishing IDUG Stuttgart2012 Digital Publishing IDUG Stuttgart
2012 Digital Publishing IDUG Stuttgart
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Kürzlich hochgeladen (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

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

  • 1. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer More Ways to Make Your Users Sick About WebVR and UX Design @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017
  • 2. geildanke.com @fischaelameer You should care about WebVR, because you care about your users. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017
  • 3. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer VR Concepts
  • 4. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer VR Concepts WebVR API
  • 5. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer VR Concepts WebVR API UX Design & VR
  • 6. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Virtual Reality is tricking our eyes and brain to think of a 2D image to be in 3D.
  • 7. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Virtual Reality changes the 
 way we relate to technology.
  • 8. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 VR Is Good For Understanding Spatial Relationships
  • 9. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 VR Is Good For Multi Tasking
  • 10. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 VR Is Good For Simulations
  • 11. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 What is VR Bad At?

  • 12. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 https://www.reddit.com/r/VRFail/comments/4p9zgj/pool_shot/
  • 13. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 https://www.reddit.com/r/VRFail/comments/4p9zgj/pool_shot/
  • 14. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Virtual Reality Hardware and Concepts
  • 15. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Mobile VR Desktop VR Standalone VR Google Cardboard Samsung Gear VR Google Daydream View
  • 16. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Mobile VR Desktop VR Standalone VR Oculus Rift HTC Vive Playstation VR
  • 17. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Mobile VR Desktop VR Standalone VR https://en.wikipedia.org/wiki/Virtual_Boy
  • 18. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Stereoscopic Images
  • 19. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 20. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 21. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 22. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer IPD = Interpupillary distance
  • 23. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 24. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 25. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 26. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Tracking
  • 27. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 28. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Rotation
  • 29. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Rotation Position
  • 30. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 http://bit.ly/2iK1Zv7
  • 31. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 http://bit.ly/2iK1Zv7
  • 32. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 33. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Rotation Position
  • 34. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser https://github.com/mrdoob/three.js
  • 35. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebGL https://github.com/mrdoob/three.js
  • 36. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebVRWebGL https://github.com/mrdoob/three.js
  • 37. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebVRWebGL https://github.com/mrdoob/three.js three.js Ricardo Cabello
  • 38. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 39. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 40. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 41. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 42. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer x: 0, y: 1.6, z: 0
  • 43. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer x: 0, y: 1.6, z: 0
  • 44. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 45. 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();
  • 46. 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();
  • 47. 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();
  • 48. 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();
  • 49. 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.' ); } });
  • 50. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer VRDisplay.isConnected VRDisplay.isPresenting VRDisplay.getEyeParameters() VRDisplay.requestAnimationFrame()
  • 51. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer vrDisplay.requestPresent( [ { source: myCanvas } ] );
  • 52. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer myButton.addEventListener( 'click', function() { vrDisplay.requestPresent( [ { source: myCanvas } ] ); });
  • 53. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer myButton.addEventListener( 'click', function() { vrDisplay.requestPresent( [ { source: myCanvas } ] ) .then( function() { vrDisplay.requestAnimationFrame( render ); }); });
  • 54. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer function render() { vrDisplay.requestAnimationFrame( render ); }
  • 55. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer function render() { vrDisplay.requestAnimationFrame( render ); // update display pose // update scene and meshes }
  • 56. 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 ]
  • 57. 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.5 console.log( leftEyeParameters.renderHeight ); // 721
  • 58. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer function render() { vrDisplay.requestAnimationFrame( render ); // update display pose // update scene and meshes vrDisplay.submitFrame( pose ); }
  • 59. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 60. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 61. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://caniuse.com/#search=webvr
  • 62. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 63. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 64. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 65. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 66. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 67. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebVRWebGL three.js WebVR Polyfill https://github.com/googlevr/webvr-polyfill
  • 68. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer WebGL & static image fallbacks
  • 69. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer WebGL Touch & Gyroscope Input
  • 70. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Mobile and Desktop VR Devices
  • 71. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Mobile and Desktop VR Devices Progressive Loading
  • 72. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebVRWebGL three.js WebVR Polyfill
  • 73. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebVRWebGL three.js WebVR Polyfill A-Frame by Mozilla
  • 74. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Browser WebVRWebGL three.js WebVR Polyfill A-Frame by Mozilla React VR by Facebook
  • 75. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer A-Frame by Mozilla
  • 76. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer A-Frame by Mozilla
  • 77. 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>
  • 78. 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>
  • 79. 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>
  • 80. 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>
  • 81. 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
  • 82. 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>
  • 83. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer React VR by Facebook
  • 84. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer React VR by Facebook
  • 85. 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
  • 86. 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
  • 87. 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
  • 88. 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
  • 89. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 90. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Browser WebVRWebGL three.js WebVR Polyfill A-Frame by Mozilla React VR by Facebook
  • 91. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Browser WebVRGamepad WebGL three.js WebVR Polyfill A-Frame by Mozilla React VR by Facebook
  • 92. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Browser WebVRGamepad Web AudioWebGL three.js WebVR Polyfill A-Frame by Mozilla React VR by Facebook
  • 93. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Browser WebVRGamepad Web Audio Web SpeechWebGL three.js WebVR Polyfill A-Frame by Mozilla React VR by Facebook
  • 94. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 UX Design for VR
  • 95. 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
  • 96. 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
  • 97. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Ergonomics
  • 98. @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/
  • 99. @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/
  • 101. 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/
  • 102. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 103. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 104. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 105. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 106. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer 70°
  • 107. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer 130° Comfortably bending 30° to each side
  • 108. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer 230° Stretching 80° to each side https://www.youtube.com/watch?v=00vzW2-PvvE
  • 109. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer 0.5m 20m https://www.youtube.com/watch?v=00vzW2-PvvE
  • 110. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer ~20px ~10ppd < 20px 60ppd
  • 111. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 112. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 113. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 114. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://www.youtube.com/watch?v=ES9jArHRFHQ
  • 115. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer dmm https://www.youtube.com/watch?v=ES9jArHRFHQ
  • 116. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer dmm = distance-independent millimeter https://www.youtube.com/watch?v=ES9jArHRFHQ
  • 117. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://sizecalc.com
  • 118. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerhttps://sizecalc.com
  • 119. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 120. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 121. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 122. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 123. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Gaze Cues
  • 124. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Gaze Cues
  • 125. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Gaze Cues
  • 126. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Gaze Cues
  • 127. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer Gaze Cues
  • 129. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Goodbye, UX metaphors!
  • 130. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Goodbye, UX metaphors!
  • 131. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 Goodbye, UX metaphors!
  • 132. 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
  • 133. 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
  • 134. 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
  • 135. 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
  • 136. 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
  • 137. 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
  • 138. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerIcon made by Freepik from www.flaticon.com
  • 139. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameerIcon made by Freepik from www.flaticon.com
  • 140. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 141. geildanke.com @ FRONTEND CONF ZURICH 2017 @fischaelameer
  • 142. 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!
  • 143. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 https://web.colby.edu/cogblog/2016/05/09/2451/
  • 144. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 https://web.colby.edu/cogblog/2016/05/09/2451/
  • 145. 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!
  • 146. 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!
  • 147. 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!
  • 148. 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!
  • 149. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 http://vtrav.com/2015/04/nose-reduces-simulator-sickness/
  • 150. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 http://vtrav.com/2015/04/nose-reduces-simulator-sickness/
  • 151. 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!
  • 152. 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!
  • 153. @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
  • 154. @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
  • 155. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 You are responsible for the 
 well-being of your users!
  • 156. @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/
  • 157. @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/
  • 158. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 https://imgur.com/gallery/DDaNZ https://giphy.com/gifs/leroypatterson-l3UcefaIhwXpDFeBa
  • 159. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 https://imgur.com/gallery/DDaNZ https://giphy.com/gifs/leroypatterson-l3UcefaIhwXpDFeBa
  • 160. @fischaelameergeildanke.com @ FRONTEND CONF ZURICH 2017 You are responsible for the 
 well-being of your users!
  • 161. 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