model-viewerでWebARやってみる！

#はじめに
Googleが出しているmodel-viwerという機能を使って、3Dモデルを表示するだけのシンプルなWebARコンテンツを作ってみました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">model-viewerを使ったWebAR <a href="https://t.co/Wtwbmct16G">pic.twitter.com/Wtwbmct16G</a></p>&mdash; トマシープ (@tomasheep) <a href="https://twitter.com/tomasheep/status/1201310290777755648?ref_src=twsrc%5Etfw">December 2, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
私はWebの人間ではないですが、Webの知識はほとんどなくても作成できました。

#WebARとは


アプリをインストールせずに、スマホからWebサイトにアクセスするだけでARコンテンツを楽しめます。

アプリをインストールしてもらうのはハードルが高いですが、webサイトならURLを教えるかQRコードを提示しておくだけでアクセスしてもらえるため、ユーザーにも開発者にもうれしいのです。

ただブラウザによってWebARに対応していなかったり、アプリに比べるとできることが限られていたりする場合もあります。

#model-viwerとは
公式のgithubには以下のように書いてあります。

>model-viewer is a web component that makes rendering interactive 3D models - optionally in AR - easy to do, on as many browsers and devices as possible. <model-viewer> strives to give you great defaults for rendering quality and performance.

Google翻訳をかけると

>model-viewerは、可能な限り多くのブラウザーとデバイスで、インタラクティブな3Dモデル（オプションでAR）を簡単にレンダリングできるWebコンポーネントです。

だそうです。

github
https://github.com/GoogleWebComponents/model-viewer

ドキュメント
https://modelviewer.dev/

デモページ
https://model-viewer.glitch.me/

デモページを**ARcoreもしくはARkit対応の端末**で開き、右下の箱のマークを押すとARできます。

![SnapCrab_19-12-1_19-24-44_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/8a2ab57a-203d-4782-f39a-8c9488a02191.png)
![SnapCrab_19-12-1_19-24-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/d2a57101-f7a6-e05a-5f3b-04958088bcab.png)

**※Android端末は特にARcoreに対応してないものが多いので、見れない可能性があります。**
対応端末はこちらのサイトにまとめてありました。
https://developers.google.com/ar/discover/supported-devices

ではさっそく自分で作ってみましょう。

#モデルを用意する

まず表示したい3Dモデルを用意します。

Androidで見るには**glb**もしくは**glTF**形式、
iosで見るには**USDZ**形式のモデルが必要だそうです。


今回はWebARの利点を生かしてどちらにも対応したいので、どちらも用意します。

[Poly](https://poly.google.com/)というGoogleの3Dモデルのサイトには、glTF形式とUSDZ形式の両方をダウンロードできるモデルがあります。

例えば[ドーナッツモデル](https://poly.google.com/view/6LSB0OZK8I7)など、公式が作っているモデルはどちらもダウンロードできる可能性が高いです。

![SnapCrab_19-12-1_19-36-6_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/462f8147-d447-21bf-fa26-965bd97a8c56.png)

私は自分で作ったobjモデルがあるので、blenderでglbファイルに変換、[こちらのサイト](https://usdz.viewar.com/usdz-converter/action:upload)でUSDZファイルに変換しました。
![SnapCrab_19-11-30_21-44-22_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/643d8bbe-049e-89ce-cdd7-455d060e03c0.png)


#htmlコードを書く

githubやデモページなどを参考にindex.htmlを作りました。

``` html:index.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>ModerlViewerを使ったWebARページ</title>
  </head>
  <body>
  <script 
      type="module"
      src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js">
    
  </script>
    
    <model-viewer  
    ar
    alt="Leoモデル"
    src="leo.glb" 
    ios-src="leo.usdz" 

    style="width:800px;height:1000px;"                  
                  
    background-color="#70BCD1"
    shadow-intensity="0.7"
    camera-controls
    interaction-prompt="auto"
    auto-rotate ar magic-leap>
                  
    
    </model-viewer>
  </body>
</html>

```
すこしだけ解説します。
##model-viwer.jsの読み込み

```
  <script 
      type="module"
      src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js">
  </script>
```
この部分は
@google/model-viewer@v0.7.2/dist/model-viewer.js
みたいにバージョンを書いてもいいです。

##modelデータ読み込み

    src="leo.glb" 
    ios-src="leo.usdz" 
srcのところにモデルのパスを書きます。
今回はindex.htmlと同じ階層にモデルを置いたのでモデル名だけを書きました。
モデルが置いてあるURLを書いても大丈夫です。
ios端末でもモデルを表示するには、**ios-src=**でusdzモデルを指定する必要があります。Androidだけでいい場合はなくても大丈夫です。

##その他

そのほかのstyleなどについては省略します。
model-viewer固有のものは[ドキュメント](https://modelviewer.dev/)に解説が載っています。


# サーバーに置く
index.htmlとモデルデータをサーバーに置いてブラウザで見れるようにします。
![SnapCrab_19-11-30_23-9-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/682c123d-52eb-a7bc-7fd1-866c35131169.png)

私は自分のサーバーがないのでGitHubにリポジトリを作ってその中に置き、GitHubPageの機能でURLを発行しました。
GitHubPagesの使い方は割愛します。Settingから簡単にできます。

リポジトリはこちら
https://github.com/bibinba/WebARWithModelViewer
発行されたURLはこちら
https://bibinba.github.io/WebARWithModelViewer/

アクセスするとこのような感じになっています。
![SnapCrab_19-12-1_20-5-25_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/9a036fe0-7d53-2f77-f260-e349a5ae3174.png)

サイズがおかしいかもしれませんが、Web初心者なので許してください。

#完成

上記の[サイト](https://bibinba.github.io/WebARWithModelViewer/)にARcoreかARkit対応のスマホでアクセスして、デモの時と同じように右下のcubeマークを押すとARができるはずです。
![SnapCrab_19-12-1_20-5-14_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190043/45cab7af-9040-d854-d430-0a3453767715.png)

ブラウザによってはうまく見れないかもしれません。
対応ブラウザは[ドキュメント](https://modelviewer.dev/)の下のほうに書いてあります。

#最後に
Web初心者だとARでモデルを表示するので精一杯という感じはしますが、WebAR自体は便利なのでどんどんお手軽にいろいろな機能が開発できるようになるといいなと思います。

ちなみに他にもwebARコンテンツを作る方法はあります。
AR.js 
[【AR.js入門】簡単にWebARで遊んでみた【A-Frame使うよ】](https://qiita.com/sakaryu/items/769a2a538baf7e4ee1c7)

8th wall web
[WebブラウザでマーカーレスAR (Three.js + 8th Wall)](https://qiita.com/ukonpower/items/5623e423e3362fef513a)

いろいろ試してみてください！