Movi.Kanti.Revo는 Cirque du Soleil에서 만들고 Cirque du Soleil에서 개발한 새로운 감각적인 Chrome 실험으로, 최신 웹 기술을 통해 Cirque du Soleil의 경이로움을 웹에서 구현합니다.
3D 세상 만들기
실험은 HTML5만을 사용하여 만들었으며, 환경은 전적으로 마크업과
CSS로 구축되었습니다. 스테이지의 세트와 마찬가지로 div
, img
, 작은 video
및 기타 요소는 CSS를 사용하여 3D 공간에 배치됩니다. 자바스크립트 얼굴 인식 라이브러리가 키보드나 마우스를 사용하는 대신 새로운 getUserMedia
API를 사용하여 실험과 상호작용하는 완전히 새로운 방법을 사용할 수 있게 되었습니다. 또한 자바스크립트 얼굴 인식 라이브러리가 머리를 추적하여 함께 환경을 움직입니다.
모든 웹의 단계
이 실험을 만들려면 브라우저를 스테이지로, <div>
, 이미지, 동영상, 기타 요소와 같은 요소를 CSS를 사용하여 3D 공간에 배치된 조각으로 생각하는 것이 좋습니다. 각 요소 또는 세트 조각은 3D 변환을 적용하여 스테이지에 배치됩니다. translate3d
변환에 익숙하지 않은 경우 세 개의 매개변수(X, Y, Z)가 필요합니다. X는 가로선을 따라 요소를 이동하고 Y는 요소를 위아래로 이동하고 Z는 요소를 더 가까이 또는 더 멀리 이동합니다. 예를 들어 transform: translate3d(100px, -200px, 300px)
를 적용하면 요소가 오른쪽으로 100픽셀, 아래로 200픽셀, 뷰어를 향해 300픽셀 더 가깝게 이동합니다.
강당 건설
마지막 장면을 살펴보고 어떻게 배치되는지 살펴보겠습니다. 모든 장면은 세 가지 기본 컨테이너, 즉 세계 컨테이너, 관점 컨테이너, 스테이지로 분류됩니다. 세계 컨테이너는 뷰어 카메라를 효과적으로 설정하고 CSS perspective
속성을 사용하여 뷰어가 요소를 볼 위치를 브라우저에 알립니다. #perspective-container
는 3D 변환을 적용하여 시점을 변경하는 데 사용됩니다. 마지막으로 스테이지에는 화면에 표시되는
실제 세트 피스가 있습니다.
<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); % }
}
단계 시각화
스테이지 내 최종 장면에는 7가지 요소가 있습니다. 뒤에서 앞으로
이동하면 하늘 배경, 안개층, 문, 물, 반사, 추가 안개층,
마지막으로 앞에 있는 절벽이 포함됩니다.
각 항목은 3D 공간에 맞는 위치를 나타내는 transform: translate3d(x, y, z)
CSS 속성과 함께 스테이지에 배치됩니다. z-index
를 사용하는 것과 비슷한 방식으로 z 값을 사용했지만
translate3d
속성을 사용하여 값이 있는 단위도
제공할 수 있습니다.
그림 1에서는 다양한 세트 조각이 스테이지 내에 배치되는 방식을 시각화할 수 있도록 축소하고 거의 90도 회전한 장면을 보여줍니다. 맨 왼쪽 뒤에서 배경, 안개, 문, 물, 마지막으로 절벽이 보입니다.
스테이지에 배경 배치
배경 이미지부터 살펴보겠습니다. 가장 멀리 떨어져 있으므로 Z축에 -990px 변환을 적용하여 우리의 관점에서 볼 수 있도록 푸시합니다(그림 2 참고).
물리학에서는 공간 안으로 이동하므로 크기가 작아질 것을 요구하므로 scale(3.3)
속성을 통해 표시 영역에 맞게 크기를 조절하고 상단 가장자리를 y축에 translate3d
을 사용하여 표시 영역 상단과 정렬해야 합니다 (그림 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>; % }
}
각각 적절한 z 위치와 배율로 translate3d
를 적용하여 안개, 문, 절벽을 동일한 방식으로 구성합니다(그림 4 참고). 안개가 문 뒤와 절벽 뒤에 어떻게 쌓이는지 살펴보세요.
바다 추가
가능한 한 현실적인 환경을 만들기 위해 물을 수직면에 담는 것 자체가 아니라 실제 세계에서는 이런 식으로 존재하지 않는 경우가 일반적이라는 것을 알았습니다. translate3d
를 적용하여 스테이지에 물을 배치하는 것 외에도 x축 (수평) 회전을 60도 (rotateX(60deg)
)로 적용하여 평평하고 질감이 있는 것처럼 만듭니다.
문이 올바른 평면에 표시되도록 문 반사와 보조 안개에 비슷한 회전을 추가했습니다 (그림 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>; % }
}
각 장면은 비슷한 방식으로 제작되었으며, 요소는 스테이지의 3D 공간 내에서 시각화되었으며, 각 장면에 적절한 변환이 적용되었습니다.