Movi Kanti Revo – Partie 1 – Construire le monde 3D

Logo Movi Kanti Revo.

Movi.Kanti.Revo est une nouvelle expérience sensorielle conçue par Chrome par le Cirque du Soleil et développée par Subatomic Systems. Elle apporte sur le Web les merveilles du Cirque du Soleil grâce à des technologies Web modernes.

Créer le monde 3D

Le test a été créé en HTML5 uniquement, et l'environnement est entièrement basé sur le balisage et le CSS. Comme les éléments définis dans l'espace de création, les éléments div, img, les petits éléments video et d'autres éléments sont positionnés dans un espace 3D à l'aide de CSS. L'utilisation de la nouvelle API getUserMedia a permis d'interagir avec le test d'une toute nouvelle manière : au lieu d'utiliser le clavier ou la souris, une bibliothèque de détection de visages JavaScript suit votre tête et déplace l'environnement en même temps que vous.

Tout le Web est une étape

Pour concevoir cette expérience, il est préférable d'imaginer le navigateur comme une scène, et les éléments tels que les <div>, les images, les vidéos et d'autres éléments comme des éléments de décor positionnés dans un espace 3D à l'aide de code CSS. Chaque élément ou pièce définie est positionné sur l'espace de création via l'application d'une transformation 3D. Si vous ne connaissez pas la transformation translate3d, elle prend trois paramètres : X, Y et Z. X déplace l'élément le long d'une ligne horizontale, Y le déplace vers le haut et vers le bas, et Z le rapproche ou le éloigne. Par exemple, l'application d'un élément transform: translate3d(100px, -200px, 300px) déplace l'élément de 100 pixels vers la droite, de 200 pixels vers le bas et de 300 pixels vers le bas.

Construction de l'auditorium

Jetons un coup d'œil à la dernière scène et voyons comment elle se présente. Toutes les scènes sont divisées en trois conteneurs principaux : le conteneur "World", un conteneur de perspective et l'espace de création. Le conteneur "world" configure efficacement la caméra du lecteur et utilise la propriété CSS perspective pour indiquer au navigateur d'où il verra l'élément. #perspective-container permet de modifier notre perspective en lui appliquant des transformations 3D. Enfin, l'espace de création contient les éléments définis qui seront visibles à l'écran.

<div id="world-container">
  <div id="perspective-container">
    <div id="stage">
    </div>
  </div>
</div>
#world-container {
perspective: 700px;
overflow: hidden;
}

#perspective-container {
{ % mixin transform-style: preserve-3d; % }
{ % mixin transform-origin: center center; % }
{ % mixin perspective-origin: center center; % }
{ % mixin transform: translate3d(0, 0, 0) rotateX(0deg) rotateY(0deg) rotateZ(0deg); % }
}

Visualiser l'espace de création

La scène finale contient sept éléments. De l'arrière vers l'avant, ils incluent le fond du ciel, une couche de brouillard, les portes, l'eau, les reflets, une couche de brouillard supplémentaire et enfin les falaises qui se trouvent devant. Chaque élément est placé dans l'espace de création avec une propriété CSS transform: translate3d(x, y, z) qui indique sa position dans l'espace 3D. Nous avons utilisé la valeur z de la même manière que z-index, mais avec la propriété translate3d, nous pouvons également fournir une unité avec la valeur.

Figure 1: Vue latérale de l&#39;espace de création
Figure 1: L'espace de création sur le côté.

La figure 1 montre la scène avec un zoom arrière et une rotation de près de 90 degrés. Vous pouvez ainsi visualiser la façon dont les différentes pièces de la scène sont placées dans l'espace de création. À l'arrière-plan (tout à gauche), on peut voir l'arrière-plan, le brouillard, les portes, l'eau et enfin les falaises.

Placer l'arrière-plan sur l'espace de création

Commençons par l'image de fond. Comme il s'agit du point le plus éloigné en arrière, nous avons appliqué une transformation de -990 pixels à l'axe Z pour le repousser dans notre perspective (voir la figure 2).

Espace de création, avec uniquement l&#39;arrière-plan placé à -990 pixels
Figure 2: Espace de création, avec seul l'arrière-plan placé à -990 pixels

À mesure qu'il revient dans l'espace, la physique exige qu'il diminue. Il doit donc être redimensionné via une propriété scale(3.3) pour s'adapter à la fenêtre d'affichage et aligner le bord supérieur avec le haut de la fenêtre d'affichage avec un translate3d sur l'axe des ordonnées (voir la figure 3).

.background {
width: 1280px;
height: 800px;
top: 0px;
background-image: url(stars.png);
{ % mixin transform: translate3d(0, 786px, <b>-990px</b>) <b>scale(3.3)</b>; % }
}
Figure 3: Espace de création, avec l&#39;arrière-plan positionné et mis à l&#39;échelle.
Figure 3: Espace de création, seul l'arrière-plan est positionné et mis à l'échelle.

le brouillard, les portes et les falaises de la même manière, chacun en appliquant un translate3d avec une position Z et un facteur d'échelle appropriés (voir Figure 4). Notez que le brouillard s'empile derrière les portes et derrière les falaises.

Figure 4: La scène avec du brouillard, des portes et des falaises alignées et ajustées
Figure 4: Dans l'espace de création, le brouillard, les portes et la falaise sont positionnés et ajustés.

Ajouter la mer

Pour créer un environnement aussi réaliste que possible, nous savions que nous ne pouvions pas simplement mettre l'eau sur un plan vertical, car elle n'existe généralement pas ainsi dans le monde réel. En plus d'appliquer le translate3d pour positionner l'eau sur l'espace de création, nous appliquons également une rotation horizontale (axe X) de 60 degrés (rotateX(60deg)) pour qu'elle soit plate et texturée. Une rotation similaire a été ajoutée au reflet de la porte et au brouillard secondaire pour qu'elle apparaisse sur le plan correct (voir la figure 5).

.sea {
bottom: 120px;
background-image: url(sea2.png);
width: 1280px;
height: 283px;
{ % mixin transform: translate3d(-100px, 225px, -30px) scale(2.3) <b>rotateX(60deg)</b>; % }
}
Figure 5: Espace de création, avec tous les éléments positionnés et mis à l&#39;échelle
Figure 5: Espace de création, avec tous les éléments positionnés et mis à l'échelle.
>

Chaque scène a été conçue de la même manière, les éléments ont été visualisés dans l'espace 3D d'une scène, et une transformation appropriée a été appliquée à chacune d'elles.

Documentation complémentaire