Since the early years of tech, engineers and designers tried to overcome the separation between their product and their users. What if I tell you, you do not have to worry about this anymore? With the emergence of VR, your users are finally in your applications. This changes the way people interact with the digital world dramatically. And it increases your power over other people's lives. But with great power comes great responsibility – this is why my talk will focus on Virtual Reality in the web and what you as a developer or designer can do, if you do not want to harm your users. We will begin with a short introduction into the basic concepts of virtual reality, like stereoscopic images and tracking. Then we will take a look at the current status of the WebVR ecosystem, like the WebVR API and the Gamepad API. This will lead us to the topic I'm most passionate about: a good user experience in VR applications. As developers we are confronted with various questions: How can we avoid triggering simulation sickness or what can we do to prevent triggering phobias or seizures?
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
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();
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
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/
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
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!
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!
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!