Slide 1

Slide 1 text

DEVFEST NANTES 16 De la réalité virtuelle dans nos navigateurs, en route vers le Metaverse ! #devfestnantes WebVR

Slide 2

Slide 2 text

2 DEVFEST NANTES 16 Olivier Guillet | @OlivierGuillet Directeur Technique @EMOTIC

Slide 3

Slide 3 text

3 DEVFEST NANTES 16 Sommaire 01 Intro Metaverse 2016 : an 1 de la réalité virtuelle 03 Technique 02 WebVR Présentation Historique Compatibilité Exemples d’utilisation 04 Le futur Three.js WebVR API A-Frame gLTF Que nous réserve-t-il ?

Slide 4

Slide 4 text

4 DEVFEST NANTES 16 Metaverse ? 1992 : “ Le métaverse (méta-univers) est un monde virtuel fictif décrit dans le roman Le Samouraï virtuel, de Neal Stephenson. “ - Wikipedia 2016 : le Metaverse est l’idée d’étendre internet en 3D afin qu’un nombre infini d’espaces virtuels puissent être reliés entre eux et explorés en réalité virtuelle.

Slide 5

Slide 5 text

Pourquoi 2016 est l’an 1 de la réalité virtuelle ?

Slide 6

Slide 6 text

6 DEVFEST NANTES 16 Sorties commerciales d’équipements performants 6 150 000 100 000 ? > 2 000 000 50 000 / 1 semaine > 20 000 000

Slide 7

Slide 7 text

7 DEVFEST NANTES 16 Des nouvelles plateformes de contenus Jeux vidéos Photos / vidéos 360°

Slide 8

Slide 8 text

8 DEVFEST NANTES 16 8 DEVFEST NANTES 16 WebVR Une API expérimentale du W3C Ce n’est pas (encore) le métaverse

Slide 9

Slide 9 text

9 DEVFEST NANTES 16 WebVR ? Embarquer une expérience VR dans une page web : ● positionnement du casque (orientation) ● métriques pour le rendu (champ de vue, viewport, InterPupillary Distance) ● rendu 3D stéréoscopique ● navigation de site VR en site VR (prototype Mozilla 01/11/2016) ● affichage sites classiques (HTML 2D) en VR (2017 Android + Chrome desktop)

Slide 10

Slide 10 text

10 DEVFEST NANTES 16 Historique Eté 2014 Vladimir Vukicevic (Mozilla) Brandon Jones (Google) Mars 2016 Sept. 2016 Oct. 2016 WebVR v1.0 API Microsoft Edge WebVR v1.1 API W3C Workshop WebVR v1.2 ?

Slide 11

Slide 11 text

11 DEVFEST NANTES 16 Compatibilité ? https://iswebvrready.org/ Compatible sur (presque) tous les casques VR du marché :

Slide 12

Slide 12 text

12 DEVFEST NANTES 16 Compatibilité ? https://iswebvrready.org/

Slide 13

Slide 13 text

13 DEVFEST NANTES 16 WebVR Polyfill https://github.com/googlevr/webvr-polyfill

Slide 14

Slide 14 text

14 DEVFEST NANTES 16 14 DEVFEST NANTES 16 Exemples d’utilisations Sites compatibles WebVR

Slide 15

Slide 15 text

My Social Galaxy Tweetwall 360°

Slide 16

Slide 16 text

360syria Photos 360°

Slide 17

Slide 17 text

Beloola Plateforme sociale immersive

Slide 18

Slide 18 text

Sketchfab Modèles 3D

Slide 19

Slide 19 text

Vrideo Vidéos 360°

Slide 20

Slide 20 text

Washington Post Article de presse immersif

Slide 21

Slide 21 text

Virtual flight IBERIA Jeu promotionnel

Slide 22

Slide 22 text

Inside Renault KADJAR Simulateur auto

Slide 23

Slide 23 text

23 DEVFEST NANTES 16 23 DEVFEST NANTES 16 Technique Développer un site compatible WebVR

Slide 24

Slide 24 text

24 DEVFEST NANTES 16 WebGL API HTML5 qui permet d’afficher de la 3D directement dans le navigateur ● via une balise canvas ● issu de l’OpenGL ES 2.0 ● supporté par tous les navigateurs modernes

Slide 25

Slide 25 text

25 DEVFEST NANTES 16 VR dans le navigateur (mobile) sans WebVR ? Three.js, LA librairie WebGL la plus utilisée ● StereoEffect.js : rendu stéréoscopique 3D ● DeviceOrientationControls.js ● passage en plein écran ● Un cardboard ● (OrbitControl.js : sur PC)

Slide 26

Slide 26 text

26 DEVFEST NANTES 16 1.Lister les devices VR disponibles var self = this; var vrDisplay; navigator.getVRDisplays().then(gotVRDisplays ); function gotVRDisplays ( displays ) { if (displays.length > 0) { vrDisplay = displays[0]; self.left = vrDisplay.getEyeParameters( "left" ); self.right = vrDisplay.getEyeParameters( "right" ); self.vrDisplay = vrDisplay; } }

Slide 27

Slide 27 text

27 DEVFEST NANTES 16 2.Présenter le canvas WebGL au device VR var webglCanvas = document.querySelector('#webglcanvas'); someButton.addEventListener(’click', onStartPresent); function onStartPresent () { vrDisplay.requestPresent({ source : webGLCanvas }); }

Slide 28

Slide 28 text

28 DEVFEST NANTES 16 3.Rendu VR vrDisplay.requestAnimationFrame(runloop); function runloop() { // set up for the next frame vrDisplay.requestAnimationFrame(runloop); // render the content var pose = vrDisplay.getPose(); if (vrDisplay.isPresenting) { renderScene(pose, "left”); renderScene(pose, ”right")); } vrDisplay.submitFrame(pose); }

Slide 29

Slide 29 text

29 DEVFEST NANTES 16 WebVR Boilerplate https://github.com/borismus/webvr-boilerplate

Slide 30

Slide 30 text

30 DEVFEST NANTES 16 A-Frame https://aframe.io/ ● Mozilla - Décembre 2015 ● Basé sur WebVR polyfill + Three.js ● Système ECS (entity - component - system) ● Framework déclaratif (tags HTML) ● Élimine tout le code boilerplate ● Pour les développeurs Web !

Slide 31

Slide 31 text

31 DEVFEST NANTES 16 A-Frame Hello World Hello, World! • A-Frame

Slide 32

Slide 32 text

32 DEVFEST NANTES 16 A-Frame Photo 360° Hello, World! • A-Frame

Slide 33

Slide 33 text

33 DEVFEST NANTES 16 Gamepad API http://html5gamepad.com/

Slide 34

Slide 34 text

34 DEVFEST NANTES 16 Quid des contrôleurs spécifiques à la VR ?

Slide 35

Slide 35 text

35 DEVFEST NANTES 16 Gamepad Extensions https://w3c.github.io/gamepad/extensions.html var vrGamepads = []; var gamepads = navigator.getGamepads(); for (var i = 0; i < gamepads.length; ++i) { var gamepad = gamepads[i]; if (gamepad.pose) { vrGamepads.push(gamepad); } } Extension de la Gamepad API : position, orientation, vélocité, accélération ● Chrome ● 3 DOF / 6 DOF

Slide 36

Slide 36 text

36 DEVFEST NANTES 16 Nouveau format supporté par le Khronos Group Représentation compacte pour des transferts rapides Chargement rapide en mémoire ● JSON pour la structure des scènes et les objets de haut niveau (meshes) ● Types natifs GL Support complet des objets 3D ● Hiérarchies textures, caméra, skins, animations ● shaders et matériaux glTF (GL Transmission Format) https://www.khronos.org/gltf

Slide 37

Slide 37 text

37 DEVFEST NANTES 16 "meshes": { "LOD3spShape-lib": { "name": "LOD3spShape", "primitives": [ { "attributes": { "NORMAL": "accessor_25", "POSITION": "accessor_23", "TEXCOORD_0": "accessor_27" }, "indices": "accessor_21", "material": "blinn3-fx", "primitive": 4 } ] } } glTF (GL Transmission Format) https://www.khronos.org/gltf "buffers": { "duck": { "byteLength": 102040, "type": "arraybuffer", "uri": "duck.bin" } }, ... "nodes": { "LOD3sp": { "children": [], "matrix": [], "meshes": [ "LOD3spShape-lib" ], "name": "LOD3sp" } }, …

Slide 38

Slide 38 text

38 DEVFEST NANTES 16 38 DEVFEST NANTES 16 Le futur que nous réserve-t-il ?

Slide 39

Slide 39 text

39 DEVFEST NANTES 16 Le futur, que nous réserve t’il ? De meilleurs performances ! ● Rendu 90 fps ● WebGL 2 ● WebAssembly Le support de nouvelles normes ● WebVR en version stable ● WebRTC : réalité augmentée / mixte

Slide 40

Slide 40 text

40 DEVFEST NANTES 16 40 DEVFEST NANTES 16 Thank You @OlivierGuillet @EMOTIC