Добавляйте 3D-модели в Интернет с помощью <model-viewer>

Сегодня люди часто носят в карманах устройства, поддерживающие дополненную реальность (AR) и виртуальную реальность (VR). Все чаще контент, которым мы делимся друг с другом на этих устройствах, является 3D. В этой лаборатории кода вы узнаете, как использовать веб-компонент под названием <model-viewer> для добавления 3D-контента на ваш веб-сайт или в прогрессивное веб-приложение (PWA) так же просто, как и изображение с помощью HTML!

Что вы будете строить

Веб-сайт, содержащий интерактивную 3D-модель с возможностью отображения AR-голограмм.

Что вы узнаете

  • Как установить веб-компонент <model-viewer> на свой сайт
  • Как использовать <model-viewer> для представления 3D-модели в стандартном веб-макете
  • Как настроить <model-viewer> , чтобы добавить изюминку в презентацию

Что вам понадобится

  • Веб-браузер. Мы рекомендуем Chrome, но подойдет любой современный браузер (Firefox, Safari, Edge).
  • Node.js и текстовый редактор или доступ к Glitch .
  • Базовые знания HTML, CSS, JavaScript и Chrome DevTools .

Эта лаборатория кода ориентирована на <model-viewer> и 3D-модели. Нерелевантные концепции и блоки кода замалчиваются и предоставляются для простого копирования и вставки.

Вариант 1 - Глюк

Вы можете использовать онлайн-инструмент редактирования кода, такой как Glitch, чтобы разместить свой проект и увидеть изменения.

Чтобы начать работу в Glitch, нажмите следующую кнопку:

Откройте предварительно загруженную среду Glitch

С этого момента вы можете использовать редактор кода на Glitch для изменения ваших файлов, и, как только вы будете готовы, начните обслуживать свое приложение, используя кнопку «Показать в прямом эфире». Попробуйте это сейчас, и вы должны увидеть следующую страницу:

Вариант 2 — локальный сервер

Локальный сервер позволит вам использовать предпочитаемый вами редактор кода.

Установить сервер

Нам понадобится способ обслуживать локальные веб-страницы. Простой способ — через Node.js и serve , простой сервер статического контента.

Посетите веб- сайт Node.js, чтобы узнать, как установить его в вашей операционной системе. После установки Node.js запустите эту команду, чтобы установить подачу:

npm install -g serve

Скачать код

Начальный шаблон вместе со всеми образцами ресурсов доступен для скачивания. Щелкните следующую ссылку и разархивируйте содержимое в каталог, в который вы хотите поместить свой проект:

Скачать исходный код

В качестве альтернативы используйте git для клонирования репозитория:

git clone https://github.com/googlecodelabs/model-viewer-codelab.git

Запуск сервера

Из извлеченного выше каталога шаблонов (или внутри клонированного каталога, если вы использовали git) запустите команду serve для запуска веб-сервера:

Посетите этот адрес (на скриншоте выше это http://localhost:5000 , но на вашем компьютере он может быть другим), чтобы увидеть очень простую отправную точку:

Мы начнем с редактирования файла index.html либо с помощью веб-редактора Glitch, либо — если вы используете локальный сервер — с помощью вашего любимого редактора кода.

Добавьте библиотеку <model-viewer>

Нам потребуется включить набор файлов JavaScript, чтобы использовать <model-viewer>.

В следующем разделе на вашу страницу добавляется библиотека <model-viewer>. Вставьте следующий код в конец <body> .

<!-- 💁 Include both scripts below to support all browsers! -->

<!-- Loads <model-viewer> for modern browsers: -->
<script type="module"
    src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js">
</script>

<!-- Loads <model-viewer> for old browsers like IE11: -->
<script nomodule
    src="https://unpkg.com/@google/model-viewer/dist/model-viewer-legacy.js">
</script>

Мы только что добавили библиотеки, не меняя контента — если вы обновите свою страницу, вы увидите тот же контент. Если вы откроете консоль DevTools, вы можете увидеть некоторые предупреждения об отсутствующих API-интерфейсах WebXR, но они ожидаются до тех пор, пока этот API не будет полностью выпущен.

Максимальная совместимость

По умолчанию <model-viewer> поддерживает многие современные браузеры. Однако, если вы хотите увеличить количество браузеров, поддерживаемых вашей страницей, вы можете включить дополнительные полифиллы .

Наш полный рекомендуемый набор приведен ниже. Это поможет вам обеспечить отличную работу во всех современных браузерах. Дополнительную информацию см. в документации полифиллов <model-viewer> .

Вставьте следующий код в <head> .

<!-- The following libraries and polyfills are recommended to maximize browser support -->
<!-- NOTE: you must adjust the paths as appropriate for your project -->
    
<!-- 🚨 REQUIRED: Web Components polyfill to support Edge and Firefox < 63 -->
<script src="https://unpkg.com/@webcomponents/webcomponentsjs@2.1.3/webcomponents-loader.js"></script>

<!-- 💁 OPTIONAL: Intersection Observer polyfill for better performance in Safari and IE11 -->
<script src="https://unpkg.com/intersection-observer@0.5.1/intersection-observer.js"></script>

<!-- 💁 OPTIONAL: Resize Observer polyfill improves resize behavior in non-Chrome browsers -->
<script src="https://unpkg.com/resize-observer-polyfill@1.5.1/dist/ResizeObserver.js"></script>

<!-- 💁 OPTIONAL: Fullscreen polyfill is required for experimental AR features in Canary -->
<!--<script src="https://unpkg.com/fullscreen-polyfill@1.0.2/dist/fullscreen.polyfill.js"></script>-->

<!-- 💁 OPTIONAL: Include prismatic.js for Magic Leap support -->
<!--<script src="https://unpkg.com/@magicleap/prismatic@0.18.2/prismatic.min.js"></script>-->

Добавить <просмотрщик модели>

Теперь давайте добавим на страницу фактический тег <model-viewer>, чтобы мы могли видеть 3D! Замените существующий элемент <p> следующим кодом:

<model-viewer src="third_party/Astronaut/Astronaut.glb"
              alt="A 3D model of an astronaut">
</model-viewer>

Здесь можно упомянуть только два атрибута:

  • Атрибут src указывает, откуда загружать 3D-модель. В этом примере мы использовали модель Astronaut от Poly, доступную по лицензии CC-BY.
  • Атрибут alt содержит альтернативное текстовое описание модели для доступности.

Вы можете заметить, что оба эти атрибута имеют сильные параллели с атрибутами тега img .

Перезагрузка покажет космонавту:

Хороший! У вас есть 3D-модель в Интернете!


На следующих этапах мы поэкспериментируем с большей интерактивностью и движением, изменим внешний вид элемента и погрузимся в AR.

Добавим модели немного интерактивности. У нас будет вращаться модель по умолчанию, чтобы дать пользователям намек на то, что модель интерактивна (а также показать ее), а затем мы включим элементы управления, чтобы пользователи могли сами перемещать модель с помощью мыши или касания. .

Для этого просто добавьте атрибуты auto-rotate и camera-controls в элемент <model-viewer>.

<model-viewer src="third_party/Astronaut/Astronaut.glb"
              auto-rotate camera-controls
              alt="A 3D model of an astronaut">
</model-viewer>

Когда вы обновите страницу, Астронавт будет медленно вращаться. Если вы попытаетесь перетащить модель (щелкнув и переместив мышь, или, если вы используете сенсорное устройство, перетащив палец), модель будет вращаться.

В совокупности эти функции дают пользователю намек на то, что это больше, чем просто статическое изображение, и ощущение интерактивности, поэтому они чувствуют себя вовлеченными (и поэтому они могут видеть заднюю часть вашей модели!)

Теперь, когда у нас есть движение, давайте посмотрим на настройку внешнего вида, чтобы сделать модель действительно привлекательной.

Обновите модель

Некоторые из них (в частности, изменение освещения) лучше всего проявляются на определенных моделях. Во-первых, давайте обновим атрибут src , чтобы он указывал на новую модель: third_party/DamagedHelmet/DamagedHelmet.gltf (выпущено под лицензией Creative Commons Attribution-NonCommercial на Sketchfab ). Теперь источник всего элемента должен выглядеть так:

<model-viewer src="third_party/DamagedHelmet/DamagedHelmet.gltf"
              auto-rotate camera-controls
              alt="A 3D model of a damaged sci-fi helmet">
</model-viewer>

Эта модель продемонстрирует некоторые изменения, которые мы собираемся внести!

Изменить цвет фона

Во-первых, давайте изменим цвет фона, чтобы модель выделялась на странице. Добавьте в тег <model-viewer> следующий атрибут:

background-color="#70BCD1"

Установите карту окружения

Карты окружения используются для создания окружающей сцены, отраженной от модели, и для указания конфигурации освещения. Освещение по умолчанию превосходно (и совместимо с освещением ARCore Scene Viewer), но иногда у вас может быть пользовательская среда или может потребоваться специальное освещение для результатов, которых вы пытаетесь достичь. Укажем атрибут environment-image ( studio_small_07_1k.hdr взят с сайта hdrihaven.com ).

environment-image="third_party/hdrihaven/studio_small_07_1k.hdr"

Добавить тень

Если объект отбрасывает тень, это придает сцене дополнительную глубину. Следующий атрибут при добавлении к нашему элементу <model-viewer> будет отбрасывать тень:

shadow-intensity="1"

Изменить интенсивность освещения

Модель немного темновата; давайте немного добавим свет, чтобы мы могли видеть больше деталей. Как освещение сцены по умолчанию, так и освещение из карты окружения, которую мы добавили, можно настраивать независимо. Добавь это:

stage-light-intensity="3" environment-intensity="2"

Каждое из этих изменений было довольно небольшим, но теперь модель выглядит намного лучше!

Далее мы рассмотрим некоторые альтернативные режимы отображения.

Все больше и больше устройств имеют доступ к дополненной реальности (AR). Некоторые из этих режимов сложно запустить или для них требуется специальный код, но <model-viewer> справится со всей этой сложностью за вас!

Средство просмотра сцен ARCore

На поддерживаемых устройствах <model-viewer> может запускать средство просмотра сцен ARCore . Добавьте атрибут ar к элементу <model-viewer> — и да, это все, что вам нужно сделать!

<model-viewer src="third_party/DamagedHelmet/DamagedHelmet.gltf"
              ar
              auto-rotate camera-controls
              background-color="#70BCD1"
              shadow-intensity="1"
              alt="A 3D model of a damaged sci-fi helmet">
</model-viewer>

Теперь, если вы посмотрите это на поддерживаемом устройстве с последним ARCore, вы увидите дополнительный значок (как на картинке ниже). Нажав на нее, вы откроете свою модель в обозревателе сцен!

Другие устройства — iOS Quick Look, Magic Leap, WebXR

Многие другие устройства требуют немного больше работы.

В iOS атрибут ios-src позволяет указать дополнительную USDZ-версию 3D-модели (которая требуется в iOS). Если указан этот атрибут, на модели для поддерживаемых устройств iOS появится стандартный значок AR Quick Look. Дополнительные сведения о USDZ см. в документации Apple для разработчиков .

На устройствах Magic Leap атрибут magic-leap активирует поддержку дополненной реальности. Обратите внимание, что вы также должны включить библиотеку prismatic.js (она включена, но закомментирована в дополнительные полифилы), а 3D-модель должна быть в формате .glb (а не .gltf).

<script src="https://unpkg.com/@magicleap/prismatic@0.18.2/prismatic.min.js"></script>

Начальный угол и положение камеры можно контролировать. Этот элемент управления позволяет нам показывать пользователям лучший вид шлема по умолчанию. Добавьте следующий фрагмент в тег <model-viewer>:

camera-orbit="-20deg 75deg 2m"

Конечно, эти модели можно использовать с другим вашим контентом, в том числе на адаптивных страницах. Создание адаптивной веб-страницы выходит за рамки этой лаборатории кода, но для получения дополнительной информации ознакомьтесь с основами адаптивного веб-дизайна .

Мы включили образец страницы в наш репозиторий. Проверьте responsive.html в широкоэкранном режиме (например, на рабочем столе):

Та же страница в узком окне просмотра (например, на мобильном устройстве):

Вы встроили часть 3D-контента в сеть! Хорошо сделано!

Что дальше?

Существует множество других вариантов конфигурации. Ознакомьтесь с нашей онлайн-документацией или кодом для получения дополнительной информации.

После того, как вы определили свои модели, вы можете подумать о следующих шагах:

  • Некоторые модели могут быть довольно большими. В этих случаях <model-viewer> предоставляет несколько методов для обеспечения отличного взаимодействия. На странице документации по ленивой загрузке есть дополнительная информация.
  • Анимированные модели могут быть очень забавными! Посетите нашу страницу « Анимации » для получения дополнительной информации о включении (и переключении между) анимаций, которые определены в ваших моделях.
  • И это все еще веб - модели могут быть встроены в ваши веб-страницы, чтобы дополнить ваш контент!

Наш процесс разработки открыт на GitHub . Мы хотели бы услышать от вас!