Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

How to Make Your Users Sick in 60 Seconds – About UX Design, WebVR and React VR

1,043 views

Published on

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. Or as Douglas Adams wrote in his Hitchhiker’s Guide to the Galaxy: “Being virtually killed by a virtual laser in a virtual space is just as effective as the real thing.” I this talk you’ll learn how to write a responsible WebVR application with ReactVR, that does not hurt your users. You’ll get an overview of the WebVR ecosystem, beginning with a short introduction of the basic VR concepts. You will also see the current status of the ReactVR in action with some code samples. Which leads to another important point of this talk: the struggles of creating VR applications today. There are a lot of unanswered questions, e.g. UX design challenges, input devices, motion sickness or browser support. This is why the talk ends with my advice on how to create responsible applications, that won’t harm your users – neither physically nor psychologically.

Published in: Technology
  • Like to know how to take easy surveys and get huge checks - then you need to visit us now! Having so many paid surveys available to you all the time let you live the kind of life you want. learn more...➤➤ https://tinyurl.com/make2793amonth
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

How to Make Your Users Sick in 60 Seconds – About UX Design, WebVR and React VR

  1. 1. geildanke.com @ RuhrJS17 @fischaelameer How to Make Your User Sick in 60 Seconds About UX Design, WebVR, and ReactVR
  2. 2. geildanke.com @ RuhrJS17 @fischaelameer You Should Care About WebVR Because You Care About Your Users.
  3. 3. geildanke.com @ RuhrJS17 @fischaelameer Concepts
  4. 4. geildanke.com @ RuhrJS17 @fischaelameer Concepts Code
  5. 5. geildanke.com @ RuhrJS17 @fischaelameer Concepts Code Design
  6. 6. geildanke.com @ RuhrJS17 @fischaelameer Virtual Reality Is Tricking Our Eyes And Brain to Think of a 2D Image to Be in 3D.
  7. 7. geildanke.com @ RuhrJS17 @fischaelameer Virtual Reality Changes The Way We Relate to Technology.
  8. 8. geildanke.com @ RuhrJS17 @fischaelameer VR Is Good For Understanding Spatial Relationships
  9. 9. geildanke.com @ RuhrJS17 @fischaelameer VR Is Good For Multi Tasking
  10. 10. geildanke.com @ RuhrJS17 @fischaelameer VR Is Good For Simulations
  11. 11. geildanke.com @ RuhrJS17 @fischaelameer What Is VR Bad At?
  12. 12. geildanke.com @ RuhrJS17 @fischaelameer https://www.reddit.com/r/VRFail/comments/4p9zgj/pool_shot/
  13. 13. geildanke.com @ RuhrJS17 @fischaelameer https://www.reddit.com/r/VRFail/comments/4p9zgj/pool_shot/
  14. 14. geildanke.com @ RuhrJS17 @fischaelameer VR Concepts: Stereoscopic Images
  15. 15. geildanke.com @ RuhrJS17 @fischaelameer
  16. 16. geildanke.com @ RuhrJS17 @fischaelameer
  17. 17. geildanke.com @ RuhrJS17 @fischaelameer IPD
  18. 18. geildanke.com @ RuhrJS17 @fischaelameer InterPupillary Distance
  19. 19. geildanke.com @ RuhrJS17 @fischaelameer
  20. 20. geildanke.com @ RuhrJS17 @fischaelameer
  21. 21. geildanke.com @ RuhrJS17 @fischaelameer VR Concepts: Tracking
  22. 22. geildanke.com @ RuhrJS17 @fischaelameer Rotation Position
  23. 23. geildanke.com @ RuhrJS17 @fischaelameer Rotation Position
  24. 24. geildanke.com @ RuhrJS17 @fischaelameer Rotation Position
  25. 25. geildanke.com @ RuhrJS17 @fischaelameer http://bit.ly/2iK1Zv7
  26. 26. geildanke.com @ RuhrJS17 @fischaelameer http://bit.ly/2iK1Zv7
  27. 27. geildanke.com @ RuhrJS17 @fischaelameer Rotation Position
  28. 28. geildanke.com @ RuhrJS17 @fischaelameer Rotation Position
  29. 29. geildanke.com @ RuhrJS17 @fischaelameer WebVR Concepts: Tech Stack
  30. 30. geildanke.com @ RuhrJS17 @fischaelameer Browser https://github.com/mrdoob/three.js
  31. 31. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL https://github.com/mrdoob/three.js
  32. 32. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR https://github.com/mrdoob/three.js
  33. 33. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR three.js Ricardo Cabello https://github.com/mrdoob/three.js
  34. 34. geildanke.com @ RuhrJS17 @fischaelameer https://caniuse.com/#search=webvr
  35. 35. geildanke.com @ RuhrJS17 @fischaelameer
  36. 36. geildanke.com @ RuhrJS17 @fischaelameer
  37. 37. geildanke.com @ RuhrJS17 @fischaelameer
  38. 38. geildanke.com @ RuhrJS17 @fischaelameer
  39. 39. geildanke.com @ RuhrJS17 @fischaelameer
  40. 40. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR three.js WebVR Polyfill https://github.com/googlevr/webvr-polyfill
  41. 41. geildanke.com @ RuhrJS17 @fischaelameer Static Image With Fallback
  42. 42. geildanke.com @ RuhrJS17 @fischaelameer Static Image With Fallback WebGL With Touch And Gyroscope
  43. 43. geildanke.com @ RuhrJS17 @fischaelameer Static Image With Fallback WebGL With Touch And Gyroscope Mobile & Desktop VR Devices
  44. 44. geildanke.com @ RuhrJS17 @fischaelameer WebVR Code: Full-Sphere Video
  45. 45. geildanke.com @ RuhrJS17 @fischaelameer
  46. 46. geildanke.com @ RuhrJS17 @fischaelameer
  47. 47. geildanke.com @ RuhrJS17 @fischaelameer x: 0, y: 0, z: 0
  48. 48. geildanke.com @ RuhrJS17 @fischaelameer x: 0, y: 0, z: 0
  49. 49. geildanke.com @ RuhrJS17 @fischaelameer
  50. 50. geildanke.com @ RuhrJS17 @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();
  51. 51. geildanke.com @ RuhrJS17 @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();
  52. 52. geildanke.com @ RuhrJS17 @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();
  53. 53. geildanke.com @ RuhrJS17 @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();
  54. 54. geildanke.com @ RuhrJS17 @fischaelameer let vrDisplay; navigator.getVRDisplays().then( function( displays ) { if ( displays.length > 0 ) { vrDisplay = displays[ 0 ]; } else { console.log( 'No VR Displays found.' ); } });
  55. 55. geildanke.com @ RuhrJS17 @fischaelameer VRDisplay.isConnected VRDisplay.isPresenting VRDisplay.getEyeParameters() VRDisplay.requestAnimationFrame()
  56. 56. geildanke.com @ RuhrJS17 @fischaelameer vrDisplay.requestPresent( [ { source: myCanvas } ] );
  57. 57. geildanke.com @ RuhrJS17 @fischaelameer myButton.addEventListener( 'click', function() { vrDisplay.requestPresent( [ { source: myCanvas } ] ); });
  58. 58. geildanke.com @ RuhrJS17 @fischaelameer myButton.addEventListener( 'click', function() { vrDisplay.requestPresent( [ { source: myCanvas } ] ) .then( function() { vrDisplay.requestAnimationFrame( render ); }); });
  59. 59. geildanke.com @ RuhrJS17 @fischaelameer function render() { vrDisplay.requestAnimationFrame( render ); }
  60. 60. geildanke.com @ RuhrJS17 @fischaelameer function render() { vrDisplay.requestAnimationFrame( render ); // update display pose // update scene and meshes }
  61. 61. geildanke.com @ RuhrJS17 @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 ]
  62. 62. geildanke.com @ RuhrJS17 @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
  63. 63. geildanke.com @ RuhrJS17 @fischaelameer function render() { vrDisplay.requestAnimationFrame( render ); // update display pose // update scene and meshes vrDisplay.submitFrame( pose ); }
  64. 64. geildanke.com @ RuhrJS17 @fischaelameer
  65. 65. geildanke.com @ RuhrJS17 @fischaelameer
  66. 66. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR three.js WebVR Polyfill
  67. 67. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR three.js WebVR Polyfill A-Frame
  68. 68. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR three.js WebVR Polyfill A-FrameReact VR
  69. 69. geildanke.com @ RuhrJS17 @fischaelameer A-Frame by Mozilla
  70. 70. geildanke.com @ RuhrJS17 @fischaelameer <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>
  71. 71. geildanke.com @ RuhrJS17 @fischaelameer <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>
  72. 72. geildanke.com @ RuhrJS17 @fischaelameer <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>
  73. 73. geildanke.com @ RuhrJS17 @fischaelameer <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>
  74. 74. <a-box> <a-cone> <a-cylinder> <a-dodecahedron> <a-icosahedron> <a-octahedron> <a-ring> <a-sphere> <a-tetrahedron> <a-torus-knot> <a-torus>
  75. 75. geildanke.com @ RuhrJS17 @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>
  76. 76. geildanke.com @ RuhrJS17 @fischaelameer React VR by Facebook
  77. 77. geildanke.com @ RuhrJS17 @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);
  78. 78. geildanke.com @ RuhrJS17 @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);
  79. 79. geildanke.com @ RuhrJS17 @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);
  80. 80. geildanke.com @ RuhrJS17 @fischaelameer Box Cylinder CylindricalPanel Plane Sphere AmbientLight DirectionalLight PointLight SpotLight Model Sound VrButton Pano Video VideoPano
  81. 81. geildanke.com @ RuhrJS17 @fischaelameer
  82. 82. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGL WebVR three.js WebVR Polyfill React VR A-Frame
  83. 83. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGLGamepad WebVR three.js WebVR Polyfill React VR A-Frame
  84. 84. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGLGamepad Audio WebVR three.js WebVR Polyfill React VR A-Frame
  85. 85. geildanke.com @ RuhrJS17 @fischaelameer Browser WebGLGamepad Audio WebVR Speech three.js WebVR Polyfill React VR A-Frame
  86. 86. geildanke.com @ RuhrJS17 @fischaelameer Libraries Like React VR Will Not Fix Your UX Design
  87. 87. geildanke.com @ RuhrJS17 @fischaelameer UX Design For WebVR Applications
  88. 88. geildanke.com @ RuhrJS17 @fischaelameer Comfort Interpretability Usefulness Delight Beau Cronin https://medium.com/@beaucronin/the-hierarchy-of-needs-in-virtual-reality-development-4333a4833acc
  89. 89. geildanke.com @ RuhrJS17 @fischaelameer Presence Comfort Interpretability Usefulness Delight Beau Cronin https://medium.com/@beaucronin/the-hierarchy-of-needs-in-virtual-reality-development-4333a4833acc
  90. 90. geildanke.com @ RuhrJS17 @fischaelameer Presence Comfort Interpretability Usefulness Delight Safety
  91. 91. geildanke.com @ RuhrJS17 @fischaelameer UX Design For WebVR Comfort & Ergonomics
  92. 92. geildanke.com @ RuhrJS17 @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/
  93. 93. geildanke.com @ RuhrJS17 @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/
  94. 94. geildanke.com @ RuhrJS17 @fischaelameer
  95. 95. geildanke.com @ RuhrJS17 @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/
  96. 96. geildanke.com @ RuhrJS17 @fischaelameer
  97. 97. geildanke.com @ RuhrJS17 @fischaelameer
  98. 98. geildanke.com @ RuhrJS17 @fischaelameer
  99. 99. geildanke.com @ RuhrJS17 @fischaelameer
  100. 100. geildanke.com @ RuhrJS17 @fischaelameer 70°
  101. 101. geildanke.com @ RuhrJS17 @fischaelameer 130° Comfortably bending 30° to each side
  102. 102. geildanke.com @ RuhrJS17 @fischaelameer Stretching 80° to each side https://www.youtube.com/watch?v=00vzW2-PvvE
  103. 103. geildanke.com @ RuhrJS17 @fischaelameer 0.5m 20m
  104. 104. geildanke.com @ RuhrJS17 @fischaelameer ~10ppd 60ppd Today’s 
 Pixel Density Optimal Pixel Density
  105. 105. geildanke.com @ RuhrJS17 @fischaelameer
  106. 106. geildanke.com @ RuhrJS17 @fischaelameer
  107. 107. geildanke.com @ RuhrJS17 @fischaelameerhttps://www.youtube.com/watch?v=ES9jArHRFHQ
  108. 108. geildanke.com @ RuhrJS17 @fischaelameer
  109. 109. geildanke.com @ RuhrJS17 @fischaelameer DMM
  110. 110. geildanke.com @ RuhrJS17 @fischaelameer Distance-Independent Millimeter DMM
  111. 111. https://sizecalc.com
  112. 112. https://sizecalc.com
  113. 113. geildanke.com @ RuhrJS17 @fischaelameer UX Design For WebVR Interpretability
  114. 114. geildanke.com @ RuhrJS17 @fischaelameer Use correct scales
  115. 115. geildanke.com @ RuhrJS17 @fischaelameer Add feedback
  116. 116. geildanke.com @ RuhrJS17 @fischaelameer Add feedback
  117. 117. geildanke.com @ RuhrJS17 @fischaelameer Add feedback
  118. 118. geildanke.com @ RuhrJS17 @fischaelameer Add feedback
  119. 119. geildanke.com @ RuhrJS17 @fischaelameer Add gaze cues
  120. 120. geildanke.com @ RuhrJS17 @fischaelameer Add gaze cues
  121. 121. geildanke.com @ RuhrJS17 @fischaelameer Add gaze cues
  122. 122. geildanke.com @ RuhrJS17 @fischaelameer Add gaze cues
  123. 123. geildanke.com @ RuhrJS17 @fischaelameer UX Design For WebVR Safety
  124. 124. geildanke.com @ RuhrJS17 @fischaelameer Do Not Trigger Phobias.
  125. 125. geildanke.com @ RuhrJS17 @fischaelameer Do Not Trigger Phobias.
  126. 126. geildanke.com @ RuhrJS17 @fischaelameer Do Not Move Things Fast
 Towards the Camera. Do Not Trigger Phobias.
  127. 127. geildanke.com @ RuhrJS17 @fischaelameer Do Not Attach Things
 Near the Camera.
  128. 128. geildanke.com @ RuhrJS17 @fischaelameer Do Not Attach Things
 Near the Camera.
  129. 129. geildanke.com @ RuhrJS17 @fischaelameer Do Not Attach Things
 Near the Camera. Respect the Personal Space.
  130. 130. geildanke.com @ RuhrJS17 @fischaelameerIcon made by Freepik from www.flaticon.com
  131. 131. geildanke.com @ RuhrJS17 @fischaelameerIcon made by Freepik from www.flaticon.com
  132. 132. geildanke.com @ RuhrJS17 @fischaelameer Do Not Use Acceleration. https://web.colby.edu/cogblog/2016/05/09/2451/
  133. 133. geildanke.com @ RuhrJS17 @fischaelameer Do Not Use Acceleration. https://web.colby.edu/cogblog/2016/05/09/2451/
  134. 134. geildanke.com @ RuhrJS17 @fischaelameer Do Not Move the Horizon Or the Camera. Do Not Use Acceleration. https://web.colby.edu/cogblog/2016/05/09/2451/
  135. 135. geildanke.com @ RuhrJS17 @fischaelameer Do Not Move the Horizon Or the Camera. Do Not Use Acceleration. Keep a Low Latency And a High Framerate. https://web.colby.edu/cogblog/2016/05/09/2451/
  136. 136. geildanke.com @ RuhrJS17 @fischaelameer Add a Stable Focus Point. http://vtrav.com/2015/04/nose-reduces-simulator-sickness/
  137. 137. geildanke.com @ RuhrJS17 @fischaelameer Add a Stable Focus Point. http://vtrav.com/2015/04/nose-reduces-simulator-sickness/
  138. 138. geildanke.com @ RuhrJS17 @fischaelameer Avoid Flicker Or Blur. Add a Stable Focus Point. http://vtrav.com/2015/04/nose-reduces-simulator-sickness/
  139. 139. geildanke.com @ RuhrJS17 @fischaelameer Avoid Flicker Or Blur. Add a Stable Focus Point. Support Short Usage. http://vtrav.com/2015/04/nose-reduces-simulator-sickness/
  140. 140. geildanke.com @ RuhrJS17 @fischaelameer Abstract Patterns Are Better Than Realistic Ones. https://blog.mozvr.com/a-painter/ http://www.kotaku.co.uk/2016/12/16/the-state-of-virtual-reality-in-2016
  141. 141. geildanke.com @ RuhrJS17 @fischaelameer Abstract Patterns Are Better Than Realistic Ones. https://blog.mozvr.com/a-painter/ http://www.kotaku.co.uk/2016/12/16/the-state-of-virtual-reality-in-2016
  142. 142. geildanke.com @ RuhrJS17 @fischaelameer You Are Responsible For The Well-Being Of Your Users.
  143. 143. geildanke.com @ RuhrJS17 @fischaelameer 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/
  144. 144. geildanke.com @ RuhrJS17 @fischaelameer 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/
  145. 145. geildanke.com @ RuhrJS17 @fischaelameer You Are Responsible For The Well-Being Of Your Users.
  146. 146. geildanke.com @ RuhrJS17 @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
  147. 147. geildanke.com @ RuhrJS17 @fischaelameer Thanks For Listening!

×