<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: HEAVEN ちゃん a.k.a いっこう</title>
    <description>The latest articles on DEV Community by HEAVEN ちゃん a.k.a いっこう (@ikkou).</description>
    <link>https://dev.to/ikkou</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F43396%2F6976c4d4-3a2b-4c12-bbbd-959c5bd13193.jpg</url>
      <title>DEV Community: HEAVEN ちゃん a.k.a いっこう</title>
      <link>https://dev.to/ikkou</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ikkou"/>
    <language>en</language>
    <item>
      <title>WebXR Device API が有効になっている Chrome 85 で Oculus 系の HMD が認識されない件とその解決方法が無い件について</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Mon, 14 Sep 2020 03:03:36 +0000</pubDate>
      <link>https://dev.to/ikkou/webxr-device-api-chrome-85-oculus-hmd-3c8m</link>
      <guid>https://dev.to/ikkou/webxr-device-api-chrome-85-oculus-hmd-3c8m</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'm sorry, this article is in Japanese only.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;本記事は『&lt;a href="https://dev.to/ikkou/webxr-device-api-chrome-84-oculus-hmd-1g33"&gt;WebXR Device API が有効になっている Chrome 84 で Oculus 系の HMD が認識されない件とその解決方法について&lt;/a&gt;』の続編です。&lt;/li&gt;
&lt;li&gt;Windows 版 Chrome を対象としています。

&lt;ul&gt;
&lt;li&gt;Mac 版 Chrome も WebXR Device API をサポートしていますが、Oculus 系の HMD は Mac をサポートしていません。&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chrome 84 で使えた起動オプション &lt;code&gt;--disable-features=XRSandbox --enable-features=oculus --force-webxr-runtime=oculus&lt;/code&gt; は Chrome 85 以降では使えない&lt;/li&gt;
&lt;li&gt;Chrome 85 と Oculus 系 HMD の組み合わせで動作させる方法はない&lt;/li&gt;
&lt;li&gt;Chrome ベータ版 v86.0.4240.22 と Chrome Canary 87.0.4257.0 は共にフラグの変更や起動オプションなしで正常に動作する&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1303199925702807552"&gt;https://twitter.com/ikkou/status/1303199925702807552&lt;/a&gt;&lt;br&gt;
Ref. &lt;a href="https://twitter.com/ikkou/status/1303205860873703425"&gt;https://twitter.com/ikkou/status/1303205860873703425&lt;/a&gt;&lt;br&gt;
Ref. &lt;a href="https://twitter.com/ikkou/status/1303206354383822848"&gt;https://twitter.com/ikkou/status/1303206354383822848&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chrome 85 では Oculus 系 HMD が使えない
&lt;/h2&gt;

&lt;p&gt;Chrome 84 は起動オプションで、Chrome ベータ版と Chrome Canary の挙動から推測するに Chrome 86 以降は起動オプション無しで、それぞれ動作しますが、その間にある Chrome 85 で Oculus 系 HMD で WebXR Device API を使ったコンテンツを楽しむ方法は無いようです。&lt;/p&gt;

&lt;p&gt;ちなみに、Chrome 84 時点で起動オプションが示されていた『&lt;a href="https://immersiveweb.dev/chrome-support.html"&gt;Chrome Hardware Support&lt;/a&gt;』から起動オプションの記述は既に消えています。&lt;/p&gt;

&lt;p&gt;順当に行けば次の Chrome 86 で Chrome ベータ版と同じ、起動オプション無しで動作するようになると思われるので、Chrome 86 を待ちましょう。&lt;/p&gt;

&lt;p&gt;また、Oculus 系 HMD の内、&lt;strong&gt;Oculus Quest ユーザーは、Oculus Link にこだわりがなければ WebXR Device API に対応している標準ブラウザアプリの Oculus Browser を使えば万事解決します:)&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webxr</category>
      <category>webxrdeviceapi</category>
      <category>chrome</category>
    </item>
    <item>
      <title>WebXR Device API が有効になっている Chrome 84 で Oculus 系の HMD が認識されない件とその解決方法について</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Tue, 25 Aug 2020 09:09:46 +0000</pubDate>
      <link>https://dev.to/ikkou/webxr-device-api-chrome-84-oculus-hmd-1g33</link>
      <guid>https://dev.to/ikkou/webxr-device-api-chrome-84-oculus-hmd-1g33</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'm sorry, this article is in Japanese only.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;本記事は『&lt;a href="https://dev.to/ikkou/chrome-79-webxr-device-api-oculus-hmd-8b"&gt;Chrome 79 から WebXR Device API が有効になるも Oculus 系の HMD が認識されない件とその解決方法について&lt;/a&gt;』の続編です。&lt;/p&gt;

&lt;h3&gt;
  
  
  事の発端
&lt;/h3&gt;

&lt;p&gt;2019-12-20 JST 時点で Chrome v79 における解決方法を示しましたが、それから 8 ヶ月も経つと役に立たない記事になっているので、以降検索から着地した際に有意な情報を提供したいと考えています。&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;あれー？WebVRがChrome/Chrome Canaryで動かないな。フラグをオンにしても駄目になったのか？&lt;br&gt;
Ref. &lt;a href="https://twitter.com/shichi_14/status/1297838909208981512"&gt;https://twitter.com/shichi_14/status/1297838909208981512&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;その後の Update は追っていない且つ手前味噌ですが、ここに書いてある内容でも解決できない感じですか? ( 最新情報に Update しなくちゃ&lt;br&gt;
Ref. &lt;a href="https://twitter.com/ikkou/status/1298084628717215745"&gt;https://twitter.com/ikkou/status/1298084628717215745&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;p&gt;wakufactoryさんが書いている通り、WebXRに関するフラグの内容が変わっています。&lt;br&gt;
なお、Firefox(v79.0)の場合はOculusLink、SteamVRでWebXR Sample PageもWebXR Exporterも動作しました。&lt;br&gt;
Ref. &lt;a href="https://twitter.com/shichi_14/status/1298107512097390600"&gt;https://twitter.com/shichi_14/status/1298107512097390600&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  解決方法
&lt;/h2&gt;

&lt;p&gt;chrome://flags からそれらしい flag が消えてもうだめかと思いましたが、実は『&lt;a href="https://immersiveweb.dev/chrome-support.html"&gt;Chrome Hardware Support - Immersive Web Developer Home&lt;/a&gt;』に解決方法が記載されています。&lt;/p&gt;

&lt;p&gt;曰く、Chrome と Oculus 系 HMD の組み合わせの場合は &lt;code&gt;--disable-features=XRSandbox --enable-features=oculus --force-webxr-runtime=oculus&lt;/code&gt; の起動オプション付きで Chrome を起動すれば OK です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M6iXp2FG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/avkd8bwdtgmmcfsa1jop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M6iXp2FG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/avkd8bwdtgmmcfsa1jop.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;画像は Chrome の試験運用版にあたる Chrome Canary のものですが、ショートカットを右クリック→プロパティ→ショートカットのリンク先に上記の起動オプションを追加→適用して OK という手順を踏むことで解決できます。&lt;/p&gt;

&lt;p&gt;なお、件のページにも記載されていますが、起動オプションは標準的な方法ではありません。今回のような Chrome と Oculus 系 HMD の組み合わせで WebXR Device API を用いた WebXR コンテンツを体験したいときのみ、この起動オプションを使い、普段使いはなるべく避けましょう。&lt;/p&gt;

&lt;p&gt;というわけで 2020-08-25 JST 現在も、WebXR Device API に「真の標準対応」しているブラウザは Oculus Browser だけです!!&lt;/p&gt;

&lt;p&gt;現場からは以上です。&lt;/p&gt;

</description>
      <category>webxr</category>
      <category>webvr</category>
      <category>webxrdeviceapi</category>
      <category>chrome</category>
    </item>
    <item>
      <title>VRoid Hub を使って “うちの子” を現実世界に重畳する</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Mon, 06 Jul 2020 10:06:48 +0000</pubDate>
      <link>https://dev.to/ikkou/vroid-hub-3jcf</link>
      <guid>https://dev.to/ikkou/vroid-hub-3jcf</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'm sorry, this article is in Japanese only.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;ブラウザ版の VRoid Hub で AR を試したい人は &lt;a href="https://developers.google.com/ar/discover/supported-devices"&gt;ARCore supported devices&lt;/a&gt; に載っている Android スマートフォンを買うか、iPhone ユーザーの場合は App Store で WebXR Viewer をインストールすれば OK 、これで今すぐ “うちの子” に会える!!&lt;/p&gt;

&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;VRoid Hub に試験的機能として WebAR 表示機能が追加されました👏&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/vroid_pixiv/status/1277579662424588289"&gt;https://twitter.com/vroid_pixiv/status/1277579662424588289&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;結果として “うちの子” を現実世界に連れてくることが可能になりました！&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tAsPSb7x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j59n86af14kfy7p3128a.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tAsPSb7x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/j59n86af14kfy7p3128a.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. “うちの子” &lt;a href="https://hub.vroid.com/characters/3498592425292843063/models/1101923393537324450"&gt;HEAVEN ちゃん&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この記事では “うちの子” を現実世界に連れてくるための要件と、その技術的背景を(中の人ではないので推測して)紹介します。&lt;/p&gt;

&lt;h2&gt;
  
  
  動作要件
&lt;/h2&gt;

&lt;p&gt;冒頭の繰り返しになりますが、“うちの子” を現実世界に連れてくるためには &lt;a href="https://developers.google.com/ar/discover/supported-devices"&gt;ARCore supported devices&lt;/a&gt; に掲載されている ARCore が動作する Android 7 以上 ( ※ARCore の最下限 OS バージョン ) のスマートフォンが必要です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7X-6vn-c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i7j5tjw1anw3yg1vssq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7X-6vn-c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i7j5tjw1anw3yg1vssq8.png" alt="Google Chrome でアクセスすると AR 用のアイコンが表示される"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;^ ARCore に対応した Pixel 3a の Google Chrome でアクセスすると AR 用のアイコンが表示される&lt;/p&gt;

&lt;p&gt;有名どころでは Google による Android のリファレンス端末である Pixel シリーズの他、Galaxy S シリーズや一部の Xperia などが ARCore に対応しています。&lt;/p&gt;

&lt;p&gt;参考までに、2020-07-06 JST 現在、最安で手に入れられる ARCore が動作する端末は、Rakuten Mobile 経由 ¥17,000 の Galaxy A7 です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZBhP-CNP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ntfbz1cm6bi499dsws2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZBhP-CNP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ntfbz1cm6bi499dsws2w.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://network.mobile.rakuten.co.jp/product/smartphone/galaxy-a7/"&gt;https://network.mobile.rakuten.co.jp/product/smartphone/galaxy-a7/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1273908350904725509"&gt;https://twitter.com/ikkou/status/1273908350904725509&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JuA_k4gS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w9qt7c3rza5hfkbhx7cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JuA_k4gS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/w9qt7c3rza5hfkbhx7cl.png" alt="iOS Safari でアクセスしても AR 用のアイコンは表示されない"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;^ iOS Safari でアクセスしても AR 用のアイコンは表示されない&lt;/p&gt;

&lt;p&gt;対して iOS の Safari は ARCore に対応していないため、iPhone ユーザーは現実世界に連れてこれない、と思いがちですが、WebXR を強く推している Mozilla 謹製の &lt;code&gt;WebXR Viewer&lt;/code&gt; を使うことで、iOS でも「擬似的に」 ARCore 相当の状態を作り出せるので、かろうじて “うちの子” を連れてこれます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pbG7YyKh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bnvk3lwpxu5z5ih2k2ig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pbG7YyKh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bnvk3lwpxu5z5ih2k2ig.png" alt="iOS でも XRViewer を使えば AR 用のアイコンが表示される"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;^ iOS でも XRViewer を使えば AR 用のアイコンが表示される&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--njYzqZHc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yq0bgp5jayrwx52nmp8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--njYzqZHc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yq0bgp5jayrwx52nmp8x.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://apps.apple.com/us/app/webxr-viewer/id1295998056"&gt;https://apps.apple.com/us/app/webxr-viewer/id1295998056&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  技術的背景
&lt;/h2&gt;

&lt;p&gt;VRoid Hub で “うちの子” を現実世界に呼び出すための技術として Google 謹製の &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; が使われていることをソースコードから読み取れます。&lt;/p&gt;

&lt;p&gt;この &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; は WebAR を実現するためのもので、Android であれば &lt;code&gt;glTF/GLB&lt;/code&gt; ファイルを、iOS であれば &lt;code&gt;USDZ&lt;/code&gt; ファイルを呼び出して現実世界に重畳できます。&lt;/p&gt;

&lt;p&gt;Google 検索で犬や猫、最近では恐竜を検索すると AR で表示できるようになったことがニュースになりましたが、まさにそこで使われている技術です。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://japan.googleblog.com/2020/07/travel-back-time-ar-dinosaurs-search.html"&gt;https://japan.googleblog.com/2020/07/travel-back-time-ar-dinosaurs-search.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;私はこの &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; を使い iOS/Android の両 OS に対応した「Keep Distance Ruler」を作ったりする程度にはこの &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; そして WebXR を推しています。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://keep-distance-ruler.glitch.me/"&gt;https://keep-distance-ruler.glitch.me/&lt;/a&gt;&lt;br&gt;
Ref. &lt;a href="https://www.watch.impress.co.jp/docs/series/nishida/1246569.html"&gt;https://www.watch.impress.co.jp/docs/series/nishida/1246569.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;閑話休題。&lt;/p&gt;

&lt;p&gt;そういうわけで &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; を使えば iOS/Android の両 OS に対応させることは可能ですが、それを実現するには Android 用の &lt;code&gt;glTF/GLB&lt;/code&gt; ファイルと iOS 用の &lt;code&gt;USDZ&lt;/code&gt; ファイルが必要になります。&lt;/p&gt;

&lt;p&gt;VRoid Hub で閲覧できる “うちの子” は、 &lt;code&gt;VRM&lt;/code&gt; フォーマットのものです。この VRM フォーマットは &lt;code&gt;glTF2.0&lt;/code&gt; フォーマットを拡張したものになります。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://vrm.dev/vrm_about/"&gt;https://vrm.dev/vrm_about/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;そして Pixiv さんは VRM ファイルを Three.js で扱うためのライブラリ &lt;code&gt;pixiv/three-vrm&lt;/code&gt; を提供しています。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://www.pixiv.co.jp/news/press-release/article/7361/"&gt;https://www.pixiv.co.jp/news/press-release/article/7361/&lt;/a&gt;&lt;br&gt;
Ref. &lt;a href="https://github.com/pixiv/three-vrm/"&gt;https://github.com/pixiv/three-vrm/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この &lt;code&gt;pixiv/three-vrm&lt;/code&gt; は &lt;code&gt;GLTFLoader&lt;/code&gt; とあわせて使うものですが、この組み合わせによって &lt;code&gt;VRM&lt;/code&gt; フォーマットの “うちの子” をウェブで取り扱い可能な &lt;code&gt;glTF/GLB ファイル&lt;/code&gt; として扱えるようになり、結果として &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; を経由して現実世界に重畳できています。&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS の Safari で “うちの子” を現実世界に重畳したい!!
&lt;/h3&gt;

&lt;p&gt;XRViewr を使いたくない! 俺の Safari で見たいんだ! という強いこだわりをお持ちの場合、VRoid Hub では実現できませんが、Glitch 等で自前の環境を用意すれば iPhone の Safari でも現実世界に重畳できます。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;手元に “うちの子” の &lt;code&gt;VRM ファイル&lt;/code&gt; を用意します&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;うちの子.vrm&lt;/code&gt; を &lt;code&gt;うちの子.glb&lt;/code&gt; にリネームして拡張子を変更&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GLB ファイル&lt;/code&gt; を &lt;code&gt;USDZ ファイル&lt;/code&gt; に変換する

&lt;ul&gt;
&lt;li&gt;e.g. &lt;a href="https://www.vectary.com/"&gt;VECTARY&lt;/a&gt; に課金した上で import &lt;code&gt;GLB ファイル&lt;/code&gt; then export &lt;code&gt;USDZ ファイル&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;e.g. &lt;a href="https://developer.apple.com/jp/augmented-reality/resources/"&gt;usdzツール&lt;/a&gt;(※要ログイン) で &lt;code&gt;import GLB ファイル&lt;/code&gt; then export &lt;code&gt;USDZ ファイル&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; を使って次の要領で &lt;code&gt;USDZ ファイル&lt;/code&gt; を読み込ませる

&lt;ul&gt;
&lt;li&gt;せっかくなので &lt;code&gt;GLB ファイル&lt;/code&gt; も一緒に読み込んでいます
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- model-viewer に必要なコンポーネントを読み込む --&amp;gt;
&amp;lt;script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script nomodule src="https://unpkg.com/@google/model-viewer/dist/model-viewer-legacy.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;!-- GLB ファイルと USDZ ファイルを読み込む --&amp;gt;
&amp;lt;model-viewer src="path/to/Uchinoko.glb"
              ios-src="path/to/Uchinoko.usdz"
              alt="うちの子"
              shadow-intensity="1"
              camera-controls
              interaction-prompt="auto"
              auto-rotate ar&amp;gt;
&amp;lt;/model-viewer&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;シェーダーの調整が必要なこともありますが、サクッと自前の環境で “うちの子” を呼び出せることが分かるかと思います。&lt;/p&gt;

&lt;p&gt;なお、この場合 “うちの子” の 3D ファイルが一般公開状態になり、誰でもダウンロードもとい「誘拐」可能になります。そのあたりを気にする方は誰でも参照可能な状態で 3D ファイルを配置することはオススメしません。&lt;/p&gt;




&lt;p&gt;現場からは以上です。&lt;/p&gt;

&lt;p&gt;良き VRoid ライフを !!&lt;/p&gt;

</description>
      <category>webxr</category>
      <category>webar</category>
      <category>vroid</category>
    </item>
    <item>
      <title>Maps SDK for Unity を試してみた</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Fri, 19 Jun 2020 05:37:51 +0000</pubDate>
      <link>https://dev.to/ikkou/maps-sdk-for-unity-4l65</link>
      <guid>https://dev.to/ikkou/maps-sdk-for-unity-4l65</guid>
      <description>&lt;p&gt;Hi, I'm &lt;a href="https://twitter.com/ikkou"&gt;@ikkou&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;これはもう何番煎じかわからない「Maps SDK for Unity を試してみる」です。&lt;/p&gt;

&lt;h2&gt;
  
  
  Maps SDK for Unity とは
&lt;/h2&gt;

&lt;p&gt;Maps SDK for Unity は Google マップの地形データを使った iOS/Android 向けのアプリケーションを開発できる Unity 向けの SDK です。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Maps SDK for Unity is a set of development tools, services, and ready-made assets, that extend the Unity game development environment with features that allow you to create real-world mobile games—easily!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Reference: &lt;a href="https://developers.google.com/maps/documentation/gaming/overview_musk"&gt;https://developers.google.com/maps/documentation/gaming/overview_musk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Google マップを使ったアプリケーションを開発する際にお世話になる Google Maps Platform の 1 カテゴリにあたります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QqjJTrwn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8l4w98qsxby7ociuarpu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QqjJTrwn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8l4w98qsxby7ociuarpu.png" alt="Alt Text" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://cloud.google.com/maps-platform/gaming"&gt;https://cloud.google.com/maps-platform/gaming&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これまでは特定のゲーム開発企業向けにクローズドで展開されていましたが、2020/06/16 から一般公開されました。&lt;/p&gt;

&lt;p&gt;簡単に言うと俺俺 Pokémon GO を作れるようになります。&lt;/p&gt;

&lt;p&gt;後述しますが、小さな範囲でテストするだけなら無償、一定以上の DAU を集める場合は有償となります。&lt;/p&gt;

&lt;h2&gt;
  
  
  Maps SDK for Unity のはじめかた
&lt;/h2&gt;

&lt;p&gt;わかりやすいチュートリアルが用意されているので、順を追って進めていきましょう。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/maps/documentation/gaming/quick_start"&gt;Hands-on Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/maps/documentation/gaming/example_scenes"&gt;Maps SDK for Unity Example Scenes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  下準備 GCP 編
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JUoeux7x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0yreqbm5ygy1x10unxpo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JUoeux7x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0yreqbm5ygy1x10unxpo.png" alt="Alt Text" width="880" height="733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maps SDK for Unity を動かすには &lt;code&gt;Semantic Tile API&lt;/code&gt; と &lt;code&gt;Playable Locations API&lt;/code&gt; を有効化する必要があります。既に有効化済みの人は読み飛ばしてください。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To use Google Maps Platform gaming services, you must download the Maps SDK for Unity. The Semantic Tile API and the Playable Locations API will be enabled for you by default.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://developers.google.com/maps/documentation/gaming/get_started_gaming"&gt;https://developers.google.com/maps/documentation/gaming/get_started_gaming&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;同 API が有効化されていない、あるいは GCP のアカウントを持っていない人は任意のプロジェクトを作成して有効化してください。無償枠の中で収めるつもりの人もクレジットカードの登録が必要です。大丈夫です。この時点では課金されません。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;任意の Google アカウントでログインした状態で &lt;a href="https://console.cloud.google.com/"&gt;https://console.cloud.google.com/&lt;/a&gt; にアクセスして有効化&lt;/li&gt;
&lt;li&gt;任意のプロジェクトを作成&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;＋ APIとサービスを有効化&lt;/code&gt; をクリック&lt;/li&gt;
&lt;li&gt;API を有効化する

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Semantic Tile API&lt;/code&gt; を検索して &lt;code&gt;有効にする&lt;/code&gt; をクリック&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Playable Locations API&lt;/code&gt; を検索して &lt;code&gt;有効にする&lt;/code&gt; をクリック&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;認証情報を作成する

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;APIとサービス &amp;gt; 認証情報&lt;/code&gt; で &lt;code&gt;＋ 認証情報を作成&lt;/code&gt; をクリックして &lt;code&gt;APIキー&lt;/code&gt; を選択する&lt;/li&gt;
&lt;li&gt;作成された &lt;code&gt;自分のAPIキー&lt;/code&gt; を控える&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;そのまま &lt;code&gt;キーを制限&lt;/code&gt; をクリックする&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;API キーの制限と名前変更&lt;/code&gt; で名前をわかりやすいものに変更する ( 任意 )&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;API の制限&lt;/code&gt; で &lt;code&gt;キーを制限&lt;/code&gt; をクリックして &lt;code&gt;Semantic Tile API&lt;/code&gt; と &lt;code&gt;Playable Locations API&lt;/code&gt; を選択して保存する&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GCP の下準備は以上です。&lt;/p&gt;

&lt;p&gt;ちなみに API キーが漏れると、悪用されるなどして高額な請求が届くことがあります。間違ってもスクショを Tweet したり GitHub にそのままあげるなどという暴挙に出ないでください。&lt;/p&gt;

&lt;h3&gt;
  
  
  下準備 Unity 編
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qNo3U5Ui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dnko8uxwc2ifs8x4pxha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qNo3U5Ui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dnko8uxwc2ifs8x4pxha.png" alt="Alt Text" width="595" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unity 2018.4 以降を用意する。

&lt;ul&gt;
&lt;li&gt;今回は &lt;code&gt;2019.2.21f1&lt;/code&gt; で進めます。&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Unity 2018 系には &lt;a href="http://www.gstatic.com/mapsunitysdk/maps_sdk_for_unity_2018.zip"&gt;ここから&lt;/a&gt;、Unity 2019 系には &lt;a href="http://www.gstatic.com/mapsunitysdk/maps_sdk_for_unity_2019.zip"&gt;ここから&lt;/a&gt; それぞれ SDK をダウンロードして解凍する

&lt;ul&gt;
&lt;li&gt;なぜか日本語のリファレンスページからこのリンクが記載されているページに着地できないので、英語が不慣れな人は英語ページを日本語翻訳した方が良い&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Assets → Import Package →　Custom Package からダウンロードした &lt;code&gt;GoogleMaps.unitypackage&lt;/code&gt; をインポートする&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  サンプルシーンを試してみる
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WAfX_X_n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sv1ehm62o8vo8iacjb80.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WAfX_X_n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sv1ehm62o8vo8iacjb80.png" alt="Alt Text" width="880" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;下準備ができたら早速サンプルシーンを開いてください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assets &amp;gt; GoogleMaps &amp;gt; Examples &amp;gt; 01_GettingStarted &amp;gt; HelloWorld を開く&lt;/li&gt;
&lt;li&gt;Basic Examples Script の Inspector にある &lt;code&gt;Maps Services (Script)&lt;/code&gt; の &lt;code&gt;Api Key&lt;/code&gt; に GCP の API キーを入れる&lt;/li&gt;
&lt;li&gt;初期状態で Play をクリックすると「自由の女神像」が表示される&lt;/li&gt;
&lt;li&gt;WASD キーで前後左右に、Q キーで垂直下降、E キーで垂直上昇する&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  用意されているサンプルシーン
&lt;/h3&gt;

&lt;p&gt;MapsSDK for Unity には以下のサンプルシーンが用意されています。&lt;br&gt;
具体的にどんなことができるのか、イメージを膨らませやすいです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;01_GettingStarted &amp;gt; HelloWorld&lt;/li&gt;
&lt;li&gt;02_Fundamentals &amp;gt; MapService101&lt;/li&gt;
&lt;li&gt;03_MapsStyling &amp;gt; StylingMaps101&lt;/li&gt;
&lt;li&gt;04_Advanced &amp;gt;

&lt;ul&gt;
&lt;li&gt;EditTimePreview&lt;/li&gt;
&lt;li&gt;Fencing (好き)&lt;/li&gt;
&lt;li&gt;Miscellaneous &amp;gt;

&lt;ul&gt;
&lt;li&gt;AddingComponent&lt;/li&gt;
&lt;li&gt;DayAndNight (好き)&lt;/li&gt;
&lt;li&gt;LocationFollower&lt;/li&gt;
&lt;li&gt;Minimap (好き)&lt;/li&gt;
&lt;li&gt;PrivateRoads&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;MixedZoom&lt;/li&gt;
&lt;li&gt;MoreStyling &amp;gt;

&lt;ul&gt;
&lt;li&gt;BuildingBorders&lt;/li&gt;
&lt;li&gt;BuildingSquashing (好き)&lt;/li&gt;
&lt;li&gt;NineSlicing&lt;/li&gt;
&lt;li&gt;Parapets&lt;/li&gt;
&lt;li&gt;PrefabReplacement&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;すべてのサンプルシーンが説明されているわけではありませんが、各シーンの概要は &lt;a href="https://developers.google.com/maps/documentation/gaming/example_scenes"&gt;Maps SDK for Unity Example Scenes&lt;/a&gt; を参照してください。&lt;/p&gt;

&lt;p&gt;試すときは Scene ごとに API キーを設定してください。&lt;/p&gt;

&lt;h3&gt;
  
  
  浅草に行ってみる
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_QI-yQhh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6mry2r669bfig1jxba9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_QI-yQhh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6mry2r669bfig1jxba9f.png" alt="Alt Text" width="880" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;各シーンにアタッチされているコンポーネントの &lt;code&gt;Lat lng&lt;/code&gt; に任意の緯度と経度を指定して再生すれば、好きな場所を表示できます。&lt;/p&gt;

&lt;p&gt;緯度と経度は、例えば &lt;a href="https://www.geocoding.jp/"&gt;Geocoding.jp&lt;/a&gt; で検索する方法や、Google マップで検索する方法があります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;緯度経度をコピペするにはGoogleMapで右クリック、「この場所について」&lt;br&gt;
したに緯度経度出るけどコピペできない。クリック&lt;br&gt;
左側に出るよ！&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Reference: &lt;a href="https://bibinbaleo.hatenablog.com/entry/2020/06/17/231314#%E3%81%8A%E3%81%BE%E3%81%91%E7%B7%AF%E5%BA%A6%E7%B5%8C%E5%BA%A6%E3%82%92%E3%82%B3%E3%83%94%E3%83%9A%E3%81%99%E3%82%8B"&gt;Google Maps SDK for Unity使ってみた！ - トマシープが学ぶ - おまけ：緯度経度をコピペする&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今回、n 番煎じということもあり、東京タワーあたりは普通すぎるので、例えば観光名所として有名な浅草の雷門を指定しました。&lt;code&gt;Lat lng&lt;/code&gt; は &lt;code&gt;35.711256, 139.796772&lt;/code&gt; です。&lt;/p&gt;

&lt;p&gt;実行すると、雷門、そして浅草寺に抜ける仲見世通りが再現されていることが分かります。&lt;/p&gt;

&lt;h2&gt;
  
  
  Android 実機で動かしてみる
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XSGIuKYw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4aghgcgj90fdr74job6t.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XSGIuKYw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4aghgcgj90fdr74job6t.PNG" alt="Alt Text" width="880" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Build Setting に Scene を追加するなど、Unity から Android 実機にデプロイするお作法に則って、&lt;code&gt;Build And Run&lt;/code&gt; することで、繋いだ Android 実機で該当シーンを動かせるようになります。&lt;/p&gt;

&lt;p&gt;今回は Pixel 3a にデプロイしてみました。&lt;/p&gt;

&lt;p&gt;スマートフォンには移動に使う &lt;code&gt;WASD&lt;/code&gt; キーと上昇下降に使う &lt;code&gt;QE&lt;/code&gt; キーがありませんが、&lt;code&gt;WASD&lt;/code&gt; キーの代わりに前後左右の動きと回転を担うコントローラーが、&lt;code&gt;QE&lt;/code&gt; キーの代わりに上昇下降を担うコントローラーが用意されています。&lt;/p&gt;

&lt;p&gt;Examples として用意しているものは &lt;code&gt;Lat lng&lt;/code&gt; に緯度と経度を直接打ち込んでいるので、それこそ Pokémon GO のように「現在地」の地形データは表示できません。&lt;/p&gt;

&lt;h2&gt;
  
  
  お値段について
&lt;/h2&gt;

&lt;p&gt;Maps SDK for Unity を使えば Google マップを使った位置情報連動型のアプリが作れることはわかりました。でもお高いんでしょ?&lt;/p&gt;

&lt;p&gt;結論から言うと、始めるだけ「無償」です。個人用途/商用関係なく、一定以上の DAU を集めるなら「有償」です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W1NSHex8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ul565vsuxsfzroteza3v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W1NSHex8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ul565vsuxsfzroteza3v.png" alt="Alt Text" width="880" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://developers.google.com/maps/documentation/gaming/usage_billing"&gt;https://developers.google.com/maps/documentation/gaming/usage_billing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;要点は以下の通りです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;従量課金制&lt;/li&gt;
&lt;li&gt;毎月 $200 分のクレジットが付与されるので、その範囲に収まる限りは無償、超えた分が有償

&lt;ul&gt;
&lt;li&gt;無償クレジットは翌月以降に繰り越されない&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;課金形態はゲーム業界には馴染み深い DAU ( Daily Active User: 1ユーザーが1日に何回アクセスしてもDAU は 1 とカウントされる ) 基準

&lt;ul&gt;
&lt;li&gt;ただし 1 ユーザーが異なる 2 デバイスからアクセスした場合の DAU は 2 とカウントされる&lt;/li&gt;
&lt;li&gt;ユーザー A がアプリのキャッシュを削除するとユーザー B として扱われ DAU は 2 とカウントされる

&lt;ul&gt;
&lt;li&gt; つまりリセマラ分がカウントされる ( と認識しています )&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;DAU は PST ( 太平洋時間 ) の 0 時が基準となる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;上記の条件より一般的な DAU とは異なる数字になる可能性がある&lt;/li&gt;
&lt;li&gt;請求額は月間 DAU で決まる

&lt;ul&gt;
&lt;li&gt;ユーザー A が 1 ヶ月間 30 日毎日アクセスした場合の月間 DAU は 30&lt;/li&gt;
&lt;li&gt;月間 1,500,000 DAU までは 1,000 DAU あたり $10&lt;/li&gt;
&lt;li&gt;月間 1,500,000 ~ 7,500,000 DAU はボリュームディスカウントで 1,000 DAU あたり $8&lt;/li&gt;
&lt;li&gt;月間 7,500,000 DAU 以降は要問い合わせ&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;具体的な例は前述のページの &lt;a href="https://developers.google.com/maps/documentation/gaming/usage_billing#billing-examples"&gt;Usage and billing examples&lt;/a&gt; に記されています。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;月間の平均 DAU が 500 以下の場合は無償枠に収まる

&lt;ul&gt;
&lt;li&gt;無償枠に収まる月間 DAU は 20,000

&lt;ul&gt;
&lt;li&gt;月間の平均 DAU が 640 以下 ( 640*31=19840 ) が無償枠に収まる閾値 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;今回のような「試してみた」程度や、小さなサービスであれば必要十分

&lt;ul&gt;
&lt;li&gt;何らかのきっかけでバズると超える可能性がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;計算式は DAU 500 * 30 日間 = 15,000 月間 DAU&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;月間の平均 DAU が 1,000 の場合は有償枠になる

&lt;ul&gt;
&lt;li&gt;計算式は DAU 1,000 * 30 日間 = 30,000 月間 DAU&lt;/li&gt;
&lt;li&gt;1,000 DAU あたり $10 なので請求額は $300&lt;/li&gt;
&lt;li&gt;毎月 $200 分の無償クレジットを超えた $100 が実際の請求額になる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;月間の平均 DAU が 75,000 の場合はボリュームディスカウントが発生した有償枠になる

&lt;ul&gt;
&lt;li&gt;計算式は DAU 75,000 * 30 日間 =  2,250,000 月間 DAU&lt;/li&gt;
&lt;li&gt;月間 1,500,000 DAU までが 1,000 DAU あたり $10 で $15,000&lt;/li&gt;
&lt;li&gt;月間 1,500,000 DAU 以降は 1,000 DAU あたり $8 で $6,000

&lt;ul&gt;
&lt;li&gt;計算式は 2,250,000 - 1,500,000 = 750,000/1000 * $8&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;毎月 $200 分の無償クレジットを超えた $20,800 が実際の請求額になる

&lt;ul&gt;
&lt;li&gt;計算式は $15,000 + $6,000 - $200&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;使用量は GCP の管理画面から確認できます。&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;Maps SDK for Unity の概要、使い方、料金体系を紹介しました。&lt;/p&gt;

&lt;p&gt;「試してみる」まではこの記事で実現できますが、例えば「俺俺 Pokémon GO を作る」は実現できません。用意されている Examples とドキュメントを参考にして適宜調べてください。&lt;/p&gt;




&lt;h2&gt;
  
  
  おまけ
&lt;/h2&gt;

&lt;p&gt;原理を考えれば当たり前っぽいけれど Maps SDK for Unity を Cluster Creator Kit でそのまま使うのは無理でした。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Maps SDK for Unity と Cluster Creator Kit を組み合わせて動かせた&lt;br&gt;
そしてこのままワールドアップロードしても生成された世界は反映されませんでした&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://twitter.com/ikkou/status/1273589839779094528"&gt;https://twitter.com/ikkou/status/1273589839779094528&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;現場からは以上です。&lt;br&gt;
良き Maps SDK for Unity ライフを！&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>googlemaps</category>
      <category>mapssdk</category>
    </item>
    <item>
      <title>iOS 9のMobile Safariで消えた2つの機能</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 16:39:24 +0000</pubDate>
      <link>https://dev.to/ikkou/ios-9-mobile-safari-2-3ok6</link>
      <guid>https://dev.to/ikkou/ios-9-mobile-safari-2-3ok6</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;この記事は 2015-09-25 JST 付で Qiita に投稿したものです。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;日本時間の9月17日深夜2時、ついにiOS9がリリースされました!!&lt;br&gt;
&lt;a href="http://qiita.com/zaru/items/7bc2910b8ca4f47721c6"&gt;こんな投稿&lt;/a&gt;もあるように、地味ながら色々と便利なアップデートが加えられたiOS9のMobile Safariですが、実はひっそりと消えてしまった機能もあります。&lt;/p&gt;

&lt;p&gt;2016/03/22 追記&lt;br&gt;
本日、03/22にiOS 9.3正式版が公開されました。&lt;br&gt;
早速アップデートして試したところ、iOS 9.2同様に&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;は動作するが&lt;code&gt;apple-touch-startup-image&lt;/code&gt;は動作しないという挙動に変更はありませんでした。&lt;/p&gt;

&lt;p&gt;2015/12/09 追記&lt;br&gt;
本日、12/09にiOS 9.2正式版が公開されました。&lt;br&gt;
早速アップデートして試したところ、前評判通り&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;は再び動作するようになりましたが、残念ながら&lt;code&gt;apple-touch-startup-image&lt;/code&gt;は引き続き動作しませんでした。&lt;/p&gt;

&lt;p&gt;2015/10/30 追記&lt;br&gt;
先日、10/28にiOS 9.2 betaが開発者向けに公開されました。&lt;br&gt;
まだbeta版ですが、&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;が使えなくなった問題が修正される見込みです。仕様変更ではなくバグだったのでしょうか……。&lt;br&gt;
この問題にぶつかった人は、同様にiOS 9で消えた&lt;code&gt;apple-touch-startup-image&lt;/code&gt;も一緒に修正されていることを期待しながら、全ユーザー向けの公開を待ちましょう。&lt;/p&gt;


&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;iOS 9で&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;が死んだ!&lt;/li&gt;
&lt;li&gt;iOS 9で&lt;code&gt;apple-touch-startup-image&lt;/code&gt;が死んだ!&lt;/li&gt;
&lt;li&gt;iOS 9.0.1時点では対処方法がなさそう&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  apple-mobile-web-app-status-bar-style is dead 💀
&lt;/h2&gt;
&lt;h3&gt;
  
  
  apple-mobile-web-app-status-bar-styleとは
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;は&lt;code&gt;meta&lt;/code&gt;要素の指定のひとつで、Webサイトをフルスクリーンモードにしてネイティブアプリのように見せる&lt;code&gt;apple-mobile-web-app-capable&lt;/code&gt;と併用することで、Mobile Safariのステータスバーをアレするやつです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This meta tag has no effect unless you first specify full-screen mode as described in apple-apple-mobile-web-app-capable.&lt;br&gt;
&lt;a href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html#//apple_ref/doc/uid/TP40008193-SW4"&gt;Safari HTML Reference&lt;/a&gt;より&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  使い方
&lt;/h3&gt;

&lt;p&gt;前述の通り、&lt;code&gt;apple-mobile-web-app-capable&lt;/code&gt;の指定が前提となります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="apple-mobile-web-app-capable" content="yes"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;その上で、&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;の指定を行ないます。&lt;/p&gt;

&lt;p&gt;この時、この&lt;code&gt;meta&lt;/code&gt;要素を記述しない、あるいは&lt;code&gt;content&lt;/code&gt;に&lt;code&gt;default&lt;/code&gt;を指定すると、ステータスバーの見た目は普段通りと変わりません。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;black&lt;/code&gt;を指定するとアドレスバーが消え、不透過の黒背景になります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="apple-mobile-web-app-status-bar-style" content="black"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;black-translucent&lt;/code&gt;を指定すると、不透過ではなく透過の黒背景となり、ステータスバーが別レイヤーとなり、表示領域がステータスバーの下に潜り込むようになります。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  iOS 9でどう変わったか
&lt;/h3&gt;

&lt;p&gt;ネイティブアプリのように振る舞う&lt;code&gt;apple-mobile-web-app-capable&lt;/code&gt;は今まで通り動作しますが、&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;の指定が効かなくなりました。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;black&lt;/code&gt;を指定しても、&lt;code&gt;black-translucent&lt;/code&gt;を指定しても、&lt;code&gt;default&lt;/code&gt;を指定した状態、つまり何も変化しなくなりました。&lt;/p&gt;

&lt;p&gt;思い返せば、&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;はOSのアップデートによる仕様変更の多い指定でした。&lt;/p&gt;

&lt;p&gt;Safari HTML Referenceの&lt;a href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html"&gt;Supported Meta Tags&lt;/a&gt;には&lt;a href="https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html#//apple_ref/doc/uid/TP40008193-SW4"&gt;まだ掲載されている&lt;/a&gt;ので、一時的なバグなのかもしれませんが、初期ベータの頃から始まり、先日アップデートされたiOS 9.0.1でも変わらず動作しないので、バグではなく、仕様変更なのかもしれません。&lt;/p&gt;

&lt;h2&gt;
  
  
  apple-touch-startup-image is dead 💀
&lt;/h2&gt;

&lt;h3&gt;
  
  
  apple-touch-startup-imageとは
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;apple-touch-startup-image&lt;/code&gt;も&lt;code&gt;apple-mobile-web-app-status-bar-style&lt;/code&gt;同様に、&lt;code&gt;link&lt;/code&gt;要素の指定のひとつで、適切な画像を指定することで、ネイティブアプリのようなスプラッシュ画面を表示することが出来ます。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On iOS, similar to native applications, you can specify a startup image that is displayed while your web application launches. This is especially useful when your web application is offline.&lt;br&gt;
&lt;a href="https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html#//apple_ref/doc/uid/TP40002051-CH3-SW6"&gt;Safari HTML Reference&lt;/a&gt;より&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  使い方
&lt;/h3&gt;

&lt;p&gt;この指定もやはり&lt;code&gt;apple-mobile-web-app-capable&lt;/code&gt;と併用して使います。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="apple-mobile-web-app-capable" content="yes"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;その上で、メディアクエリを活用して、デバイス別、縦横別にスプラッシュ画面で表示する画像を指定します。&lt;/p&gt;

&lt;p&gt;例えば、&lt;a href="https://developers.google.com/web/fundamentals/"&gt;Google DevelopersのWeb Fundamentals&lt;/a&gt;では、&lt;a href="https://gist.github.com/tfausak/2222823"&gt;tfausak’s gist&lt;/a&gt;で示された指定が例として挙げられています。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apple のドキュメントではこのトピックはほとんど取り上げられませんが、開発者コミュニティは 、高度なメディア クエリを使用して、すべての端末を対象にする方法を考え出しました。 これによって適切なデバイスを選択し、正しいイメージを指定することができます。 [tfausak’s gist] の好意により 、ここに具体的な解決策を示します(//gist.github.com/tfausak/2222823):&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- iPad retina portrait startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/1536x2008"
      media="(device-width: 768px) and (device-height: 1024px)
             and (-webkit-device-pixel-ratio: 2)
             and (orientation: portrait)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPad retina landscape startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/1496x2048"
      media="(device-width: 768px) and (device-height: 1024px)
             and (-webkit-device-pixel-ratio: 2)
             and (orientation: landscape)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPad non-retina portrait startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/768x1004"
      media="(device-width: 768px) and (device-height: 1024px)
             and (-webkit-device-pixel-ratio: 1)
             and (orientation: portrait)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPad non-retina landscape startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/748x1024"
      media="(device-width: 768px) and (device-height: 1024px)
             and (-webkit-device-pixel-ratio: 1)
             and (orientation: landscape)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPhone 6 Plus portrait startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/1242x2148"
      media="(device-width: 414px) and (device-height: 736px)
             and (-webkit-device-pixel-ratio: 3)
             and (orientation: portrait)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPhone 6 Plus landscape startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/1182x2208"
      media="(device-width: 414px) and (device-height: 736px)
             and (-webkit-device-pixel-ratio: 3)
             and (orientation: landscape)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPhone 6 startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/750x1294"
      media="(device-width: 375px) and (device-height: 667px)
             and (-webkit-device-pixel-ratio: 2)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPhone 5 startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/640x1096"
      media="(device-width: 320px) and (device-height: 568px)
             and (-webkit-device-pixel-ratio: 2)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPhone &amp;lt; 5 retina startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/640x920"
      media="(device-width: 320px) and (device-height: 480px)
             and (-webkit-device-pixel-ratio: 2)"
      rel="apple-touch-startup-image"&amp;gt;

&amp;lt;!-- iPhone &amp;lt; 5 non-retina startup image --&amp;gt;
&amp;lt;link href="https://placehold.it/320x460"
      media="(device-width: 320px) and (device-height: 480px)
             and (-webkit-device-pixel-ratio: 1)"
      rel="apple-touch-startup-image"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;ちなみに、Web Fundamentalsでは、iPhone 6/6 Plus発売以前のものが例として提示されていますが、最新の&lt;code&gt;tfausak’s gist&lt;/code&gt;では、iPhone 6/6 Plusの&lt;code&gt;device-pixel-ratio: 3&lt;/code&gt;に対応したものにアップデートされています。&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS 9でどう変わったか
&lt;/h3&gt;

&lt;p&gt;せっかくデバイスごと、縦横ごとに適切なスプラッシュ画面を必要な枚数だけ用意したとしても、iOS 9から動作しなくなりました。&lt;/p&gt;

&lt;h2&gt;
  
  
  どうすれば良いのか?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  対応方法
&lt;/h3&gt;

&lt;p&gt;9月25日現在、最新のiOS 9.0.1では真っ当な対応方法が見つかっていません。&lt;/p&gt;

&lt;p&gt;ちなみに、Apple Press Infoにリリースが出ている通り、iOS 9への移行率は、iOS 9のリリースから数日で50%を超えています。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Appleはまた、新しいiOSへの移行が過去最速となり、すでに50パーセント以上のデバイスがiOS 9となっていることも併せて発表しました。&lt;br&gt;
&lt;a href="http://www.apple.com/jp/pr/library/2015/09/21iPhone-6s-iPhone-6s-Plus-Arrive-on-Friday-September-25.html"&gt;http://www.apple.com/jp/pr/library/2015/09/21iPhone-6s-iPhone-6s-Plus-Arrive-on-Friday-September-25.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;本日、9月25日にはiOS 9がデフォルトとなっているiPhone 6sとiPhone 6s Plusが発売され、iOS 9の比率はさらに上がることが予想されます。&lt;/p&gt;

&lt;p&gt;このまま仕様変更となるのか、あるいは修正されるのか、こればかりは予想出来ませんが、特に&lt;code&gt;apple-touch-startup-image&lt;/code&gt;は適切に指定すれば素敵なWebアプリに仕立てあげられるので、復活すると嬉しいなーと思っています。&lt;/p&gt;

&lt;h2&gt;
  
  
  リファレンス
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://forums.developer.apple.com/thread/9819"&gt;In iOS 9 does "apple-mobile-web-app-status-bar-... | Apple Developer Forums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/31471603/ios-9-status-bar-meta-tag-and-startup-image-links-not-working"&gt;iphone - iOS 9 status bar meta tag and startup image links not working - Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ios</category>
    </item>
    <item>
      <title>WebAR の現状確認 2019 Winter</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 16:38:06 +0000</pubDate>
      <link>https://dev.to/ikkou/webar-2019-winter-2nbn</link>
      <guid>https://dev.to/ikkou/webar-2019-winter-2nbn</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;この記事は 2019-12-20 JST 付で Qiita に投稿したものです。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;この記事は &lt;a href="https://qiita.com/advent-calendar/2019/zozo_tech2"&gt;ZOZOテクノロジーズ #2 Advent Calendar 2019&lt;/a&gt; 20日目の記事です。&lt;br&gt;
昨日は @mitanih さんによる「&lt;a href="https://qiita.com/mitanih/items/d4f2c2d5c464fb7c3bfd"&gt;【WEB版 WEAR】position: sticky で似ているアイテム検索の使いやすい UI/UX を実現する&lt;/a&gt;」でした。&lt;/p&gt;
&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;2019/11/01 より ZOZO Technologies, Inc. に参画した AR, VR, MR な xR あるいは XR 領域やっていきの &lt;a href="https://twitter.com/ikkou"&gt;ikkou&lt;/a&gt; です。お仕事では XR × Fashion Tech を軸としてアレコレやっていく感じになりますが、個人の活動としては注目すべきウェブ技術のひとつである &lt;code&gt;WebXR&lt;/code&gt; を特に推しています。&lt;/p&gt;

&lt;p&gt;本記事では 2019/12/12 に XR-Hub Cafe で催された &lt;a href="https://webar-tokyo.connpass.com/event/156371/"&gt;WebAR TOKYO #01&lt;/a&gt; のオープニング・セッションで喋った「&lt;a href="https://speakerdeck.com/ikkou/the-past-and-future-of-webar-the-webxr-device-api-was-shipped-in-chrome-79"&gt;The past and future of WebAR - The WebXR Device API was shipped in Chrome 79&lt;/a&gt;」のアフターフォローとして 2019/12/20 現在の、特にモバイルにおける &lt;code&gt;WebAR&lt;/code&gt; の動向を具体的な開発手法も交えながら説明します。&lt;/p&gt;

&lt;p&gt;難易度は控えめ。初学者向けです。&lt;/p&gt;
&lt;h3&gt;
  
  
  はじめて WebAR という言葉を聞いた方へ
&lt;/h3&gt;

&lt;p&gt;今まで &lt;code&gt;WebAR&lt;/code&gt; に触れたことがない場合、取り急ぎ iPhone ユーザーであれば Safari で、Android ユーザーであれば &lt;a href="https://developers.google.com/ar/discover/supported-devices"&gt;ARCore 対応端末&lt;/a&gt;の Chrome で、Google 検索で「猫」と検索してみてください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vQ6qiyaH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/skqso9jiuqe2j12kvr5o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vQ6qiyaH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/skqso9jiuqe2j12kvr5o.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;検索結果を少しスクロールすると出てくる「3D 表示」というボタンをタップして、表示される指示に従うと、可愛い猫が現実世界に現れます。このように『ブラウザをきっかけとした AR 表現』を本記事では &lt;code&gt;WebAR&lt;/code&gt; と定義しています。 &lt;/p&gt;

&lt;p&gt;&lt;code&gt;Web AR&lt;/code&gt; だったり &lt;code&gt;webAR&lt;/code&gt; だったり、小文字・大文字の違い、半角スペースの有無の違いはありますが、個人的な見解として『ブラウザをきっかけとした AR 表現』は総じて &lt;code&gt;WebAR&lt;/code&gt; であると考えています。少なくとも技術に対する名称であって商品名ではない認識です。&lt;/p&gt;

&lt;p&gt;後述しますが、『ブラウザをきっかけとした VR 表現』を &lt;code&gt;WebVR&lt;/code&gt; と言い、それらをひっくるめたものを &lt;code&gt;WebXR&lt;/code&gt; と言います。&lt;/p&gt;
&lt;h2&gt;
  
  
  もっと知られて欲しい WebXR Device API の話
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; に触れる前に、まずは &lt;code&gt;WebXR Device API&lt;/code&gt; について説明します。&lt;/p&gt;
&lt;h3&gt;
  
  
  The WebXR Device API was shipped in Chrome 79
&lt;/h3&gt;

&lt;p&gt;US 時間で 2019/12/10 より &lt;code&gt;Chrome 79.0.3945.79&lt;/code&gt; が正式公開されました 🎉&lt;br&gt;
2019/12/20 現在で Chrome のバージョンが 79 になっていない人は今すぐアップデートして Chrome を再起動してください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p8kIoeP9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1ycw6wd4to5rv889e09h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p8kIoeP9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1ycw6wd4to5rv889e09h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chrome 79 に含まれるアップデートは次の YouTube 動画で確認可能です。&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=L0OB0_bO5I0&amp;amp;feature=youtu.be&amp;amp;t=59"&gt;https://www.youtube.com/watch?v=L0OB0_bO5I0&amp;amp;feature=youtu.be&amp;amp;t=59&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;様々なアップデートが入っていますが、Chrome 79 から &lt;code&gt;WebXR Device API&lt;/code&gt; に正式対応しました。Chrome 78 以前であれば &lt;code&gt;chrome://flags&lt;/code&gt; から明示的に ON にしなければならなかった &lt;code&gt;WebXR Device API&lt;/code&gt; が標準で使える状態になった、記念すべきアップデートです。&lt;/p&gt;
&lt;h3&gt;
  
  
  WebXR Device API とは何か
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;WebXR Device API&lt;/code&gt; を一言で説明すると「ブラウザ経由で (VR|AR|MR) HMD を扱いたいときに使う API」です。(VR|AR|MR) HMD の向きや加速度、コントローラーの位置を取得できます。&lt;/p&gt;

&lt;p&gt;もともとは Oculus Rift や HTC VIVE などの VR HMD のみを対象としていた &lt;code&gt;WebVR API&lt;/code&gt; が存在していて、時代の流れとともに AR HMD や MR HMD が登場し、その対象範囲は VR だけに留まるものではないという思いから &lt;code&gt;WebXR Device API&lt;/code&gt; が生まれました。&lt;/p&gt;

&lt;p&gt;2017/12/12 をもって &lt;code&gt;WebXR Device API&lt;/code&gt; に置き換わり、最終バージョンを v1.1 として API の更新は停止しました。 &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Development of the WebVR API has halted in favor of being replaced the WebXR Device API. Several browsers will continue to support this version of the API in the meantime.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;WebVR Editor’s Draft, 12 December 2017&lt;br&gt;
&lt;a href="https://immersive-web.github.io/webvr/spec/1.1/"&gt;https://immersive-web.github.io/webvr/spec/1.1/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Spec of WebXR Device API
&lt;/h3&gt;

&lt;p&gt;ご存知の通り Web の Spec つまり仕様は W3C によって策定されていて、例に漏れず &lt;code&gt;WebXR Device API&lt;/code&gt; もその対象に含まれています。&lt;/p&gt;

&lt;p&gt;状況としては W3C の正式な策定フェーズのひとつである &lt;code&gt;Working Draft&lt;/code&gt; のものと、そこに至る前段階である &lt;code&gt;Editor’s Draft&lt;/code&gt; それぞれの仕様が存在しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebXR Device API, W3C Working Draft, 10 October 2019
&lt;a href="https://www.w3.org/TR/webxr/"&gt;https://www.w3.org/TR/webxr/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;WebXR Device API, Editor’s Draft, 11 December 2019
&lt;a href="https://immersive-web.github.io/webxr/"&gt;https://immersive-web.github.io/webxr/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;各ブラウザの実装状況はお馴染みの &lt;a href="https://caniuse.com/"&gt;Can I use... Support tables for HTML5, CSS3, etc&lt;/a&gt; に掲載されている通り、Chrome は 79 から &lt;code&gt;条件付き&lt;/code&gt; で実装、他ブラウザに関しては未対応という状況です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1hX-YyC1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/su5y0wmtar523s68snnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1hX-YyC1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/su5y0wmtar523s68snnv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;条件付きというのは、一例として、前述の通り &lt;code&gt;WebXR Device API&lt;/code&gt; 自体は Chrome に対して正式公開されていますが、その拡張モジュールにあたる &lt;code&gt;WebXR Augmented Reality Module&lt;/code&gt; はまだ特定の状況下でフラグを立てないければ利用できないためです。&lt;/p&gt;

&lt;p&gt;WebXR Augmented Reality Module - Level 1, W3C First Public Working Draft, 10 October 2019&lt;br&gt;
&lt;a href="https://www.w3.org/TR/webxr-ar-module-1/"&gt;https://www.w3.org/TR/webxr-ar-module-1/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  WebAR に WebXR Device API は必要か?
&lt;/h3&gt;

&lt;p&gt;個人的な見解としては「必ずしも必要ではない」が回答になります。&lt;/p&gt;

&lt;p&gt;本記事では、前述の通り &lt;code&gt;WebAR&lt;/code&gt; の定義を「ブラウザをきっかけとした AR 表現」としていますが、これを実現するために必ずしも &lt;code&gt;WebXR Device API&lt;/code&gt; の利用有無は問いません。&lt;/p&gt;

&lt;p&gt;さらに言えば、この後に出てくる事例の多くは &lt;code&gt;WebXR Device API&lt;/code&gt; を必要としないものばかりです。とはいえ W3C が策定する Spec のひとつに &lt;code&gt;WebXR Device API&lt;/code&gt; があることは、ぜひ覚えておいてください。&lt;/p&gt;
&lt;h2&gt;
  
  
  もっと知られて欲しい AR の話
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; に至る過程として &lt;code&gt;WebXR Device API&lt;/code&gt; に触れましたが、そもそも「ARとは何か」についても触れておきましょう。&lt;/p&gt;
&lt;h3&gt;
  
  
  AR とは何か
&lt;/h3&gt;

&lt;p&gt;AR は Augmented Reality、読み方は「オーグメンテッドリアリティ」の略称で、学術的な日本訳は「拡張現実感」です。現実世界に対してコンピュータによる情報を付加、つまり現実を拡張する技術を指します。現実を拡張して情報を付加することを「重畳する」と表すこともあります。&lt;/p&gt;

&lt;p&gt;AR の世界観を説明する際に、リファレンスとしてよく用いられる事例として「&lt;a href="https://www.tokuma.jp/coil/"&gt;電脳コイル&lt;/a&gt;」、「&lt;a href="https://sao-movie.net/"&gt;劇場版 ソードアート・オンライン -オーディナルスケール-&lt;/a&gt;」、「&lt;a href="http://project-itoh.com/"&gt;虐殺器官&lt;/a&gt;」などが挙げられます。最近では「&lt;a href="https://www.pokemongo.jp/"&gt;Pokémon GO&lt;/a&gt;」のほうがしっくりくるかもしれません。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; の話からは離れますが、もしも AR そのものについてより深く知りたい場合は「&lt;a href="https://book.mynavi.jp/ec/products/detail/id=91748"&gt;ARの教科書&lt;/a&gt;」がおすすめです。&lt;/p&gt;
&lt;h3&gt;
  
  
  2 分類 3 パターンに大別できる AR
&lt;/h3&gt;

&lt;p&gt;AR は次の 2 分類 3 パターンに大別できます。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;位置情報に連動する &lt;code&gt;Location based AR&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Vision based AR&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;二次元バーコード、いわゆる QR コード等のマーカーを認識する &lt;code&gt;マーカー型&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;マーカーではなく空間/物体認識による &lt;code&gt;マーカーレス型&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Location based AR
&lt;/h4&gt;

&lt;p&gt;主として GPS あるいは方位磁石による向きを軸としたものを指します。&lt;br&gt;
&lt;code&gt;WebAR&lt;/code&gt; ではないですが、分かりやすい事例として、懐かしいところでは「セカイカメラ」、誰もが知っているところでは初期の「Pokémon GO」が挙げられます。&lt;/p&gt;

&lt;p&gt;例えば &lt;code&gt;AR.js&lt;/code&gt; を利用することで開発可能です。&lt;/p&gt;
&lt;h4&gt;
  
  
  マーカー型 Vision based AR
&lt;/h4&gt;

&lt;p&gt;最近では観光地で見かける機会も増えた、二次元バーコードを始めとする「マーカー」にカメラをかざすと何かが出てくるものは、このマーカー型が該当します。&lt;/p&gt;

&lt;p&gt;これも &lt;code&gt;AR.js&lt;/code&gt; を利用することで開発可能です。&lt;/p&gt;
&lt;h4&gt;
  
  
  マーカーレス型 Vision based AR
&lt;/h4&gt;

&lt;p&gt;Location based AR の事例として挙げた「Pokémon GO」の「AR+」はこのマーカーレス型 Vision based AR も兼ねていると言えます。&lt;/p&gt;

&lt;p&gt;表示するだけであれば &lt;code&gt;AR.js&lt;/code&gt; で開発可能です。&lt;/p&gt;

&lt;p&gt;あるいは平面を認識してオブジェクトを重畳するだけであれば、Android は ARCore on Chrome である &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; で、iOS は Android 同様に &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; あるいは ARKit on Safari である &lt;code&gt;AR Quick Look&lt;/code&gt; で開発可能です。&lt;/p&gt;

&lt;p&gt;冒頭で事例として挙げた「猫」はまさにこちらです。&lt;/p&gt;
&lt;h2&gt;
  
  
  WebAR の利用事例
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; は今や誰もが使える技術になっています。具体的な開発の話に移る前にいくつかの「サンプルではない商用の利用事例」を実際に試してみましょう。&lt;/p&gt;

&lt;p&gt;ここで挙げる利用事例は iOS/iPadOS あるいは Android 端末からアクセスしてください。&lt;br&gt;
また、取り上げる事例は本記事の筆者と何かしらの利害関係があるわけではありません。&lt;/p&gt;
&lt;h3&gt;
  
  
  0. Google の検索結果
&lt;/h3&gt;

&lt;p&gt;本記事の冒頭で挙げている「猫」の事例です。&lt;/p&gt;

&lt;p&gt;2019/10 時点では 29 種類の動物を呼び出せるそうです。 &lt;br&gt;
source: &lt;a href="https://k-tai.watch.impress.co.jp/docs/news/1210352.html"&gt;「Google検索で動物のAR」登場するのは全部で29、その種類をよく見たら&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1. 自転車販売サイト Pure Cycles
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Pure Cycles&lt;br&gt;
&lt;a href="https://www.purecycles.com/products/urban-commuter-bike?variant=36496640138"&gt;https://www.purecycles.com/products/urban-commuter-bike?variant=36496640138&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Apple の &lt;a href="https://developer.apple.com/jp/augmented-reality/quick-look/"&gt;Quick Lookギャラリー&lt;/a&gt;からもリンクされている iOS/iPadOS 向けの &lt;code&gt;AR Quick Look&lt;/code&gt; 公式の利用事例です。&lt;/p&gt;
&lt;h3&gt;
  
  
  2. CITIZEN AR try
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;ARリストバンドを腕につけてスマートフォンをかざすとリアルなサイズ、質感の時計を試着できるサービスです。&lt;br&gt;
&lt;a href="https://ar-try.citizen.jp/"&gt;https://ar-try.citizen.jp/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;スニーカーを試着できる WANNABY の &lt;a href="https://apps.apple.com/us/app/wanna-kicks/id1444049305"&gt;‎Wanna Kicks&lt;/a&gt; をはじめとして AR と試着は相性が良いのですが、それを &lt;code&gt;WebAR&lt;/code&gt; としてプロダクションレベルで実現するのはやや難しい状況にありました。&lt;/p&gt;

&lt;p&gt;手っ取り早く実現できる &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; あるいは &lt;code&gt;AR Quick Look&lt;/code&gt; は平面に対してのみ重畳可能で、マーカーレス型は 8th Wall という選択肢はあれどややお高い、となるとマーカー型を選択することになるが腕時計でそれをやるには手首にマーカーを巻く必要がある…ということをプロダクションレベルでやってのけた事例です。&lt;/p&gt;

&lt;p&gt;CITIZEN AR try では、店頭で配布している、あるいはウェブサイトでダウンロードできる &lt;a href="https://ar-try.citizen.jp/assets/download/CITIZEN_ARtry.pdf"&gt;AR リストバンド&lt;/a&gt;を印刷して切ってテープで腕に巻くことで、Men's であれば ATTESA または PROMASTER を、Ladies's であればXC、CITIZEN L、wicca シリーズの時計を試着できる &lt;code&gt;WebAR&lt;/code&gt; コンテンツです。&lt;/p&gt;
&lt;h3&gt;
  
  
  3. ティフォニウム・チョコレート
&lt;/h3&gt;

&lt;p&gt;ティフォニウム・チョコレートは、MR シアター TYFFONIUM を展開するティフォン株式会社が、渋谷 PARCO B1F にある &lt;a href="https://www.tyffonium.com/location/cafe-shibuya/"&gt;Tyffonium Cafe&lt;/a&gt; と&lt;a href="https://www.tyffonium.com/location/odaiba.html"&gt;ティフォニウム お台場&lt;/a&gt;で販売しているお土産のチョコレートです。&lt;/p&gt;

&lt;p&gt;source: &lt;a href="https://www.youtube.com/watch?v=UPQ9bGR98qg"&gt;https://www.youtube.com/watch?v=UPQ9bGR98qg&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;チョコレートに描かれたイラストの部分をスマホで読み取ると、かわいいキャラクターたちが飛び出し、あなたの代わりにメッセージを伝えてくれます。出てくるメッセージは全部で４種類。食べて「おいしい」、見て「楽しい」。誰かに想いを伝える時に、こんなギフトはいかがでしょう。&lt;br&gt;
&lt;a href="https://www.tyffonium.com/location/cafe-shibuya/gift.html"&gt;https://www.tyffonium.com/location/cafe-shibuya/gift.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Tyffonium Cafe ではネイティブアプリベースの「AR（拡張現実）とスイーツを組み合わせた新体験スイーツ『魔法パフェ®』」が有名ですが、このお土産のチョコレートはネイティブアプリを必要としない &lt;code&gt;WebAR&lt;/code&gt; コンテンツとなっています。&lt;/p&gt;

&lt;p&gt;YouTube 動画を見ると &lt;code&gt;WebAR&lt;/code&gt; を試す画面まではアクセスできますが、肝心のマーカーは動画には映っていないので、試したい方は実際に手にとってみてください:)&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Amazon バーチャルメイク ライブモード
&lt;/h3&gt;

&lt;p&gt;AR の活用事例として ‎Wanna Kicks のようなシューズの試着系と同じくらい多いのが、メイク系です。&lt;br&gt;
その多くは iOS/iPadOS・Android アプリで動作しますが、Amazon バーチャルメイク ライブモードは、顔認識に関して強みを持つ &lt;a href="http://modiface.com/"&gt;ModiFace&lt;/a&gt; 社の技術を用いた、マーカーレス型 Vision based の &lt;code&gt;WebAR&lt;/code&gt; コンテンツです。&lt;/p&gt;

&lt;p&gt;これもまた実際に試してみるのが早いので、下記の「バーチャルメイク対象商品」ページにアクセスし、最初に表示されるリップを選択して、『メイクしてみる「試す」』ボタンをタップし、&lt;code&gt;WebAR&lt;/code&gt; によるメイクアップを体験してみてください。&lt;/p&gt;

&lt;p&gt;バーチャルメイク対象商品&lt;br&gt;
&lt;a href="https://www.amazon.co.jp/b?node=6453577051"&gt;https://www.amazon.co.jp/b?node=6453577051&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lxu8YGRC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uco3w3x6ed04y3cemwrh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lxu8YGRC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uco3w3x6ed04y3cemwrh.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;もちろん &lt;code&gt;WebAR&lt;/code&gt; なので Amazon の iOS/iPadOS・Android アプリではなく、ブラウザからアクセスしてください。&lt;/p&gt;

&lt;p&gt;同じような仕組みは、&lt;a href="https://www.yslb.jp/makeup/makeup-lips/makeup-lipstick/rouge-volupte-shine/144YSL.html"&gt;イヴ・サンローラン公式オンライン ブティックでも取り入れられています。&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;余談ですが、Amazon バーチャルメイクの取り組みについて興味深い note 記事を見つけたので貼っておきます。&lt;br&gt;
ref. AmazonがARバーチャルメイク導入、ライブモードも。美容に注力する理由を聞く&lt;br&gt;
&lt;a href="https://beautytech.jp/n/nf92a572f12b4"&gt;https://beautytech.jp/n/nf92a572f12b4&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5. AWE Portal Hunt
&lt;/h3&gt;

&lt;p&gt;個人的に今まで体験してきた &lt;code&gt;WebAR&lt;/code&gt; コンテンツでもっとも必然性を感じられ、楽しめたのは WebAR のソリューションを提供する 8th Wall プレゼンツの「AWE Portal Hunt」です。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The AWE Portal Hunt commemorates 10 years of AWE with 10 unique Web AR experiences. Attendees used their smartphones to unlock the relics’ secret portals, which released content from another dimension. If you missed out, here are a few highlights:&lt;br&gt;
&lt;a href="https://medium.com/8th-wall/awe-2019-portal-hunt-web-ar-experience-a66727bb7e01"&gt;https://medium.com/8th-wall/awe-2019-portal-hunt-web-ar-experience-a66727bb7e01&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;これは、AWE という AR 関連において世界でもっと大規模と言われているカンファレンスの「本拠地」である AWE USA 2019 で企画の一環として投入された事例です。&lt;/p&gt;

&lt;p&gt;一言で表現するなら「&lt;code&gt;WebAR&lt;/code&gt; を使った AR スタンプラリー」ですが、よく有りがちな「スタンプラリーのスタンプ部分を AR にしてみました！」みたいなものではなく、&lt;code&gt;WebAR&lt;/code&gt; の特性を生かし、且つ裏側を WebSocket で繋いで複数人以上が同時に体験することで成立する &lt;code&gt;WebAR&lt;/code&gt; コンテンツとなっていました。&lt;/p&gt;

&lt;p&gt;先の Medium 記事にも実際の模様が残されていますが、現地での動画ツイートを残してあるので興味のある方は見てください。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1133774874713837568"&gt;https://twitter.com/ikkou/status/1133774874713837568&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6. NIGHT SYNC YOKOHAMA (期間限定 ~12/27)
&lt;/h3&gt;

&lt;p&gt;本記事の公開日である 2019/12/20 の 1 週間後である 2019/12/27 までの期間限定ですが、横浜で開催中のナイトアートプログラム &lt;a href="https://night-sync.yokohama/cn/"&gt;NIGHT SYNC YOKOHAMA」&lt;/a&gt; で &lt;code&gt;WebAR&lt;/code&gt; の特別演出を体験可能です！&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;特別演出では、スマートフォンのカメラに映る実際の風景に、デジタル画像を重ね、目の前の世界を拡張する「Web AR」の技術を活用します。&lt;br&gt;
スマートフォン上のAR空間と、新港中央広場のメインステージのプロジェクションや広場の樹木、広場周辺の建物が一体となったダイナミックな演出とともに、インタラクティブなAR体験をお楽しみください。&lt;br&gt;
&lt;a href="https://night-sync.yokohama/special-contents/"&gt;https://night-sync.yokohama/special-contents/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;裏側の仕組みは後述する、個人として使うにはちょっとお高い &lt;code&gt;8th Wall&lt;/code&gt; をプロダクションレベルで使用しています。これはなかなか貴重な機会だと考えられるので、都合を合あわせられる方は全力で行くと良いのではないでしょうか！&lt;/p&gt;
&lt;h2&gt;
  
  
  WebAR コンテンツの開発
&lt;/h2&gt;

&lt;p&gt;ここまで様々な角度から &lt;code&gt;WebAR&lt;/code&gt; を構成するものに触れてきました。ここから先は具体的な開発方法をいくつか紹介します。&lt;/p&gt;
&lt;h3&gt;
  
  
  iOS における WebAR の歴史
&lt;/h3&gt;

&lt;p&gt;2019/12/20 現在では特別な憂いもなく iOS/iPadOS・Android で &lt;code&gt;WebAR&lt;/code&gt; を開発・体験できますが、ここに至るまでにいくつかの物語がありました。特に &lt;code&gt;iOS 12.2&lt;/code&gt; を巡る物語は、渦中にいた人にとっては胃がキリキリするものでした。&lt;br&gt;
本記事では深く触れませんが、当時の経緯は別途 Qiita に残してあるので興味のある方は覗いてみてください。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/ikkou/items/a193d13250d9e3d51473"&gt;iOS 12.2でWebVRとWebARが半ば終わった件について&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/ikkou/items/5197b78d69fb6198b4d8"&gt;iOS 12.2で半ば終わったWebVRとWebARがiOS 13でどうなったか&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  WebAR コンテンツを開発するための前提知識
&lt;/h3&gt;

&lt;p&gt;前述の通り、本記事では「ブラウザをきっかけとした AR 表現」を &lt;code&gt;WebAR&lt;/code&gt; としています。つまり、開発には少なからずウェブを構成する最小要素である HTML, CSS, JavaScript に対する最低限の理解が必要となります!&lt;/p&gt;

&lt;p&gt;取っ掛かりだけであればコピペで動かせるので、先ずは気負わずにトライしてみてください！&lt;/p&gt;
&lt;h3&gt;
  
  
  WebAR コンテンツをデプロイするための要件
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; を実現する重要な要素のひとつとして「ブラウザからカメラを呼び出す」というのがあります。これは &lt;code&gt;WebRTC&lt;/code&gt; で &lt;code&gt;MediaDevices.getUserMedia()&lt;/code&gt; を呼び出す形となりますが、実現には &lt;code&gt;HTTPS 環境&lt;/code&gt; が必要です。&lt;/p&gt;

&lt;p&gt;常時 SSL がデファクトスタンダードになりつつウェブ業界ですが、開発環境で &lt;code&gt;HTTPS 環境&lt;/code&gt; を必要とするのはやや手間かもしれません。その場合は無償で &lt;code&gt;HTTPS 環境&lt;/code&gt; を用意できる &lt;a href="https://letsencrypt.org/ja/"&gt;Let's Encrypt&lt;/a&gt; や、使い方によっては &lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt; や &lt;a href="https://glitch.com/"&gt;Glitch&lt;/a&gt; を用いるのも有りかもしれません。&lt;/p&gt;

&lt;p&gt;また、&lt;code&gt;WebAR&lt;/code&gt; として現実世界に重畳する 3D モデル ( &lt;code&gt;.usdz&lt;/code&gt; ファイルまたは &lt;code&gt;.glb&lt;/code&gt; ファイル ) も必要になりますが、本記事では 3D モデルの具体的な作成方法には触れません。&lt;/p&gt;

&lt;p&gt;商業利用は別として、個人利用の範疇で試すだけであれば、例えば &lt;a href="https://poly.google.com/"&gt;Google Poly&lt;/a&gt; あたりでダウンロード可能な 3D モデルを入手するのが良いかもしれません。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IKS-d2pL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a6q4qdyms2awhgzz4w3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IKS-d2pL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/a6q4qdyms2awhgzz4w3y.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;source: &lt;a href="https://poly.google.com/"&gt;Google Poly&lt;/a&gt; でダウンロード可能な 3D モデルの例&lt;/p&gt;
&lt;h3&gt;
  
  
  WebAR コンテンツの開発手法
&lt;/h3&gt;

&lt;p&gt;いくつか方法がありますが、本記事では 2019/12/20 現在で「現実的」且つ「代表的」な例を挙げます。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Google の検索結果のような、現実世界に重畳するだけであれば &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; あるいは &lt;code&gt;AR Quick Look&lt;/code&gt; を利用する&lt;/li&gt;
&lt;li&gt;二次元バーコードを読み込んで何かをしたい場合は &lt;code&gt;AR.js&lt;/code&gt; を利用する&lt;/li&gt;
&lt;li&gt;「Pokémon GO」 のような位置情報ベースの何かをしたい場合も &lt;code&gt;AR.js&lt;/code&gt; を利用する&lt;/li&gt;
&lt;li&gt;二次元バーコード以外のマーカー型で何かをしたい場合は &lt;code&gt;8th Wall&lt;/code&gt; を利用する&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  1. &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; あるいは &lt;code&gt;AR Quick Look&lt;/code&gt; を利用する
&lt;/h3&gt;

&lt;p&gt;Google の検索結果のような、現実世界に重畳するだけであれば &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; あるいは &lt;code&gt;AR Quick Look&lt;/code&gt; を利用するのが手っ取り早いです。&lt;br&gt;
3D モデルが必要という課題はありますが、E コマースとの相性も抜群です。&lt;/p&gt;
&lt;h4&gt;
  
  
  1.1 &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; の利用
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; は Google 謹製の &lt;code&gt;WebAR&lt;/code&gt; を簡単に始められる &lt;code&gt;Web Components&lt;/code&gt; のひとつです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; is a web component that makes rendering interactive 3D models - optionally in AR - easy to do, on as many browsers and devices as possible.  strives to give you great defaults for rendering quality and performance.&lt;br&gt;
&lt;a href="https://github.com/GoogleWebComponents/model-viewer"&gt;https://github.com/GoogleWebComponents/model-viewer&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;「百聞は一体験にしかず」なので、先ずは &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; のサンプルを見てください。&lt;br&gt;
&lt;a href="https://model-viewer.glitch.me/"&gt;https://model-viewer.glitch.me/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  1.2 &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; の適用範囲
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; における &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; の適用範囲は &lt;code&gt;iOS/iPadOS&lt;/code&gt; 12 以降と &lt;code&gt;ARCore&lt;/code&gt; 適用の Android、そして &lt;code&gt;Magic Leap 1&lt;/code&gt; のブラウザである &lt;code&gt;Helio&lt;/code&gt; です。&lt;br&gt;
※ 1.1 のサンプルは &lt;code&gt;Helio&lt;/code&gt; 向けの記述がないので、&lt;code&gt;Magic Leap 1&lt;/code&gt; では動作しません。&lt;/p&gt;
&lt;h4&gt;
  
  
  1.3 &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; の最小構成
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;ARCore&lt;/code&gt; 適用の Android と &lt;code&gt;Helio&lt;/code&gt; 向けには &lt;code&gt;GLB&lt;/code&gt; ファイルを、&lt;code&gt;iOS/iPadOS&lt;/code&gt; 12 以降向けには &lt;code&gt;USDZ&lt;/code&gt; ファイルを表示させる最小構成です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="ja"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;title&amp;gt;Deomo: model-viewer&amp;lt;/title&amp;gt;
    &amp;lt;script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;model-viewer
      src="path/to/modelName.glb"
      ios-src="path/to/modelName.usdz"
      ar magic-leap&amp;gt;
    &amp;lt;/model-viewer&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; で &lt;code&gt;WebAR&lt;/code&gt; 向けに指定する必須項目は &lt;code&gt;src&lt;/code&gt; と &lt;code&gt;ar&lt;/code&gt; だけです。&lt;br&gt;
オプションとして &lt;code&gt;iOS/iPadOS&lt;/code&gt; 向けにも適用させたい場合は &lt;code&gt;ios-src&lt;/code&gt; を、&lt;code&gt;Helio&lt;/code&gt; 向けにも適用させたい場合は &lt;code&gt;magic-leap&lt;/code&gt; を記述してください。&lt;/p&gt;
&lt;h4&gt;
  
  
  1.4 &lt;code&gt;AR Quick Look&lt;/code&gt; の利用
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;AR Quick Look&lt;/code&gt; は Apple 謹製の &lt;code&gt;WebAR&lt;/code&gt; を簡単に始められる仕組みです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Safari、メッセージ、メール、News、メモなどの内蔵のiOS Appは、Quick Lookを使ってバーチャルオブジェクトのUSDZファイルを3DやARで表示します。Quick LookビューをAppやWebサイトに埋め込むことで、キラキラしたバーチャルオブジェクトに現実世界の周囲の景色が映り込むなど、極めて詳細にレンダリングされたオブジェクトがユーザーに表示されます。&lt;br&gt;
&lt;a href="https://developer.apple.com/jp/augmented-reality/quick-look/"&gt;https://developer.apple.com/jp/augmented-reality/quick-look/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;前述している Pure Cycles の事例もそうですが、サンプルを含む事例は公式が参考になります。&lt;/p&gt;

&lt;p&gt;ref. Quick Lookギャラリー - 拡張現実 - Apple Developer&lt;br&gt;
&lt;a href="https://developer.apple.com/jp/augmented-reality/quick-look/"&gt;https://developer.apple.com/jp/augmented-reality/quick-look/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  1.5 &lt;code&gt;AR Quick Look&lt;/code&gt; の適用範囲
&lt;/h4&gt;

&lt;p&gt;モバイル向け OS をまたいで利用可能な &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; に対して &lt;code&gt;AR Quick Look&lt;/code&gt; は &lt;code&gt;iOS/iPad&lt;/code&gt; のみにしか適用できません。&lt;/p&gt;

&lt;p&gt;ただし &lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; と違い、&lt;code&gt;iOS/Android&lt;/code&gt; の標準昨日である &lt;code&gt;ARKit&lt;/code&gt; を利用するため、外部 JavaScript を必要としないことが特長です。&lt;/p&gt;
&lt;h4&gt;
  
  
  1.6 &lt;code&gt;AR Quick Look&lt;/code&gt; の最小構成
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;iOS/iPadOS&lt;/code&gt; 12 以降向けに &lt;code&gt;USDZ&lt;/code&gt; ファイルを表示させる最小構成です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="ja"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;title&amp;gt;Deomo: AR Quick Look&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;a rel="ar" href="path/to/modelName.usdz"&amp;gt;
      &amp;lt;img src="path/to/modelName.png"&amp;gt;
    &amp;lt;/a&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; と違い外部 JavaScript を読み込む必要性はありませんが、3D モデルの画像を用意し、&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; タグで括って &lt;code&gt;.usdz&lt;/code&gt; ファイルを読み込ませる形になります。&lt;/p&gt;

&lt;p&gt;環境によっては &lt;code&gt;MIME Type&lt;/code&gt; の追加が必要になるので、もし動かない場合は &lt;code&gt;MIME Type&lt;/code&gt; の追加も試してみてください。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AddType model/vnd.pixar.usd .usdz
AddType model/usd usdz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  2. 二次元バーコードを読み込んで何かをしたい場合は AR.js を利用する
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;model-viewer&amp;gt;&lt;/code&gt; と &lt;code&gt;AR Quick Look&lt;/code&gt; は現実世界の平面に重畳することを目的としていましたが、例えば二次元バーコードをはじめとする何かしらのマーカーを基準として表示したい場合は、「マーカー型 Vision based AR」を実現する &lt;code&gt;AR.js&lt;/code&gt; を使うのが手っ取り早いです。&lt;/p&gt;

&lt;h4&gt;
  
  
  2.1 &lt;code&gt;AR.js&lt;/code&gt; の利用
&lt;/h4&gt;

&lt;p&gt;「AR 年賀状」や「AR 名刺」でお馴染みの &lt;code&gt;AR.js&lt;/code&gt; は &lt;code&gt;WebAR&lt;/code&gt; のための軽量 JavaScript ライブラリです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AR.js is a lightweight library for Augmented Reality on the Web, coming with features like Marker based and Location based AR.&lt;br&gt;
&lt;a href="https://github.com/jeromeetienne/AR.js"&gt;https://github.com/jeromeetienne/AR.js&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;昨今の &lt;code&gt;WebAR&lt;/code&gt; コンテンツの多くは、この &lt;code&gt;AR.js&lt;/code&gt; によって成り立っています。&lt;/p&gt;

&lt;p&gt;2017/02/17 に &lt;a href="https://github.com/jeromeetienne/AR.js/releases/tag/v0.9.0"&gt;v0.9.0&lt;/a&gt; でリリースされたのを皮切りに、精力的にアップデートが加えられ 2019/10/09 にリリースされた &lt;a href="https://github.com/jeromeetienne/AR.js/releases/tag/2.0.0"&gt;v2.0.0&lt;/a&gt; から、後述する &lt;code&gt;Location Based AR&lt;/code&gt; が可能になりました。&lt;/p&gt;

&lt;p&gt;これまた「百聞は一体験にしかず」なので、公式サンプルである &lt;a href="https://github.com/jeromeetienne/AR.js"&gt;hiro marker image&lt;/a&gt; を PC などで表示し、スマートフォンから &lt;a href="https://codepen.io/nicolocarpignoli/full/vMBgob"&gt;augmented reality webapps&lt;/a&gt; にアクセスし、&lt;code&gt;AR.js&lt;/code&gt; による &lt;code&gt;WebAR&lt;/code&gt; を体験してみてください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---z86wlOT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8yh72nrjnp2bnk3vqteo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---z86wlOT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8yh72nrjnp2bnk3vqteo.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このサンプルでは &lt;code&gt;hiro marker image&lt;/code&gt; の上に黄色のボックスが表示されます。&lt;br&gt;
source: &lt;a href="https://codepen.io/nicolocarpignoli/full/vMBgob"&gt;https://codepen.io/nicolocarpignoli/full/vMBgob&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2.2 &lt;code&gt;AR.js&lt;/code&gt; の背景
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; コンテンツの開発には直接関係のない余談ですが、&lt;code&gt;AR.js&lt;/code&gt; は内部的には &lt;code&gt;ARToolKit&lt;/code&gt; の仕組みを利用しています。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ARToolKit&lt;/code&gt; そのものは C 向けに書かれ、そこから Java, Processing, C# 向けの &lt;code&gt;NyARToolkit5&lt;/code&gt; が生まれ、さらにそこから AS3 向けの &lt;code&gt;FLARToolKit&lt;/code&gt; が生まれ、さらにさらにそこから JavaScript 向けの &lt;code&gt;JSARToolkit&lt;/code&gt; が生まれました。 &lt;/p&gt;

&lt;p&gt;&lt;code&gt;AR.js&lt;/code&gt; は &lt;code&gt;ARToolKit&lt;/code&gt; を Emscripten で直接 JavaScript 化した &lt;code&gt;JSARToolKit v5&lt;/code&gt; を利用、さらに &lt;code&gt;WebXR&lt;/code&gt; の実現を容易にする、&lt;a href="https://aframe.io/blog/aframe-v1.0.0/"&gt;最近ついに v1.0.0 のリリースを迎えた&lt;/a&gt; JavaScript フレームワーク &lt;code&gt;A-Frame&lt;/code&gt; と、ウェブにおける 3D 描画のデファクトスタンダードである JavaScript ライブラリ &lt;code&gt;three.js&lt;/code&gt; によって、とても使いやすい JavaScript ライブラリとなっています。&lt;/p&gt;
&lt;h4&gt;
  
  
  2.3 &lt;code&gt;AR.js&lt;/code&gt; を使ったマーカー型 &lt;code&gt;Vision Based AR&lt;/code&gt; の最小構成
&lt;/h4&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="ja"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;title&amp;gt;Deomo: Vision Based AR using AR.js&amp;lt;/title&amp;gt;
    &amp;lt;script src="https://aframe.io/releases/1.0.0/aframe.min.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src="https://raw.githack.com/jeromeetienne/AR.js/2.0.8/aframe/build/aframe-ar.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;a-scene vr-mode-ui="enabled: false" embedded arjs&amp;gt;
      &amp;lt;a-marker preset="hiro"&amp;gt;
          &amp;lt;a-box position='0 0.5 0' material='color: yellow;'&amp;gt;&amp;lt;/a-box&amp;gt;
      &amp;lt;/a-marker&amp;gt;
      &amp;lt;a-entity camera&amp;gt;&amp;lt;/a-entity&amp;gt;
    &amp;lt;/a-scene&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;source: &lt;a href="https://codepen.io/nicolocarpignoli/pen/vMBgob"&gt;https://codepen.io/nicolocarpignoli/pen/vMBgob&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;AR.js&lt;/code&gt; は &lt;code&gt;A-Frame&lt;/code&gt; と組み合わせて利用します。はじめに &lt;code&gt;A-Frame&lt;/code&gt; を読み込み、その後で &lt;code&gt;AR.js&lt;/code&gt; を読み込みます。原則として &lt;code&gt;WebAR&lt;/code&gt; に関連する HTML の記述は &lt;code&gt;A-Frame&lt;/code&gt; 固有の &lt;code&gt;&amp;lt;a-*&amp;gt;&lt;/code&gt; タグで構成されます。&lt;/p&gt;

&lt;p&gt;肝となるのは、&lt;code&gt;&amp;lt;a-marker&amp;gt;&lt;/code&gt; でマーカーを指定し、重畳させたいものを括ることです。&lt;/p&gt;

&lt;p&gt;マーカーのプリセットは &lt;code&gt;ARToolKit&lt;/code&gt; の生みの親である加藤博一先生の名前からとった &lt;code&gt;hiro&lt;/code&gt; と、漢字の「人」を模した &lt;code&gt;kanji&lt;/code&gt; の他、例えば &lt;a href="https://jeromeetienne.github.io/AR.js/three.js/examples/marker-training/examples/generator.html"&gt;AR.js Marker Training&lt;/a&gt; で独自のマーカーを作って指定することも可能です。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- preser="hiro" --&amp;gt;
&amp;lt;a-marker preset="hiro"&amp;gt;

&amp;lt;!-- preser="kanji" --&amp;gt;
&amp;lt;a-marker preset="kanji"&amp;gt;

&amp;lt;!-- preset="pattern" で .patt ファイルを指定 --&amp;gt;
&amp;lt;a-marker type="pattern" url="path/to/pattern-marker.patt"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;独自のマーカーを指定する場合は、&lt;code&gt;preset&lt;/code&gt; を &lt;code&gt;pattern&lt;/code&gt; として、&lt;code&gt;url&lt;/code&gt; で &lt;code&gt;.patt&lt;/code&gt; ファイルまでのパスを指定します。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 「Pokémon GO」 のような位置情報ベースの何かをしたい場合も &lt;code&gt;AR.js&lt;/code&gt; を利用する
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;AR.js&lt;/code&gt; は &lt;code&gt;v2.0.0&lt;/code&gt; から &lt;code&gt;GeoAR.js&lt;/code&gt; が統合され、&lt;code&gt;Location Based AR&lt;/code&gt; を実現できるようになりました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AR.js, on its aframe implementation, comes with few custom components that make possible to integrate data from GPS sensors.&lt;br&gt;
&lt;a href="https://github.com/jeromeetienne/AR.js#what-location-based-means"&gt;https://github.com/jeromeetienne/AR.js#what-location-based-means&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; における &lt;code&gt;Location Based AR&lt;/code&gt; とは何かを示す note 記事が公式からリンクされているので、&lt;code&gt;WebAR&lt;/code&gt; で「Pokémon GO」のような &lt;code&gt;Location Based AR&lt;/code&gt; を実現したい方は参照してみてください。&lt;/p&gt;

&lt;p&gt;ref. Location Based (GPS) Augmented Reality on the Web&lt;br&gt;
&lt;a href="https://medium.com/chialab-open-source/location-based-gps-augmented-reality-on-the-web-7a540c515b3c"&gt;https://medium.com/chialab-open-source/location-based-gps-augmented-reality-on-the-web-7a540c515b3c&lt;/a&gt;&lt;br&gt;
ref. Build your Location-Based Augmented Reality Web App&lt;br&gt;
&lt;a href="https://medium.com/chialab-open-source/build-your-location-based-augmented-reality-web-app-c2442e716564"&gt;https://medium.com/chialab-open-source/build-your-location-based-augmented-reality-web-app-c2442e716564&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.1 &lt;code&gt;AR.js&lt;/code&gt; を使った &lt;code&gt;Location Based AR&lt;/code&gt; の最小構成
&lt;/h4&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="ja"&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset="utf-8"&amp;gt;
    &amp;lt;title&amp;gt;Deomo: Vision Based AR using AR.js&amp;lt;/title&amp;gt;
    &amp;lt;script src="https://aframe.io/releases/1.0.0/aframe.min.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src="https://raw.githack.com/jeromeetienne/AR.js/2.0.8/aframe/build/aframe-ar.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;a-scene vr-mode-ui="enabled: false" embedded arjs&amp;gt;
      &amp;lt;a-entity gltf-model="https://modelviewer.dev/examples/assets/Astronaut.glb"
                gps-entity-place="latitude: 35.665251; longitude: 139.712092;"/&amp;gt;
      &amp;lt;a-camera gps-camera rotation-reader&amp;gt;&amp;lt;/a-camera&amp;gt;
    &amp;lt;/a-scene&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;3度目の「百聞は一体験にしかず」として、「表参道」交差点に 3D モデルが表示される ( はずの ) サンプルを試してみてください。&lt;br&gt;
e.g. &lt;a href="https://clean-enigmosaurus.glitch.me"&gt;https://clean-enigmosaurus.glitch.me&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;マーカー型 &lt;code&gt;Vision Based AR&lt;/code&gt; との大きな違いは、&lt;code&gt;gps-entity-place&lt;/code&gt; で現実世界に重畳する座標となる緯度 &lt;code&gt;latitude&lt;/code&gt; と経度 &lt;code&gt;longitude&lt;/code&gt; を指定することと、&lt;code&gt;a-camera&lt;/code&gt; 要素に &lt;code&gt;gps-camera&lt;/code&gt; 属性と &lt;code&gt;rotation-reader&lt;/code&gt; 属性を追加することです。&lt;/p&gt;

&lt;p&gt;指定する緯度と経度は、住所から割り出す &lt;a href="https://www.geocoding.jp/"&gt;Geocoding&lt;/a&gt; などで検索できます。ちなみに、このサンプルコードの座標は「表参道」交差点付近を指しています。&lt;/p&gt;

&lt;p&gt;この最小のサンプルでは、ハードコーディングされた座標に指定の何かを重畳するだけですが、位置情報サービス系の API と繋ぐことで、&lt;code&gt;Location Based AR&lt;/code&gt; の真価を発揮できるようになります。あるいは &lt;code&gt;WebAR&lt;/code&gt; で街ナカ AR 謎解きゲームを作ることすら可能です。ドキュメントを含めて、まだ多くの実例がないので、今後増えてくることを期待しています。&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 二次元バーコード以外のマーカー型で何かをしたい場合は 8th Wall を利用する
&lt;/h3&gt;

&lt;p&gt;気軽に実現できる &lt;code&gt;&amp;lt;scene-viewer&amp;gt;&lt;/code&gt; や &lt;code&gt;AR Quick Look&lt;/code&gt;、そして &lt;code&gt;WebAR&lt;/code&gt; を実現するためにお世話になることの多い &lt;code&gt;AR.js&lt;/code&gt; を使った方法を紹介してきましたが、2019/12/20 現在、それらを使っても実現できないのが、例えば何らかの「イラスト」や「写真」をきっかけにして発動する「二次元バーコード以外のマーカー型 AR」です。&lt;/p&gt;

&lt;p&gt;この「二次元バーコード以外のマーカー型 AR」を &lt;code&gt;WebAR&lt;/code&gt; で実現するのが &lt;code&gt;8th Wall&lt;/code&gt; です。他と異なり、プロダクション利用はもちろんのこと、デプロイしての実機確認から「有償」となります。&lt;/p&gt;

&lt;p&gt;例によって公式のサンプルを覗いてみてください。&lt;br&gt;
&lt;a href="https://apps.8thwall.com/8w/jini/"&gt;https://apps.8thwall.com/8w/jini/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;「有償」なだけあって出来ることは多く、平面検出たる &lt;code&gt;World Tracking&lt;/code&gt; はもちろんのこと、本記事で取り上げている他の手段では実現できない画像認識たる &lt;code&gt;Image Targets&lt;/code&gt; が使えます。先行事例として LEGO や addidas といった大企業のものもあります。また、2019/12/20 現在は見れなくなっていますが、映画「Spider-man: Into the Spider-verse」に合わせた &lt;code&gt;WebAR&lt;/code&gt; 施策をこの &lt;code&gt;8th Wall&lt;/code&gt; を使っていたことで、一部の界隈では話題になりました。&lt;/p&gt;

&lt;p&gt;「Spider-man: Into the Spider-verse」施策は公式のサンプル動画が残っています。&lt;/p&gt;

&lt;p&gt;Ref: &lt;a href="https://www.youtube.com/watch?v=B7qj4qPRIj8"&gt;https://www.youtube.com/watch?v=B7qj4qPRIj8&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4.1 8th Wall を使ったマーカー型 Vision Based AR の最小構成
&lt;/h4&gt;

&lt;p&gt;8th Wall は &lt;code&gt;Image Targets&lt;/code&gt; 用の画像登録をはじめとしてウェブ上で完結するようになっています。コードが記録される Web Editor も用意されていますが、後述する通り、課金が必要となります。&lt;/p&gt;

&lt;h4&gt;
  
  
  4.2 8th Wall を利用するために必要なお金
&lt;/h4&gt;

&lt;p&gt;Plans and Pricing に掲載されています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R_1H6rxN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pfselosp0e3io7nsw3pz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R_1H6rxN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pfselosp0e3io7nsw3pz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;source: &lt;a href="https://www.8thwall.com/pricing"&gt;https://www.8thwall.com/pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;大前提として、Publish してウェブ上で誰でも見れる状態にするには、1 ヶ月 $99 の Agency Plan に課金しなければなりません。且つプロダクションレベルで使うのであれば、トラフィック量に応じて料金の異なる Commercial License を追加する必要があります。&lt;/p&gt;

&lt;p&gt;主に開発中やテスト中など、ウェブ上で誰でも見れる状態が必要ない、つまり &lt;code&gt;localhost&lt;/code&gt; からのみアクセスできる状態であればお金はかかりませんが、1,000 View を超える場合は少なくとも Agency Plan に課金する必要があります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V0wA14qO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yygfh2qjnaop4hfccyd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V0wA14qO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yygfh2qjnaop4hfccyd4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;source: &lt;a href="https://www.8thwall.com/"&gt;https://www.8thwall.com/&lt;/a&gt; ログイン後の管理画面&lt;/p&gt;

&lt;h4&gt;
  
  
  4.3 8th Wall は課金すべき?
&lt;/h4&gt;

&lt;p&gt;個人で「遊ぶ」ために Adobe CC Plan を超える $99 を毎月課金するのはなかなかお高い感もありますが、&lt;code&gt;WebAR&lt;/code&gt; だけでなく &lt;code&gt;WebVR&lt;/code&gt; まで対応し始めたので、ちょっと本気で &lt;code&gt;WebXR&lt;/code&gt; やってみようかな、という気持ちがあるのであれば、意外と元が取れるかもしれませんし、そうでないかもしれません。むしろ無課金で「遊ぶ」のは機能面でもなかなか厳しいものがあるので、とりあえず 1 ヶ月程度課金してみるのが良いのではないでしょうか。&lt;/p&gt;

&lt;p&gt;もちろん、プロダクションレベルで使うなら迷わず課金しましょう。&lt;/p&gt;

&lt;p&gt;ref. If You Can WebAR, You Can WebVR&lt;br&gt;
&lt;a href="https://medium.com/8th-wall/if-you-can-webar-you-can-webvr-dbd658831f8c"&gt;https://medium.com/8th-wall/if-you-can-webar-you-can-webvr-dbd658831f8c&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;WebAR&lt;/code&gt; に触れる前段として &lt;code&gt;WebXR Device API&lt;/code&gt; について、そして &lt;code&gt;AR&lt;/code&gt; について説明した上で、今日現在の &lt;code&gt;WebAR&lt;/code&gt; の利用事例を紹介し、具体的な開発方法の概要と触りの部分を説明しました。&lt;/p&gt;

&lt;p&gt;本記事を読んだだけでは、インタラクションがバリバリのかっこいい &lt;code&gt;WebAR&lt;/code&gt; コンテンツは作れませんし、そもそも 3D モデルの作成方法に触れていないので、自分の好きなキャラクターを &lt;code&gt;WebAR&lt;/code&gt; でバーンみたいなことはできません。&lt;/p&gt;

&lt;p&gt;Qiita にもいくつか関連記事がありますが、サンプル以上のことを本腰を入れてやるには、&lt;code&gt;A-Frame&lt;/code&gt; や &lt;code&gt;three.js&lt;/code&gt; の取り扱いはもちろん、当然ピュアな JavaScript とりわけ &lt;code&gt;WebGL&lt;/code&gt; 周辺の知識も必要になりますし、Blender のような 3DCG を扱うソフトに対する知識も必要になってきます。&lt;/p&gt;

&lt;p&gt;プロダクションレベルで利用するにはパフォーマンスとの戦いがあったり、色々とつらいこともたくさんありますが、それでもなにかのきっかけとなって、ちょっと &lt;code&gt;WebAR&lt;/code&gt; やってみようかな、という人が増えれば幸いです！良き &lt;code&gt;WebAR&lt;/code&gt; ライフを！&lt;/p&gt;




&lt;h3&gt;
  
  
  おわりに
&lt;/h3&gt;

&lt;p&gt;この記事を書き始めて公開までの短い間に、Chrome 79 の公開とともに &lt;code&gt;WebXR Device API&lt;/code&gt; がデフォルト機能になり、&lt;code&gt;WebVR&lt;/code&gt; な &lt;code&gt;A-Frame&lt;/code&gt; は正式公開版にあたる &lt;code&gt;v1.0.0&lt;/code&gt; を迎え、2D VTuber さん御用達の Live2D は突然 &lt;code&gt;WebAR&lt;/code&gt; 対応を実現する &lt;code&gt;Cubism WebAR&lt;/code&gt; を公開し、そして &lt;code&gt;WebAR&lt;/code&gt; な &lt;code&gt;8th WAll&lt;/code&gt; は &lt;code&gt;WebVR&lt;/code&gt; への対応を発表しました。これはもう &lt;code&gt;WebVR&lt;/code&gt; と &lt;code&gt;WebAR&lt;/code&gt; をひっくるめた &lt;code&gt;WebXR&lt;/code&gt; のムーブメントがきているとしか思えないので、みんなみんなやっていこうな！&lt;/p&gt;




&lt;p&gt;明日は @shimajiro1111 さんです！お楽しみに！&lt;/p&gt;

</description>
      <category>ar</category>
      <category>webar</category>
      <category>webxr</category>
    </item>
    <item>
      <title>iOS 12.2で半ば終わったWebVRとWebARがiOS 13でどうなったか</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 16:23:11 +0000</pubDate>
      <link>https://dev.to/ikkou/ios-12-2-webvr-webar-ios-13-37k0</link>
      <guid>https://dev.to/ikkou/ios-12-2-webvr-webar-ios-13-37k0</guid>
      <description>&lt;p&gt;この記事は 2019-09-20 JST 付で Qiita に投稿したものです。&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;2019-09-20 JSTにiOS 13のアップデートが開始されました。&lt;br&gt;
この文章は「&lt;a href="https://qiita.com/ikkou/items/a193d13250d9e3d51473"&gt;iOS 12.2でWebVRとWebARが半ば終わった件について&lt;/a&gt;」の続報にあたります。&lt;br&gt;
やや煽り気味のタイトルですが、経緯を知らない方は先に目を通しておくと捗ります。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1174869256833421312"&gt;https://twitter.com/ikkou/status/1174869256833421312&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  iOS 12.2でなにが起きたのか3行で
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;iOS 12.2からデフォルトでSafariのモーションデータを取得出来なくなった&lt;/li&gt;
&lt;li&gt;モーションデータを取得出来ないと動かなくなるWebVRとWebARコンテンツがある&lt;/li&gt;
&lt;li&gt;ユーザーにSafariの設定を変更してもらうことで動くようになる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  iOS 13でどうなったのか3行で
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;iOS 13でもデフォルトでモーションデータを取得できない&lt;/li&gt;
&lt;li&gt;ユーザーに変更してもらうSafariの設定項目がなくなった&lt;/li&gt;
&lt;li&gt;新APIの &lt;code&gt;DeviceMotionEvent&lt;/code&gt; と &lt;code&gt;DeviecOrientationEvent&lt;/code&gt; を叩く必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  改めて、これから&lt;code&gt;WebVR&lt;/code&gt;を使ったウェブマーケティング施策はどうなるのか
&lt;/h2&gt;

&lt;p&gt;例えば 2019-09-20 現在では期待する動作をしない&lt;code&gt;A-Frame&lt;/code&gt;を用いたWebVR施策を継続する場合、&lt;code&gt;A-Frame&lt;/code&gt;そのものに手を入れる必要があります。&lt;/p&gt;

&lt;p&gt;現実問題として、iOS 12.2がリリースされたタイミングで関連するIssueは起票されていますが、まだ対応されていません。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sensor access disabled by default in Safari from iOS 12.2+&lt;br&gt;
&lt;a href="https://github.com/aframevr/aframe/issues/3976"&gt;https://github.com/aframevr/aframe/issues/3976&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Issueを読み進めていくと7月3日時点で、iOS 13がリリースされれば今まで通りに戻る(超意訳)というコメントがあるものの……。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Once iOS 13 ships things will be back to normal. A-Frame will be able to&lt;br&gt;
request access to devicemotion API without any manual steps. https will be&lt;br&gt;
required though&lt;br&gt;
&lt;a href="https://github.com/aframevr/aframe/issues/3976#issuecomment-508110150"&gt;https://github.com/aframevr/aframe/issues/3976#issuecomment-508110150&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;A-Frame&lt;/code&gt;はGitHub上で開発が進められているオープンソースなので、やる気がある人はぜひPull Requestを送ってください。&lt;/p&gt;
&lt;h2&gt;
  
  
  改めて、これから&lt;code&gt;WebAR&lt;/code&gt;を使ったウェブマーケティング施策はどうなるのか
&lt;/h2&gt;

&lt;p&gt;WebVRコンテンツを開発するための定番が&lt;code&gt;A-Frame&lt;/code&gt;であるように、WebARコンテンツを開発するための定番は&lt;code&gt;8th Wall&lt;/code&gt;だと感じています。&lt;/p&gt;

&lt;p&gt;そしてこの&lt;code&gt;8th Wall&lt;/code&gt;をWebで扱うためのライブラリとして&lt;code&gt;8th Wall Web&lt;/code&gt;がありますが、実はiOS 13 Betaの時点から対応を加えていました。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1174872983241777152"&gt;https://twitter.com/ikkou/status/1174872983241777152&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;奇しくも&lt;code&gt;8th Wall WEb&lt;/code&gt;はiOS 13のリリースと同じタイミングで1周年を迎えました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Year in WebAR: Celebrating the First Anniversary of 8th Wall Web&lt;br&gt;
&lt;a href="https://medium.com/8th-wall/a-year-in-webar-celebrating-the-first-anniversary-of-8th-wall-web-d0bae7a6a02a"&gt;https://medium.com/8th-wall/a-year-in-webar-celebrating-the-first-anniversary-of-8th-wall-web-d0bae7a6a02a&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ページを読み進めると分かりますが、COACHやAdidasなどの有名ブランドのWebAR施策に使われているようです。少なくとも現時点で&lt;code&gt;Web AR&lt;/code&gt;を用いた施策を実施したいのであれば、&lt;code&gt;8th Wall Web&lt;/code&gt;を使うのが最善策かもしれません。&lt;/p&gt;
&lt;h2&gt;
  
  
  で、iOS 13で動かなくなったWebVR/WebARはどうすれば良いのか?
&lt;/h2&gt;

&lt;p&gt;よっしゃiOS 13がリリースされたから書くぞ！と思っていたら株式会社palanさんのメディアに先を越されたので引用します:D&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/kinnikujst/status/1174915017717637121"&gt;https://twitter.com/kinnikujst/status/1174915017717637121&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ポイントはiOS 13から追加された&lt;code&gt;DeviceMotionEvent&lt;/code&gt;と&lt;code&gt;DeviceOrientationEvent&lt;/code&gt;の&lt;code&gt;permission API&lt;/code&gt;を叩くことです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.request_permission&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;DeviceMotionEvent&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="nx"&gt;DeviceMotionEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestPermission&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;DeviceMotionEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestPermission&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;DeviceMotionEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestPermission&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;DeviceOrientationEvent&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="nx"&gt;DeviceOrientationEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestPermission&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;DeviceOrientationEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestPermission&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;DeviceOrientationEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;requestPermission&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;引用元: &lt;a href="https://bagelee.com/webar-vr/ios13-webar-webvr/"&gt;iOS13でWebARとWebVRのデバイスモーション設定が改善しました！&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;注意点としては、まず&lt;code&gt;HTTPS&lt;/code&gt;通信であることが求められます。常時HTTPS化の進んだ現在の世界線では苦もなく実現可能かもしれませんが、ローカル環境での開発時には注意が必要です。&lt;/p&gt;

&lt;p&gt;そして&lt;code&gt;permission API&lt;/code&gt;を叩くには、ユーザーによる何らかのアクションが必要です。前述の&lt;code&gt;8th Wall Web&lt;/code&gt;では「ARにはセンサーが必要だからContinueをタップしてね」というポップアップを出した上で、ユーザーによるContinueボタンのタップによってonClickを発火させています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kaa0qZab--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g0xbmqsox5fozb8ilnap.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kaa0qZab--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/g0xbmqsox5fozb8ilnap.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ref. &lt;a href="https://apps.8thwall.com/8w/jini/"&gt;https://apps.8thwall.com/8w/jini/&lt;/a&gt; にスマホでアクセスすると表示されるポップアップ&lt;/p&gt;

&lt;p&gt;&lt;code&gt;8th Wall Web&lt;/code&gt;の場合はContinueをタップ後にアクセスを求めるダイアログが表示されます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EGeTfVVe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wbo1n4wk7xqdtqhmls5t.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EGeTfVVe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wbo1n4wk7xqdtqhmls5t.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ref. &lt;a href="https://apps.8thwall.com/8w/jini/"&gt;https://apps.8thwall.com/8w/jini/&lt;/a&gt; でContinueタップ後に表示されるダイアログ(※言語設定が日本語の場合)&lt;/p&gt;

&lt;h2&gt;
  
  
  これで万事解決なのか?
&lt;/h2&gt;

&lt;p&gt;iOS 13から&lt;code&gt;DeviceMotionEvent&lt;/code&gt;と&lt;code&gt;DeviceOrientationEvent&lt;/code&gt;が使えるようになり、万事解決かと思いきや、実はそうとも言い切れません。&lt;/p&gt;

&lt;p&gt;アクセスを求めるダイアログで、意図的であろうと偶然だろうと「キャンセル」を選択してしまうと、当然ながらDeniedされてしまうため、期待する挙動になりません。&lt;/p&gt;

&lt;p&gt;そればかりか『誤って「キャンセル」してしまったのでもう一度やり直そう』とページをリロードをしてもDeniedされたままとなります。これは何度リロードしても状況は変わりません。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vEfmfIX9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nrww4nwf9u35mncpi0g8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vEfmfIX9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nrww4nwf9u35mncpi0g8.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ref. &lt;a href="https://apps.8thwall.com/8w/jini/"&gt;https://apps.8thwall.com/8w/jini/&lt;/a&gt; で許可を求められた際に「キャンセル」を選択してしまった後の画面&lt;/p&gt;

&lt;p&gt;少なくとも 2019-09-20 現在では&lt;code&gt;8th Wall Web&lt;/code&gt;ですら、この問題をソフトウェア的に解決できない状態にあります。8th Wallのトップページに戻り、ゼロからWEB AR DEMOに入り直しても継続的にDeniedされた状態となっていますが、一度タブを閉じて、もう一度開き直すことで再びポップアップが表示されるようになります。&lt;/p&gt;

&lt;p&gt;一般的なユーザーの導線を考えると、誤って、あるいはよく分からず「キャンセル」を選択してしまうことは往々にして起こりえます。少なくとも&lt;code&gt;8th Wall Web&lt;/code&gt;のようにDeniedされていることを示せればまだマシですが、何も考慮していないと「ユーザーは選択したにも関わらず動作しない」という状況が発生してしまいます。&lt;/p&gt;

&lt;p&gt;かといって「動作しない場合は一度タブを閉じて開き直してください」とお願いするのもスマートではなく、なかなか難しいと感じています。&lt;/p&gt;

&lt;h2&gt;
  
  
  さいごに
&lt;/h2&gt;

&lt;p&gt;iOS 12.2がリリースされた時点ではわりと本気でWebVRもWebARも終わったのではないかと思いましたが、iOS 13の世界線はまだ課題はありそうなものの、未来はあるように感じました。&lt;/p&gt;

&lt;p&gt;そもそもWebARの文脈で言えばiOSの&lt;code&gt;AR Quick Look&lt;/code&gt;もAndroidの&lt;code&gt;Scene Viewer&lt;/code&gt;も影響を受けていません。iOS 12.2がリリースされようと問題なく動作していますし、後者の&lt;code&gt;Scene Viewer&lt;/code&gt;に関してはiOSでもAndroidでも、さらに言えばMagic Leap Oneでも動作するようになっています。&lt;/p&gt;

&lt;p&gt;ウェブの進化とともにデバイスも進化しています。パワーアップした端末によってSafariで出来ることもきっと増えることでしょう。というわけで今後もWebVRとWebAR、そしてWebXRを応援しています:D&lt;/p&gt;

</description>
      <category>ios</category>
      <category>webvr</category>
      <category>webar</category>
    </item>
    <item>
      <title>iOS 12.2でWebVRとWebARが半ば終わった件について</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 16:18:03 +0000</pubDate>
      <link>https://dev.to/ikkou/ios-12-2-webvr-webar-16km</link>
      <guid>https://dev.to/ikkou/ios-12-2-webvr-webar-16km</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;この記事は 2019-04-16 JST 付で Qiita に投稿したものです。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1117201610348716032"&gt;https://twitter.com/ikkou/status/1117201610348716032&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  更新履歴
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;2019/04/17 8th Wallの事例に見る対応方法を追記しました&lt;/li&gt;
&lt;li&gt;2019/09/04 パブリックベータを見る限り iOS 13 でどのような状態になるか既にわかっていますが、例によって NDA の絡みがあるのでまだ具体的なことを Qiita に書けません。近々に控えているであろう iOS 13 公開後に掲載します。答えは &lt;a href="https://developer.apple.com/documentation/safari_release_notes/safari_13_beta_6_release_notes"&gt;Safari 13 Beta 6 Release Notes&lt;/a&gt; に記載されています。&lt;/li&gt;
&lt;li&gt;2019/09/20 続報として「&lt;a href="https://qiita.com/ikkou/items/5197b78d69fb6198b4d8"&gt;iOS 12.2で半ば終わったWebVRとWebARがiOS 13でどうなったか&lt;/a&gt;」を書きました。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  iOS 12.2で何が起きたのか
&lt;/h2&gt;

&lt;p&gt;2019/03/26 JSTに&lt;code&gt;iOS 12.2&lt;/code&gt;のアップデートが開始されました。&lt;/p&gt;

&lt;p&gt;iOS 12.2 Release Notes&lt;br&gt;
&lt;a href="https://developer.apple.com/documentation/ios_release_notes/ios_12_2_release_notes"&gt;https://developer.apple.com/documentation/ios_release_notes/ios_12_2_release_notes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このアップデートによって、予想されていた通り、デフォルトで、つまりiOS 12.2にアップデートした後に後述する設定を変えていない状態で、モーションデータの取得が出来なくなりました。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ARやVRのコンテンツを作っている人には、少々厄介な事態が起きるかもしれません。iOS 12.2のSafari（12.1）では、デフォルトでモーションデータの取得が不可になり、これによりiPhoneやiPadのWebベースのARやVR（WebAR／WebVR）が、正常に動作しなくなる可能性があります。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.gizmodo.jp/2019/02/safari-motion-data.html"&gt;https://www.gizmodo.jp/2019/02/safari-motion-data.html&lt;/a&gt; より引用&lt;/p&gt;

&lt;h2&gt;
  
  
  モーションデータの取得が出来ないと何が起きるのか
&lt;/h2&gt;

&lt;p&gt;論より証拠。実際にWebVRを試してみましょう。まずは&lt;code&gt;iOS 12.2&lt;/code&gt;にアップデート済みのiOS端末で、WebVRのためのJavaScriptフレームワークの1つであるA-Frameのウェブサイト &lt;a href="https://aframe.io/"&gt;https://aframe.io/&lt;/a&gt; にアクセスしてください。アクセスすると画面右側中央付近にメガネの形をしたアイコンがあります。これをタップしてください。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IKwyLTOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xapfrqeqiatq2k5vgyv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IKwyLTOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/xapfrqeqiatq2k5vgyv4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ポートレートモード（縦持ち）のときは&lt;code&gt;Insert phone into Cardboard holder.&lt;/code&gt;という文字列とともにランドスケープモード（横持ち）にしてね、という図が表示されるので指示に従ってランドスケープモードに切り替えてください。&lt;code&gt;Cardboard holder&lt;/code&gt;はいわゆるVRゴーグルのことを指しますが、入れなくてもOKです。&lt;/p&gt;

&lt;p&gt;ランドスケープモードにすると見ていた画面が2画面に分かれます。この状態をVRゴーグルで見ると二眼立体視で立体的に見え、iOS端末を持ったままぐるっと動かすとこの画面もぐるっと回る…はずでした。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VwsQRiYr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rsei9g4o1dj171sl1q7r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VwsQRiYr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rsei9g4o1dj171sl1q7r.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;iOS 12.2&lt;/code&gt;のMobile Safariで見ると上の画像のように表示され、iOS端末をぐるぐる動かしても何も変化しません。ここで画面が動く人はiOSのバージョンが&lt;code&gt;iOS 12.1&lt;/code&gt;以前の端末を使っているか、後述する「設定」を変更しているかのどちらかです。&lt;/p&gt;

&lt;h2&gt;
  
  
  なぜモーションデータの取得ができなくなったのか
&lt;/h2&gt;

&lt;p&gt;この大きな変更はセキュリティリスク、いわゆる脆弱性（ぜいじゃくせい）に対応したものになります。これはアップル公式の「iOS 12.2 のセキュリティコンテンツについて」というページで説明されています。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;対象となるデバイス：iPhone 5s 以降、iPad Air 以降、iPod touch (第 6 世代)&lt;br&gt;
影響：Web サイトがユーザの同意なくセンサー情報にアクセスできる可能性がある。&lt;br&gt;
説明：モーションや方向のデータの処理に、アクセス権の問題がありました。この問題は、制限を強化することで解決されました。&lt;br&gt;
CVE-2019-8554：匿名の研究者&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://support.apple.com/ja-jp/HT209599"&gt;https://support.apple.com/ja-jp/HT209599&lt;/a&gt; より引用&lt;/p&gt;

&lt;h2&gt;
  
  
  モーションや方向のデータの処理に潜んでいたアクセス権の問題とはなにか
&lt;/h2&gt;

&lt;p&gt;冒頭で引用したGIZMODEの記事でも言及している記事が詳しいです。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;WHEN APPS WANTS to access data from your smartphone's motion or light sensors, they often make that capability clear. That keeps a fitness app, say, from counting your steps without your knowledge. But a team of researchers has discovered that the rules don't apply to websites loaded in mobile browsers, which can often often access an array of device sensors without any notifications or permissions whatsoever.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://www.wired.com/story/mobile-websites-can-tap-into-your-phones-sensors-without-asking/"&gt;https://www.wired.com/story/mobile-websites-can-tap-into-your-phones-sensors-without-asking/&lt;/a&gt; より引用&lt;/p&gt;

&lt;p&gt;読み進めると書いてある通り、例えばGoogle マップを始めとする地図アプリは「位置情報」にアクセスするとき、明示的なポップアップを表示して許可を求めているが、それら以外のiOS端末から得られる下記の情報はユーザーの許可なしで取得、そして利用できていたとのことです。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;motion（動き）&lt;/li&gt;
&lt;li&gt;orientation（方向）&lt;/li&gt;
&lt;li&gt;proximity（近接）&lt;/li&gt;
&lt;li&gt;light（照明）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;特にmotionとorientationはWebVRとWebARにおいて大事な要素なのですが、これらの“穴”を塞ぐため、デフォルトでオフとなったようです。&lt;/p&gt;

&lt;h2&gt;
  
  
  この“穴”によってどんな問題が起きるのか
&lt;/h2&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1117675491480104960"&gt;https://twitter.com/ikkou/status/1117675491480104960&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;個人的には“穴”は“穴”でも直ちに問題のある“穴”ではないという認識ですが、個人情報保護が叫ばれるご時世なので、なにかクリティカルなことが起きる前に、あるいは発覚する前に、その“穴”を塞いだのではないかと考えています。あくまで個人の感想です。&lt;/p&gt;

&lt;p&gt;とはいえセキュリティの専門家が指摘し、アップルもそれをセキュリティの課題と感じたからこそ新たな設定を設け、デフォルトでオフにしているので、不用意にオンにすること、少なくともオンにしたままにするのは避けたほうが良いのかもしれません。&lt;/p&gt;

&lt;h2&gt;
  
  
  どうすればモーションデータを取得できるのか
&lt;/h2&gt;

&lt;p&gt;iOSの設定→Safari→「プライバシーとセキュリティ」の項目にある赤枠で囲った「モーションと向きのアクセス（Motion and Orientation Access）」をオン（緑色の状態）にすることでモーションデータの取得が可能となります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_uLHT2dr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ricfz0g6odxqrq7t1hun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_uLHT2dr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ricfz0g6odxqrq7t1hun.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;前述の通りアップル曰くセキュリティリスクが潜んでいるものを強制的に無視している状態になるので、気になる人はWebVRとWebARを試した後にはオフにしておくと良いかもしれません。&lt;/p&gt;

&lt;h2&gt;
  
  
  これからWebVRとWebARを使ったウェブマーケティング施策はどうなるのか
&lt;/h2&gt;

&lt;p&gt;例えば2018年2月にペプシがウェブマーケティングとして公開した「Pepsi Go Back」というウェブサイトがあります。Googleも開発に協力したということで一時期ちょっと話題になったウェブサイトです。&lt;/p&gt;

&lt;p&gt;Pepsi Go Back&lt;br&gt;
&lt;a href="https://www.pepsigoback.com/"&gt;https://www.pepsigoback.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このウェブサイトはスマートフォンからアクセスすると&lt;code&gt;360° View&lt;/code&gt;モードとVRゴーグルを用いる&lt;code&gt;VIRTUAL REALITY&lt;/code&gt;モードの2種類を選択できますが、設定がオフになっている&lt;code&gt;iOS 12.2&lt;/code&gt;ユーザーはどちらを選んでも正常に動作しません。&lt;/p&gt;

&lt;p&gt;そして正常に動作させるにはiOSの設定画面からセキュリティの項目を開き、オフになっているものをオンにする必要があります。作り手側の立場から言えば、ユーザーにオンに“してもらう”必要があります。&lt;/p&gt;

&lt;p&gt;しかしWebVRとWebARの良さはアプリのインストールを必要とせず、試したいときに直ぐに試せるところにあります。ユーザーはわざわざ設定画面を開き、設定を変更してまで試してくれるでしょうか。そもそもユーザーが該当ページにたどり着いたとき、そこにあるのは正常に動作しないWebVRあるいはWebARコンテンツです。一般的なユーザーはモーションデータの取得に絡む設定のことを知っているわけがありません。なんだ? 動かないぞ？ 壊れているのか? こんな反応が返ってくることが目に見えています。&lt;/p&gt;

&lt;p&gt;そしてこれが例えば広告代理店等々を挟んだ上での提案だったとしましょう。既にウェブマーケティング施策のひとつとしてWebVR然りWebARが取り入れられていることから、可能性があることは認められている状態です。しかし、アクセスしても動かない可能性がある、動かすには設定を変える必要がある、そしてその設定はセキュリティリスクをはらんでいる。そういった状態にある施策を取り入れるでしょうか。答えは「否」ではないでしょうか。&lt;/p&gt;

&lt;p&gt;少なくとも今日(2019/04/16)現在の状態では、積極的にWebVRとWebARをウェブマーケティング施策に使っていくのは避けたほうが良いかもしれないというのが持論です。つらい。そして過去に携わったWebVR/WebAR施策について念のために動作確認をしておいた方が良いと考えています。動かないはずです。つらい。&lt;/p&gt;

&lt;h2&gt;
  
  
  どうなることが理想か
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;iOS 12.3&lt;/code&gt;以降で、地図アプリのように、データにアクセスする際に明示的にユーザーの許可を求める状態になれば、今回の問題は回避できます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--svdU_Yc---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yq60dz7cvee7l461hweg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--svdU_Yc---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yq60dz7cvee7l461hweg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;図: Google マップが位置情報の設定変更を促している例&lt;/p&gt;

&lt;p&gt;現時点でそういったUIは用意されていないので、たとえば&lt;code&gt;setTimeout()&lt;/code&gt;でセンサー値を見て変化が起きていなければ、設定の変更を促すポップアップを表示して設定画面で設定を変更してもらう方法が打開策のひとつかもしれません。&lt;/p&gt;

&lt;h3&gt;
  
  
  8th Wallの事例に見る対応方法
&lt;/h3&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1118351209939652608"&gt;https://twitter.com/ikkou/status/1118351209939652608&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;iOS端末で8th Wallのデモページ &lt;a href="https://apps.8thwall.com/8w/jini/"&gt;https://apps.8thwall.com/8w/jini/&lt;/a&gt; にアクセスしてください。モーションデータの値を見て、設定がオフになっているiOS端末で表示したときには&lt;code&gt;deviceMotionErrorApple&lt;/code&gt;というIDを付与して「設定を変えてリロードしてください」という内容の画面を表示しています。&lt;/p&gt;

&lt;p&gt;8th Wallはもともとカメラへのアクセス許可を求め、その結果に応じて画面を出し分けているので、その分岐にこのモーションデータのオン・オフ状況が加わった形になります。&lt;/p&gt;

&lt;h2&gt;
  
  
  さいごに
&lt;/h2&gt;

&lt;p&gt;数年前からWebXRを推してきたので、今回の変更はだいぶ悲しいですが、設定を変えれば使えるわけで、“完全に”終わったわけではありません。願わくば&lt;code&gt;iOS 12.3&lt;/code&gt;以降のアップデートでより良い形に変わることを期待しつつ、今後もWebVRとWebAR、そしてWebXRを応援しています。&lt;/p&gt;

</description>
      <category>ios</category>
      <category>webvr</category>
      <category>webar</category>
    </item>
    <item>
      <title>Chrome 79 から WebXR Device API が有効になるも Oculus 系の HMD が認識されない件とその解決方法について</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 15:46:49 +0000</pubDate>
      <link>https://dev.to/ikkou/chrome-79-webxr-device-api-oculus-hmd-8b</link>
      <guid>https://dev.to/ikkou/chrome-79-webxr-device-api-oculus-hmd-8b</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;この記事は 2019-12-20 JST 付で Qiita に投稿したものです。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2020-08-25 時点で最新の Chrome v84 では本記事の方法で対応できません。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/ikkou/status/1207912623443865600"&gt;https://twitter.com/ikkou/status/1207912623443865600&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chrome 79 で WebXR Device API が正式サポートされました🎉
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;WebXR Device API&lt;/code&gt; はブラウザから Oculus Rift S をはじめとする (VR|AR|MR) HMD の情報を取得するための API です。&lt;/p&gt;

&lt;p&gt;2019/12/20 現在の「メジャーなブラウザ」では Chrome 79 以降のみが「標準で」対応しています。&lt;br&gt;
この「メジャーなブラウザ」というところが肝です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a03Zs2HD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zeah9ojilnyv1mjvb1fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a03Zs2HD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zeah9ojilnyv1mjvb1fz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;source. &lt;a href="https://caniuse.com/#search=WebXR"&gt;https://caniuse.com/#search=WebXR&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chrome 78 以前はどうだったのか?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;chrome://flags&lt;/code&gt; から以下のフラグを &lt;code&gt;Enable&lt;/code&gt; にすると Chrome で &lt;code&gt;WebXR Device API&lt;/code&gt; を通して Oculus Rift S で &lt;code&gt;WebXR&lt;/code&gt; を楽しむことができました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;WebXR Device API&lt;/code&gt;: Enabled&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Oculus VR support&lt;/code&gt;: Enabled&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;XR device sandboxing&lt;/code&gt;: Disabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ここで言う &lt;code&gt;WebXR&lt;/code&gt; を楽しむというのは、&lt;a href="https://immersive-web.github.io/webxr-samples/"&gt;WebXR Sample Pages&lt;/a&gt; で &lt;code&gt;Yes!&lt;/code&gt; が表示され、各サンプルで &lt;code&gt;ENTER VR&lt;/code&gt; が表示される状態を指しています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qylK_y_H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0qy8t4doyi26wnk0g2qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qylK_y_H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0qy8t4doyi26wnk0g2qw.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;WebXR Device API&lt;/code&gt; に対応している場合に表示されるテキスト&lt;br&gt;
source: &lt;a href="https://immersive-web.github.io/webxr-samples/"&gt;https://immersive-web.github.io/webxr-samples/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;なお Firefox のように、まだ &lt;code&gt;WebXR Device API&lt;/code&gt; に対応していない場合でも &lt;code&gt;WebVR API&lt;/code&gt; へのフォールバックで概ね体験可能です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b3XiV0Hw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0fnt9qjkyerbnex7hexb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b3XiV0Hw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0fnt9qjkyerbnex7hexb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;WebXR Device API&lt;/code&gt; あるいは &lt;code&gt;WebVR API&lt;/code&gt; へのフォールバックで VR HMD が認識されているときに表示される状態&lt;br&gt;
source: &lt;a href="https://immersive-web.github.io/webxr-samples/immersive-vr-session.html"&gt;https://immersive-web.github.io/webxr-samples/immersive-vr-session.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tGbNhTeS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tg5zhtkxf0r8fnor3b8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tGbNhTeS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tg5zhtkxf0r8fnor3b8q.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;VR HMD が認識されていないときは &lt;code&gt;VR NOT FOUND&lt;/code&gt; が表示される&lt;br&gt;
source: &lt;a href="https://immersive-web.github.io/webxr-samples/immersive-vr-session.html"&gt;https://immersive-web.github.io/webxr-samples/immersive-vr-session.html&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chrome 79 でどうなったのか?
&lt;/h2&gt;

&lt;p&gt;まず &lt;code&gt;WebXR Device API&lt;/code&gt; は標準対応となったため、&lt;code&gt;chrome://flags&lt;/code&gt; から変更する必要がなくなりました！&lt;/p&gt;

&lt;p&gt;標準対応となったので「これだけでいける！」と思っていましたが、実は Oculus Rift/Rift S に関しては別途フラグを立てる必要がありました。もともと &lt;code&gt;Oculus VR support: Enabled&lt;/code&gt; を指定していたので、それかと思うとこのフラグは消えていていました！&lt;/p&gt;

&lt;p&gt;結論として &lt;code&gt;Oculus VR support&lt;/code&gt; に代わる &lt;code&gt;Oculus hardware support&lt;/code&gt; を &lt;code&gt;Enable&lt;/code&gt; にする必要がありました。&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/kettlecorn/status/1207880549991366656"&gt;https://twitter.com/kettlecorn/status/1207880549991366656&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chrome 79 以降で &lt;code&gt;WebXR&lt;/code&gt; を動作させるために必要なこと
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Oculus hardware support&lt;/code&gt; = &lt;code&gt;chrome://flags/#oculus-vr&lt;/code&gt; を &lt;code&gt;Enabled&lt;/code&gt; に変更&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;XR device sandboxing&lt;/code&gt; = &lt;code&gt;chrome://flags/#xr-sandbox&lt;/code&gt; を &lt;code&gt;Disabled&lt;/code&gt; に変更&lt;/li&gt;
&lt;li&gt;Chrome を再起動&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上記の設定で 2019/12/20 現在 Chrome Beta, Chromium の最新バージョンである v81 まで動作することを確認しています。&lt;/p&gt;

&lt;h2&gt;
  
  
  2019/12/20 現在、WebXR Device API に「真の標準対応」しているブラウザは Oculus Browser だけ！
&lt;/h2&gt;

&lt;p&gt;Ref. &lt;a href="https://twitter.com/wakufactory/status/1207924277044867077"&gt;https://twitter.com/wakufactory/status/1207924277044867077&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;本記事では一切のフラグ変更を必要としないことを「真の標準対応」と表現していますが、これは W3C として定義している用語ではありません。そして Oculus Browser は決してメジャーなブラウザではない異端児です。&lt;/p&gt;

&lt;p&gt;現場からは以上です。&lt;/p&gt;




&lt;p&gt;Special Thanks: OE Waku さん - &lt;a href="https://twitter.com/wakufactory"&gt;https://twitter.com/wakufactory&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webvr</category>
      <category>webxr</category>
    </item>
    <item>
      <title>AR.js ではじめる Image Tracking</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 15:34:08 +0000</pubDate>
      <link>https://dev.to/ikkou/ar-js-image-tracking-382b</link>
      <guid>https://dev.to/ikkou/ar-js-image-tracking-382b</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

この記事は 2020-03-16 JST 付で Qiita に投稿したものです。


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/ikkou"&gt;@ikkou&lt;/a&gt; です。みんな大好き AR.js が新しくなり、今まで通りの Marker Tracking と新しい Image Tracking の2つの異なるビルドが存在するようにしました。本記事では新しい Image Tracking について概要を説明します。&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ar-js-org.github.io/AR.js/aframe/examples/image-tracking/nft/" rel="noopener noreferrer"&gt;サンプルページ&lt;/a&gt; にアクセスして、用意されている&lt;a href="https://raw.githubusercontent.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex-image-big.jpeg" rel="noopener noreferrer"&gt;恐竜の画像&lt;/a&gt;にかざすと、恐竜が飛び出してくる、そんな QR コードなどのマーカーを使わない、画像認識型の WebAR を新しい AR.js で実現できるようになりました。&lt;/p&gt;

&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;以下、前提知識を揃えるための説明です。&lt;br&gt;
AR.js のことを知っている人や、前提知識が不要な人は本編まで読み飛ばしてください。&lt;/p&gt;

&lt;h3&gt;
  
  
  AR.js とは
&lt;/h3&gt;

&lt;p&gt;WebAR を実現するための汎用 JavaScript ライブラリです。&lt;br&gt;
&lt;a href="https://github.com/AR-js-org/AR.js" rel="noopener noreferrer"&gt;https://github.com/AR-js-org/AR.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;元々は開発者である Jerome Etienne さん ( &lt;a href="https://twitter.com/jerome_etienne" rel="noopener noreferrer"&gt;@jerome_etienne&lt;/a&gt; ) の GitHub 個人リポジトリである &lt;a href="https://github.com/jeromeetienne/AR.js" rel="noopener noreferrer"&gt;jeromeetienne/AR.js&lt;/a&gt; で管理されてきましたが、2020-02-28 JST より &lt;a href="https://github.com/AR-js-org" rel="noopener noreferrer"&gt;AR-js-org&lt;/a&gt; という Organization で管理されるようになりました。&lt;br&gt;
移動の詳細は旧リポジトリの &lt;a href="https://github.com/jeromeetienne/AR.js#why-move-arjs" rel="noopener noreferrer"&gt;Why move AR.js&lt;/a&gt; を参照してください。&lt;/p&gt;

&lt;p&gt;リポジトリの移動に伴い、AR.js 公式のドキュメント集である AR.js Documentation が用意されました。&lt;br&gt;
&lt;a href="https://ar-js-org.github.io/AR.js-Docs/" rel="noopener noreferrer"&gt;https://ar-js-org.github.io/AR.js-Docs/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AR.js でできること
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Marker Based WebAR

&lt;ul&gt;
&lt;li&gt;なにかしらのマーカーにかざすと AR なものが表示される、よく見るタイプの AR を実装できます。&lt;/li&gt;
&lt;li&gt;マーカーとしてあらかじめ用意されている Hiro, Kanji の他、カスタムマーカーを使用できますが、マーカーには必ず黒い枠線が必要となります。&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Location Based WebAR

&lt;ul&gt;
&lt;li&gt;位置情報をもとにして AR なものが表示される、例えば Pokémon GO の AR+ のような AR を実装できます。&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Image Tracking WebAR 🆕

&lt;ul&gt;
&lt;li&gt;マーカーではなく写真やイラストにかざすと AR なものが表示される、よく見るタイプの AR を実装できます。&lt;/li&gt;
&lt;li&gt;これまでは 8th Wall Web のみが実用的な Image Tracking WebAR のソリューションでしたが、新たに AR.js でも実現できるようになりました。&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;前述の通り、現在の AR.js は Image Tracking 向けのものと、Marker Tracking 向けのものがそれぞれ個別のライブラリとして存在しています。Location Based 向けはどちらのライブラリとも合わせて使えます。 &lt;/p&gt;

&lt;h3&gt;
  
  
  WebAR とは
&lt;/h3&gt;

&lt;p&gt;WebAR はウェブ技術で AR 表現を実現するものです。&lt;br&gt;
iOS/Android のネイティブアプリとして AR アプリを開発することに比べ、アプリのインストールが不要という絶対的な優位点がありますが、ネイティブアプリでできることのすべてを WebAR として実装できるわけではありません。特にパフォーマンス面ではネイティブアプリに及ばない部分もありますが、ウェブ技術の進化とともにできることが増えている技術です。 &lt;/p&gt;

&lt;p&gt;手前味噌ですが 2019/12 時点の WebAR をまとめた記事を書いているので、興味のある方は覗いてみてください。&lt;/p&gt;

&lt;p&gt;WebAR の現状確認 2019 Winter&lt;br&gt;
&lt;a href="https://qiita.com/ikkou/items/c32d57e30b28068b268d" rel="noopener noreferrer"&gt;https://qiita.com/ikkou/items/c32d57e30b28068b268d&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WebXR とは
&lt;/h3&gt;

&lt;p&gt;ウェブ技術で AR を実現する WebAR の他、ウェブ技術で VR を実現する WebVR があります。また、AR や VR の総称として XR という言葉が用いられています。そういった背景から、ウェブ技術を策定する W3C は WebAR や WebVR に必要な API として WebXR Device API を策定しています。&lt;br&gt;
ただし、WebAR、WebVR ともに必ずしも WebXR Device API を必要とするわけではありません。&lt;/p&gt;

&lt;h3&gt;
  
  
  NFT ( Natural Feature Tracking ) とは
&lt;/h3&gt;

&lt;p&gt;Image Tracking の話になると NFT という言葉が出てきますが、これは Natural Feature Tracking の略称で、Natural Feature つまり自然特徴点をもとにして認識する技術を指します。NFT ではない場合は Marker Based となります。&lt;/p&gt;

&lt;h2&gt;
  
  
  AR.js ではじめる Image Tracking
&lt;/h2&gt;

&lt;p&gt;以下、本編となります。&lt;/p&gt;

&lt;h3&gt;
  
  
  1. NFT Marker Creator で Image Descriptors を作成する
&lt;/h3&gt;

&lt;p&gt;AR.js では画像に対する固有の特徴点である &lt;code&gt;Image Descriptors&lt;/code&gt; を NFT Marker Creator で作成します。&lt;/p&gt;

&lt;p&gt;NFT Marker Creator は &lt;a href="https://carnaux.github.io/NFT-Marker-Creator/" rel="noopener noreferrer"&gt;Web バージョン&lt;/a&gt;と Node バージョン ( &lt;a href="https://github.com/Carnaux/NFT-Marker-Creator" rel="noopener noreferrer"&gt;Carnaux/NFT-Marker-Creator&lt;/a&gt; ) が用意されていますが、本記事では『公式が推奨している Web バージョン』を使用します。&lt;/p&gt;

&lt;p&gt;※ 2020-03-17 15:13 追記&lt;br&gt;
NFT Marker Creator の README では Node バージョンが &lt;code&gt;preferred&lt;/code&gt; とされていますが、AR.js Documentation では Web バージョンが &lt;code&gt;recommended&lt;/code&gt; とされているので、本記事では　AR.js Documentation　を公式として『公式が推奨している Web バージョン』と表記しています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9bcwbucwnr5keh3rq6pw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9bcwbucwnr5keh3rq6pw.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://carnaux.github.io/NFT-Marker-Creator/" rel="noopener noreferrer"&gt;NFT Marker Creator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://carnaux.github.io/NFT-Marker-Creator/" rel="noopener noreferrer"&gt;NFT Marker Creator&lt;/a&gt; にアクセスし、&lt;code&gt;Upload Image&lt;/code&gt; から Image Tracking として使いたい任意の画像をアップロードします。&lt;/p&gt;

&lt;p&gt;画像をアップロードし、適切な画像であればページ下部の Confidence の☆に色が付きます。例えば以下のような何ら特徴点のない単色の &lt;code&gt;#FF69B4&lt;/code&gt; で塗りつぶした画像は☆0で不適切です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8vtgx1i55oyduppr53oq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8vtgx1i55oyduppr53oq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Twitter のヘッダに設定している画像 ( 1500px × 500px ) は長辺解像度が増えていることと背景の複雑さも相まってか☆4でした。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxxx7olpgacqzoyqs5x87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxxx7olpgacqzoyqs5x87.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;所属企業のコーポレートサイトに載っているオフィスの模様を示した画像 ( 1280px × 854px ) は Twitter のヘッダ画像より長辺こそ短いものの、総画素数で言えば上回ることも相まってか ☆5でした。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9xnldoclml6ylrpr3hwf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9xnldoclml6ylrpr3hwf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://tech.zozo.com/aboutus/" rel="noopener noreferrer"&gt;私たちについて - 株式会社ZOZOテクノロジーズ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今回は Twitter のヘッダ画像を使います。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Generate&lt;/code&gt; ボタンを押下すると &lt;code&gt;Image Descriptors&lt;/code&gt; として拡張子 &lt;code&gt;.iset&lt;/code&gt;, &lt;code&gt;.fset&lt;/code&gt;, &lt;code&gt;.fset3&lt;/code&gt; の3ファイルをダウンロードできます。&lt;/p&gt;

&lt;h4&gt;
  
  
  💡Image Tracking 向けとしての画像として必要な要素
&lt;/h4&gt;

&lt;p&gt;NFT Marker Creator のページ下部に注意書きとして &lt;code&gt;Warning: Images with width and/or height above 1000px might take 20min+ to generate.&lt;/code&gt; と記載されている通り、幅や高さが 1000px を超える画像は作成に 20 分以上かかるとされていますが、だからといって小さな画像を使っても正しく認識されません。&lt;/p&gt;

&lt;p&gt;どのような画像が適切かは GitHub NFT-Marker-Creator の Wiki ページ &lt;a href="https://github.com/Carnaux/NFT-Marker-Creator/wiki/Creating-good-markers" rel="noopener noreferrer"&gt;Creating good markers&lt;/a&gt; で説明されています。ポイントは一定の解像度があること且つ特徴量が多いことです。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. aframe-ar-nft.js を使って Image Tracking を実現する WebAR ページを作る
&lt;/h3&gt;

&lt;p&gt;公式サイトから完成形を抜粋します。&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/gh/aframevr/aframe@1c2407b26c61958baa93967b5412487cd94b290b/dist/aframe-master.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
  &lt;span class="nc"&gt;.arjs-loader&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.arjs-loader&lt;/span&gt; &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"margin : 0px; overflow: hidden;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"arjs-loader"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Loading, please wait...&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a-scene&lt;/span&gt;
    &lt;span class="na"&gt;vr-mode-ui=&lt;/span&gt;&lt;span class="s"&gt;"enabled: false;"&lt;/span&gt;
    &lt;span class="na"&gt;renderer=&lt;/span&gt;&lt;span class="s"&gt;"logarithmicDepthBuffer: true;"&lt;/span&gt;
    &lt;span class="na"&gt;embedded&lt;/span&gt;
    &lt;span class="na"&gt;arjs=&lt;/span&gt;&lt;span class="s"&gt;"trackingMethod: best; sourceType: webcam; debugUIEnabled: false;"&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a-nft&lt;/span&gt;
      &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"nft"&lt;/span&gt;
      &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;"https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex/trex-image/trex"&lt;/span&gt;
      &lt;span class="na"&gt;smooth=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
      &lt;span class="na"&gt;smoothCount=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;
      &lt;span class="na"&gt;smoothTolerance=&lt;/span&gt;&lt;span class="s"&gt;".01"&lt;/span&gt;
      &lt;span class="na"&gt;smoothThreshold=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a-entity&lt;/span&gt;
        &lt;span class="na"&gt;gltf-model=&lt;/span&gt;&lt;span class="s"&gt;"https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex/scene.gltf"&lt;/span&gt;
        &lt;span class="na"&gt;scale=&lt;/span&gt;&lt;span class="s"&gt;"5 5 5"&lt;/span&gt;
        &lt;span class="na"&gt;position=&lt;/span&gt;&lt;span class="s"&gt;"50 150 0"&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/a-entity&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/a-nft&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a-entity&lt;/span&gt; &lt;span class="na"&gt;camera&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/a-entity&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/a-scene&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ref. &lt;a href="https://github.com/AR-js-org/AR.js#-image-tracking" rel="noopener noreferrer"&gt;https://github.com/AR-js-org/AR.js#-image-tracking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以下、ポイントをかいつまんで説明します。&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1. Script の読み込み
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;


&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/gh/aframevr/aframe@1c2407b26c61958baa93967b5412487cd94b290b/dist/aframe-master.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Image Tracking 向けの AR.js は A-Frame 版と three.js 版が用意されています。公式ページでは A-Frame 版が使われているので、一緒に A-Frame 自体も読み込んでいます。読み込む順番は A-Frame → AR.js です。&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2. &lt;code&gt;.arjs-loader&lt;/code&gt; の記述
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
  &lt;span class="nc"&gt;.arjs-loader&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.arjs-loader&lt;/span&gt; &lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"arjs-loader"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;Loading, please wait...&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;ページにアクセスした後、&lt;code&gt;Image Descriptors&lt;/code&gt; をロードするまで一定の時間がかかるので、公式サイトのサンプルでは読み込みが完了するまで &lt;code&gt;Loading, please wait...&lt;/code&gt; の文字列を表示しています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8tr7dep8ajjjc7hjl7zj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8tr7dep8ajjjc7hjl7zj.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://ar-js-org.github.io/AR.js/aframe/examples/image-tracking/nft/" rel="noopener noreferrer"&gt;https://ar-js-org.github.io/AR.js/aframe/examples/image-tracking/nft/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;不要だと感じるのであれば思い切って削除しても正常に動作しますし、説明書きを日本語に変更したい場合は文字列を書き換えるだけです。&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3. &lt;code&gt;Image Descriptors&lt;/code&gt; の読み込みと呼び出す &lt;code&gt;glTF&lt;/code&gt; モデルの読み込み
&lt;/h4&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;a-nft&lt;/span&gt;
  &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"nft"&lt;/span&gt;
  &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;"https://arjs-cors-proxy.herokuapp.com/https://cdn.glitch.com/8d99eec0-4479-4e11-9a80-9993963fc1ea%2FNFT"&lt;/span&gt;
  &lt;span class="na"&gt;smooth=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
  &lt;span class="na"&gt;smoothCount=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;
  &lt;span class="na"&gt;smoothTolerance=&lt;/span&gt;&lt;span class="s"&gt;".01"&lt;/span&gt;
  &lt;span class="na"&gt;smoothThreshold=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a-entity&lt;/span&gt;
      &lt;span class="na"&gt;gltf-model=&lt;/span&gt;&lt;span class="s"&gt;"https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex/scene.gltf"&lt;/span&gt;
      &lt;span class="na"&gt;scale=&lt;/span&gt;&lt;span class="s"&gt;"5 5 5"&lt;/span&gt;
      &lt;span class="na"&gt;position=&lt;/span&gt;&lt;span class="s"&gt;"50 150 0"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/a-entity&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a-nft&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;肝となる部分です。Image Tracking のために新たに &lt;code&gt;a-nft&lt;/code&gt; という Custom Component が用意されています。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Attribute&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;type&lt;/td&gt;
&lt;td&gt;Image Tracking の場合は nft 一択です。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;url&lt;/td&gt;
&lt;td&gt;Image Descriptors の拡張子を除いたパスを記述します。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;smooth&lt;/td&gt;
&lt;td&gt;camera smoothing をオンにします。&lt;br&gt;True が推奨されていますが、なぜかデフォルトは false です。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;smoothCount&lt;/td&gt;
&lt;td&gt;画像が動いたときの Tracking をスムーズにします。デフォルトは 5 です。&lt;br&gt;数字が増えれば増えるほどスムーズになる反面、重くなります。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;smoothTolerance&lt;/td&gt;
&lt;td&gt;平滑化の距離の許容値です。デフォルトは 0.01 です。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;smoothThreshold&lt;/td&gt;
&lt;td&gt;平滑化のしきい値です。デフォルトは 2 です。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;公式サイトのデモでは &lt;code&gt;smoothCount&lt;/code&gt; と &lt;code&gt;smoothThreshold&lt;/code&gt; をデフォルト値から変更しています。これらの数字は実際に検証しながら調整するのが良いでしょう。&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;span class="nt"&gt;&amp;lt;a-entity&lt;/span&gt;
  &lt;span class="na"&gt;gltf-model=&lt;/span&gt;&lt;span class="s"&gt;"https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex/scene.gltf"&lt;/span&gt;
  &lt;span class="na"&gt;scale=&lt;/span&gt;&lt;span class="s"&gt;"5 5 5"&lt;/span&gt;
  &lt;span class="na"&gt;position=&lt;/span&gt;&lt;span class="s"&gt;"50 150 0"&lt;/span&gt;
&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/a-entity&amp;gt;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;a-nft&lt;/code&gt; の中で呼び出すオブジェクトをおなじみの &lt;code&gt;a-entity&lt;/code&gt; で定義します。&lt;br&gt;
公式サイトのデモでは恐竜の画像にあわせて恐竜の 3D モデル ( .glTF ) を呼び出しています。&lt;/p&gt;

&lt;p&gt;なお &lt;code&gt;Image Descriptors&lt;/code&gt; と 3D モデルの読み込み URL の頭に付いている &lt;code&gt;https://arjs-cors-proxy.herokuapp.com/&lt;/code&gt; はクロスオリジンの問題を回避するためのプロキシです。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 認識させる画像を変えたり、呼び出す 3D モデルを変えてみよう
&lt;/h3&gt;

&lt;p&gt;Glitch に呼び出す画像 &lt;a class="mentioned-user" href="https://dev.to/ikkou"&gt;@ikkou&lt;/a&gt; の &lt;a href="https://twitter.com/ikkou/header_photo" rel="noopener noreferrer"&gt;Twitter ヘッダ画像&lt;/a&gt; に変更したバージョンを用意しました。&lt;br&gt;
&lt;a href="https://enchanting-ten-people.glitch.me/" rel="noopener noreferrer"&gt;https://enchanting-ten-people.glitch.me/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;スマートフォンから &lt;a href="https://enchanting-ten-people.glitch.me/" rel="noopener noreferrer"&gt;https://enchanting-ten-people.glitch.me/&lt;/a&gt; にアクセスして、Mac/PC のブラウザに表示した &lt;a class="mentioned-user" href="https://dev.to/ikkou"&gt;@ikkou&lt;/a&gt; の &lt;a href="https://twitter.com/ikkou/header_photo" rel="noopener noreferrer"&gt;Twitter ヘッダ画像&lt;/a&gt; にスマホをかざすと、サイズと位置の異なる恐竜の 3D モデルが表示されます。&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ja"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Sample: AR.js with Image Tracking&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"utf-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/style.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"&lt;a href="https://cdn.jsdelivr.net/gh/aframevr/aframe@1c2407b26c61958baa93967b5412487cd94b290b/dist/aframe-master.min.js" rel="noopener noreferrer"&gt;https://cdn.jsdelivr.net/gh/aframevr/aframe@1c2407b26c61958baa93967b5412487cd94b290b/dist/aframe-master.min.js&lt;/a&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"&lt;a href="https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js" rel="noopener noreferrer"&gt;https://raw.githack.com/AR-js-org/AR.js/master/aframe/build/aframe-ar-nft.js&lt;/a&gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"arjs-loader"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;br&gt;
      Now Loading...&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;br&gt;
      読み込み完了までお待ちください&lt;br&gt;
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;a-scene&lt;/span&gt;&lt;br&gt;
    &lt;span class="na"&gt;vr-mode-ui=&lt;/span&gt;&lt;span class="s"&gt;"enabled: false;"&lt;/span&gt;&lt;br&gt;
    &lt;span class="na"&gt;renderer=&lt;/span&gt;&lt;span class="s"&gt;"logarithmicDepthBuffer: true;"&lt;/span&gt;&lt;br&gt;
    &lt;span class="na"&gt;embedded&lt;/span&gt;&lt;br&gt;
    &lt;span class="na"&gt;arjs=&lt;/span&gt;&lt;span class="s"&gt;"trackingMethod: best; sourceType: webcam;debugUIEnabled: false;"&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
    &lt;span class="nt"&gt;&amp;lt;a-nft&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"nft"&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;url=&lt;/span&gt;&lt;span class="s"&gt;"&lt;a href="https://arjs-cors-proxy.herokuapp.com/https://cdn.glitch.com/8d99eec0-4479-4e11-9a80-9993963fc1ea%2FNFT" rel="noopener noreferrer"&gt;https://arjs-cors-proxy.herokuapp.com/https://cdn.glitch.com/8d99eec0-4479-4e11-9a80-9993963fc1ea%2FNFT&lt;/a&gt;"&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;smooth=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;smoothCount=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;smoothTolerance=&lt;/span&gt;&lt;span class="s"&gt;".01"&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;smoothThreshold=&lt;/span&gt;&lt;span class="s"&gt;"5"&lt;/span&gt;&lt;br&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
      &lt;span class="nt"&gt;&amp;lt;a-entity&lt;/span&gt;&lt;br&gt;
        &lt;span class="na"&gt;gltf-model=&lt;/span&gt;&lt;span class="s"&gt;"&lt;a href="https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex/scene.gltf" rel="noopener noreferrer"&gt;https://arjs-cors-proxy.herokuapp.com/https://raw.githack.com/AR-js-org/AR.js/master/aframe/examples/image-tracking/nft/trex/scene.gltf&lt;/a&gt;"&lt;/span&gt;&lt;br&gt;
        &lt;span class="na"&gt;scale=&lt;/span&gt;&lt;span class="s"&gt;"10 10 10"&lt;/span&gt;&lt;br&gt;
        &lt;span class="na"&gt;position=&lt;/span&gt;&lt;span class="s"&gt;"100 0 100"&lt;/span&gt;&lt;br&gt;
      &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
      &lt;span class="nt"&gt;&amp;lt;/a-entity&amp;gt;&lt;/span&gt;&lt;br&gt;
    &lt;span class="nt"&gt;&amp;lt;/a-nft&amp;gt;&lt;/span&gt;&lt;br&gt;
    &lt;span class="nt"&gt;&amp;lt;a-entity&lt;/span&gt; &lt;span class="na"&gt;camera&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/a-entity&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nt"&gt;&amp;lt;/a-scene&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;helvetica&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
&lt;span class="nc"&gt;.arjs-loader&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9999&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
&lt;span class="nc"&gt;.arjs-loader&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  まとめ&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ar-js-org.github.io/AR.js-Docs/" rel="noopener noreferrer"&gt;AR.js Documentation&lt;/a&gt; の &lt;a href="https://ar-js-org.github.io/AR.js-Docs/image-tracking/" rel="noopener noreferrer"&gt;Image Tracking&lt;/a&gt; に記述されていることをなぞり、自分で設定した画像で 3D オブジェクトが表示されるように書き換えました。&lt;/p&gt;

&lt;p&gt;今回は『本当になぞっただけ』なので、次は各種パラメータの調整や表示されるオブジェクトをより実践的なものにしてみます。&lt;/p&gt;

&lt;p&gt;また、Image Tracking ができるようになったことで、AR.js を使った「WebAR 名刺」や、着ているものに反応するような WebAR がこれまで以上に捗るかもしれませんが、前者で言えば名刺サイズに収まる画像且つ一定の特徴点を持つ画像を適切に配置できるか、後者で言えば皺の影響がどこまで出るかなどを検証してみたいと考えています。&lt;/p&gt;

&lt;p&gt;現場からは以上です。&lt;br&gt;
新しくなった AR.js で素敵な Image Tracking ライフを！&lt;/p&gt;

</description>
      <category>ar</category>
      <category>webar</category>
      <category>webxr</category>
    </item>
    <item>
      <title>DeepARを使ってWebARでSnapchatみたいな顔認識フィルターWebアプリをつくる</title>
      <dc:creator>HEAVEN ちゃん a.k.a いっこう</dc:creator>
      <pubDate>Wed, 25 Mar 2020 15:20:01 +0000</pubDate>
      <link>https://dev.to/ikkou/deepar-webar-snapchat-web-1g68</link>
      <guid>https://dev.to/ikkou/deepar-webar-snapchat-web-1g68</guid>
      <description>&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;この記事は 2020-03-18 JST 付で Qiita に投稿したものです。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;WebAR というと 8th Wall Web や最近 Image Tracking に対応した AR.js が有名ですが、DeepAR を使うことでそれらが対応していない「顔認識」系の WebAR を実現できます。&lt;/p&gt;

&lt;p&gt;DeepAR でググると &lt;a href="https://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/deepar.html"&gt;Amazon SageMaker の DeepAR 予測&lt;/a&gt; がトップに出てきますが、本記事で取り扱うのは Augmented Reality の方の DeepAR です。&lt;/p&gt;

&lt;h2&gt;
  
  
  DeepARとは
&lt;/h2&gt;

&lt;p&gt;DeepAR は海外では Snapchat 日本では SNOW をはじめとする顔認識系アプリを実現するための SDK です。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DeepAR.ai is an SDK for Snapchat face filters, face lenses and effects for any iOS, Android, Unity or HTML5 app. Full face detection, face tracking software for AR and Augmented Reality advertising&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ref. &lt;a href="https://www.deepar.ai/"&gt;https://www.deepar.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ネイティブアプリとなる iOS/Android の SDK だけでなく、JavaScript ライブラリも用意されているので、Web における AR である WebAR を実現できます。&lt;/p&gt;

&lt;h3&gt;
  
  
  どんなことができるのか?
&lt;/h3&gt;

&lt;p&gt;プラットフォームによって異なりますが、本記事で扱う WebAR では、顔認識からのマスク、エフェクト、複数人の顔認識、画像認識ができると説明されていますが、&lt;a href="https://help.deepar.ai/en/articles/3539592-background-segmentation"&gt;Background Segmentation&lt;/a&gt; と &lt;a href="https://help.deepar.ai/en/articles/3539456-hair-segmentation"&gt;Hair Segmentation&lt;/a&gt;、そして &lt;a href="https://help.deepar.ai/en/articles/3672563-emotion-blend-shapes-example"&gt;Emotion Tracking&lt;/a&gt; には対応していないとされています。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It supports face masks, effects, multiple face tracking, natural image tracking. The background and hair segmentation and emotion tracking are not supported.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ref. &lt;a href="https://help.deepar.ai/en/articles/3545207-getting-started"&gt;https://help.deepar.ai/en/articles/3545207-getting-started&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;※ マスクとエフェクトは試していますが、複数人の顔認識と、特に気になる画像認識はまだ試していません。&lt;/p&gt;

&lt;h4&gt;
  
  
  実際に動かしている様子
&lt;/h4&gt;

&lt;p&gt;Twitter に動画をアップしています。&lt;br&gt;
&lt;a href="https://twitter.com/ikkou/status/1240250264843505667"&gt;https://twitter.com/ikkou/status/1240250264843505667&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Qiita で動画が展開されないときは、遷移して確認後、戻ってきてください:)&lt;/p&gt;
&lt;h3&gt;
  
  
  でもお高いんでしょう?
&lt;/h3&gt;

&lt;p&gt;商用利用となると有償ですが、10 MAU 以下、とりあえず自分で触って試してみる分には無償です。&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;MAU&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$0/month&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$25/month&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$100/month&lt;/td&gt;
&lt;td&gt;5,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$500/month&lt;/td&gt;
&lt;td&gt;30,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$1000/month&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;100,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Ref. &lt;a href="https://developer.deepar.ai/pricing"&gt;https://developer.deepar.ai/pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MAU 10 以降は課金が発生しますが、値付け感は 8th Wall よりも優しいと感じます。&lt;/p&gt;

&lt;p&gt;なお、有償契約すると iOS, Android, Web のどれもが MAU 上限まで使えますが、同時に使った場合 MAU は合算されるので注意が必要です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pJO6yzzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3o4tjbnlp2k4e2w6bki3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pJO6yzzu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3o4tjbnlp2k4e2w6bki3.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;また、無償版は上記のように画面上に &lt;code&gt;DeepAR.ai&lt;/code&gt; の透かしが入ります。&lt;/p&gt;
&lt;h2&gt;
  
  
  実際にDeppARを動かしてWebARをやってみる
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. アカウントの作成
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.deepar.ai/"&gt;https://developer.deepar.ai/&lt;/a&gt; にアクセスして &lt;code&gt;SIgn Up&lt;/code&gt; からアカウントを作成します。&lt;/p&gt;
&lt;h3&gt;
  
  
  2. 新しいプロジェクトの作成
&lt;/h3&gt;

&lt;p&gt;アカウントを作成すると &lt;a href="https://developer.deepar.ai/projects"&gt;Projects&lt;/a&gt; にアクセスできるようになります。&lt;br&gt;
このページの + マークから新しいプロジェクトを作成します。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wv6hESQ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/570zf9cia61g9se0i45l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wv6hESQ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/570zf9cia61g9se0i45l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Price calculator の初期値は 100,000 になっているので、とりあえず試してみたい場合はスライダーを左端まで持っていき、Free $0 / month になっている状態で &lt;code&gt;Get started&lt;/code&gt; をクリックしてください。&lt;/p&gt;

&lt;p&gt;次のページで Project name に任意の名前を入れ、&lt;code&gt;I agree to terms and conditions&lt;/code&gt; のチェックボックスにチェックを入れた状態で &lt;code&gt;Create Project&lt;/code&gt; ボタンをクリックすると &lt;code&gt;Your projects&lt;/code&gt; にプロジェクトが作成されます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1k7fhhEe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/355kzcz071elxip5tzwx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1k7fhhEe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/355kzcz071elxip5tzwx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;最後に、今回は WebAR を試すので、&lt;code&gt;Add web app&lt;/code&gt; をクリックし、任意の &lt;code&gt;App name&lt;/code&gt; と &lt;code&gt;Domain&lt;/code&gt; を入力します。ローカル環境で試す場合は &lt;code&gt;localhost&lt;/code&gt; と入力します。その後、&lt;code&gt;Create app&lt;/code&gt; をクリックすると重要な &lt;code&gt;App key&lt;/code&gt; が発行されます。&lt;/p&gt;

&lt;p&gt;ここで発行される &lt;code&gt;App Key&lt;/code&gt; は重要なので控えておいてください。&lt;/p&gt;
&lt;h3&gt;
  
  
  3. DeepAR Web SDK のダウンロード
&lt;/h3&gt;

&lt;p&gt;Downloads ページから DeepAR Web SDK をダウンロードします。記事公開の 2020-03-18 時点では &lt;code&gt;v1.4.6&lt;/code&gt; が最新でした。&lt;/p&gt;

&lt;p&gt;必要な JavaScript ライブラリを除いたサンプルは GitHub にも公開されています。こちらを使う場合は script の読み込みなど最低限の追記が必要です。&lt;/p&gt;

&lt;p&gt;DeepARSDK/quickstart-web-js&lt;br&gt;
&lt;a href="https://github.com/DeepARSDK/quickstart-web-js"&gt;https://github.com/DeepARSDK/quickstart-web-js&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  4. index.html の書き換えと表示
&lt;/h3&gt;

&lt;p&gt;141 行目付近の &lt;code&gt;licenseKey&lt;/code&gt; の &lt;code&gt;your_license_key_goes_here&lt;/code&gt; を 2. で作成した &lt;code&gt;App Key&lt;/code&gt; に差し替えます。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;deepAR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;DeepAR&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;canvasWidth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;canvasWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;canvasHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;canvasHeight&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;licenseKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_license_key_goes_here&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;その上でローカルサーバを立ち上げるとブラウザで確認できます。&lt;/p&gt;

&lt;p&gt;Python が動作する環境であれば、&lt;code&gt;黒い画面&lt;/code&gt; で &lt;code&gt;python server.py&lt;/code&gt; を叩いて &lt;a href="http://localhost:8888/"&gt;http://localhost:8888/&lt;/a&gt; にアクセスすれば OK です。&lt;/p&gt;

&lt;h4&gt;
  
  
  💡スマートフォンから確認したい
&lt;/h4&gt;

&lt;p&gt;一般的にスマートフォンから &lt;code&gt;http://localhost:8888/&lt;/code&gt; は表示できません。スマートフォンから確認したい場合は HTTPS 環境が用意されている Glitch や GitHub Pages を使うと良いでしょう。その場合は環境に合わせて &lt;code&gt;domain&lt;/code&gt; を書き換えて &lt;code&gt;App key&lt;/code&gt; を再発行する必要があります。現時点では &lt;code&gt;domain&lt;/code&gt; を編集できないようです。&lt;/p&gt;

&lt;h2&gt;
  
  
  フィルターの作り方
&lt;/h2&gt;

&lt;p&gt;本記事では詳細な使い方そのものには触れませんが、DeepAR で顔を認識した後に表示するフィルター全般は DeepAR Studio を使います。&lt;/p&gt;

&lt;p&gt;DeepAR Studio&lt;br&gt;
&lt;a href="https://help.deepar.ai/en/articles/3493100-deepar-studio"&gt;https://help.deepar.ai/en/articles/3493100-deepar-studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DeepAR のフィルターは FBX を読み込んだ後、編集したものを Export する形で作成します。リファレンスとなる FBX ファイルが用意されているので、まずはそれを使って試してみるのが良いでしょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DKYHpPDs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kng57oh4vcxqqsulh0xu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DKYHpPDs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kng57oh4vcxqqsulh0xu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;^ &lt;a href="https://help.deepar.ai/en/articles/3493102-reference-mask-model"&gt;Reference mask model&lt;/a&gt; の FBX を DeepAR Studio に &lt;code&gt;Import FBX&lt;/code&gt; した直後の様子&lt;/p&gt;

&lt;p&gt;この状態で &lt;code&gt;Export Model&lt;/code&gt; で出力した拡張子のないファイルを読み込ませると、Export したフィルターが表示されるようになります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--H_T0Fdt7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qih311vtbpg1q32m1vzr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--H_T0Fdt7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qih311vtbpg1q32m1vzr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Snapchat で言うところの Lens Studio あるいは instagram で言うところの Spark AR Studio と比べると、機能面ではまだまだ足りない部分がありますが、最低限必要になりそうなドキュメントは整備されているので、興味のある方はオリジナルフィルターを作ってみてください。&lt;/p&gt;

&lt;p&gt;また、私が見始めた頃にはなかったですが、最近公開された Free Filter Pack というページでは、フィルターとなる Export されたファイルと、その元となる FBX などのアセットをまとめてダウンロードできるので、これらを参考に手を加えてみるのも良いかもしれません。&lt;br&gt;
&lt;a href="https://help.deepar.ai/en/articles/3580432-free-filter-pack"&gt;https://help.deepar.ai/en/articles/3580432-free-filter-pack&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  DeepAR Asset Store という存在
&lt;/h3&gt;

&lt;p&gt;DeepAR には DeepAR Asset Store という自分のフィルターを販売できる場所が用意されています。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ik9zl9XY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i3fzjvno2glkbwg2f31z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ik9zl9XY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i3fzjvno2glkbwg2f31z.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ref. &lt;a href="https://www.store.deepar.ai/"&gt;https://www.store.deepar.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ここでは文字通り DeepAR 用のフィルターが「販売」されています。1つあたり £49.00 つまり ¥6,250 程度 ( 2020/03/18 時点のレート ) となかなかのお値段が設定されていますが、Free Filter Pack 同様に編集元となる FBX などのアセットも含まれているので、真似したいものがある場合などには適しているかもしれません。&lt;br&gt;
なお 2020/03/18 時点では自分自身が作成したフィルターを販売できる仕組みはありませんでした。&lt;/p&gt;

&lt;h2&gt;
  
  
  まとめ
&lt;/h2&gt;

&lt;p&gt;DeepAR という顔認識系アプリを実現するための SDK を紹介した上で「とりあえず動かしてみる」ところまでを説明しました。&lt;/p&gt;

&lt;p&gt;サンプルのままでは使いにくいかもしれませんが、例えばスタンプ機能やスクショ撮影などを組み込むことで、キャンペーンサイトでの利用などが出来るかもしれないと感じました。用途によっては一定のポテンシャルがあるのではないでしょうか！&lt;/p&gt;

&lt;p&gt;同じ商用 SDK でも 8th Wall Web と DeepAR では実現したいことが異なるため、比較するものではありませんが、こうして WebAR でもできる可能性が拡がっていくのは素敵なことだと感じています。&lt;/p&gt;

&lt;p&gt;現場からは以上です！&lt;/p&gt;

</description>
      <category>deepar</category>
      <category>webar</category>
      <category>webxr</category>
    </item>
  </channel>
</rss>
