study

htmlとjavascriptでARを作ってみた。(AR.js、a-frameを使用)

みなさん、こんにちは!
omurinです。

今回はhtmlとJavaScriptを使ってARを作成してみました。

ARとは拡張現実のことを示しており、現実世界にCGを出現させる技術のことです。AR技術を用いられている例としてポケモンGOなどがあります。

ARという技術を用いてARパンフレット的なものを作っていこうと思います。

開発する上で使用したもの

テキストエディタ:vscode
レンタルサーバー:ロリポップ
マーカー作成:AR.js Marker Training
パンフレット作成:photoshop
ブラウザ:(iPhoneはsafari,androidはedgeを推奨)

テキストエディタは自分の好きなやつを使ってもらっても構わないです。
テキストエディタが入っていないという人はvscodeをお勧めします。(ライブラリが豊富なため)

レンタルサーバーも必要です。
今回はマーカーを用いてARを作成するため、カメラのついたスマートフォンが必須となります。

スマートフォン(カメラ必須)のブラウザで実行するため、webホスティングサービス(lollipopなど)を利用することが必須となります。

パンフレットの作成にフォトショップを使用します。
パンフレット的なものが作れたらなんでもいいのですがおしゃれなものを作りたいならphotoshopがおすすめです。(adobe stockが便利すぎるため)

ブラウザを使用するのですがiPhoneの場合はsafari、androidの場合はedgeを使用してください。それ以外のブラウザでは動作しない場合があります。

必要なライブラリ

AR.js:マーカーの読み取り及びカメラを使用するために必要。
a-frame:ARを実現するためのCGの表示およびアニメーションを作成するのに必要。

マーカーを作成

マーカーを作成するためにAR.js Marker Trainingを使用します。

ARマーカーの作成手順

  1. UPLOADボタンをクリックして画像を選択
  2. DOWNLOAD MARKERをクリックしてファイル名.pattを作成(これがマーカーになります)
  3. DOWNLOAD IMAGEをクリックしてマーカー画像を作成

基本的な操作は以上になります。
そのほかの機能として画像の枠の調整できるPattern Ratioや画像サイズの調整
もしくは枠の色を変更することもできます。

パンフレットの作成

adobe stockから使えそうなパンフレット素材を手に入れます。
そこに先ほどAR.js Marker Trainingで作成したマーカー画像をパンフレットと合成させます。
adobe stockとphotoshopがあれば簡単にこのようなパンフレットを作ることができます。マーカー画像に設定したのはコーラ、ワイン、コーヒーの3つです。パンフレット作成は以上で終わりです。

使用したソースコード

<!DOCTYPE html>
<head>
  <!-- ① スクリプトの読み込み -->
  <script src="https://aframe.io/releases/0.8.2/aframe.min.js"></script>
  <script src="https://cdn.rawgit.com/jeromeetienne/AR.js/1.6.2/aframe/build/aframe-ar.js"></script>
</head>
<body style='margin: 0; overflow: hidden;'>

<!-- シーンの追加とデバックUIを非表示 -->
<a-scene embedded arjs="debugUIEnabled:false;">

  <!-- OBJ形式のCGモデルの読み込み -->
<a-assets>
  <a-asset-item id="obj" src="sentouki.obj"></a-asset-item>   <!-- objファイル -->
  <a-asset-item id="mtl" src="sentouki.mtl"></a-asset-item>   <!-- mtlファイル -->
</a-assets>

  <!-- ③ 作成したマーカーでのソース -->
  <a-marker type='pattern' url='./marker/pattern-coffee.patt'>
    <a-sphere scale=".25 .25 .25" position="0 .5 0" color="#f00">
      <a-animation attribute="position" to="0 1 0" direction="alternate" dur="2000" repeat="indefinite">
      </a-animation>
    </a-sphere>
  </a-marker>

  <!-- ③ 作成したマーカーでのソース -->
  <a-marker type='pattern' url='./marker/pattern-coke.patt'>
    <a-sphere scale=".30 .30 .30" position="0 .5 0" color="#00ffff">
      <a-animation attribute="position" to="0 1 0" direction="alternate" dur="2000" repeat="indefinite">
      </a-animation>
    </a-sphere>
  </a-marker>

  <a-marker type='pattern' url='./marker/pattern-wine.patt'>
    <a-obj-model
          src="#obj"
          mtl="#mtl"
          scale="0.01 0.01 0.01"
          position="0 0 0">
          <a-animation
            attribute="rotation"
            to="0 360 0"
            dur="3000"
            easing="linear"
            repeat="indefinite">
          </a-animation>
        </a-obj-model>
  </a-marker>

  <!-- ③ 作成したマーカーでのソース -->
  <a-marker type='pattern' url='./marker/pattern-a.patt'>
    <a-sphere scale=".25 .25 .25" position="0 .5 0" color="#f00">
      <a-animation attribute="position" to="0 0 0" direction="alternate" dur="2000" repeat="indefinite">
      </a-animation>
    </a-sphere>
  </a-marker>

  <!-- ③ 作成したマーカーでのソース -->
  <a-marker type='pattern' url='./marker/pattern-b.patt'>
    <a-sphere scale=".25 .25 .25" position="0 .5 0" color="#f00">
      <a-animation attribute="position" to="0 0 0" direction="alternate" dur="2000" repeat="indefinite">
      </a-animation>
    </a-sphere>
  </a-marker>

  <a-entity camera></a-entity>
</a-scene>
</body>
</html>

 

ソースコードはそんなに難しくないので詳しい説明は省略します。
注意する点としてはファイルの位置関係です。

先ほど紹介したソースコードがindex.htmlファイルです。同じディレクトリの中にsentouki.obj、sentouki.mtlとmarkerフォルダを用意します。
markerフォルダの中にはAR.js Marker Trainingで作成したpattファイルを入れてください。以上で完成となります。

あとはwebサーバー上にアップロードするだけです。omurinはレンタルサーバー(lolipop)を使用し、FTPファイルアプリのFileZillaを使用しました。

実際に遊んでみよう

実際にiPhoneを利用した写真がこちらです。


実際には真ん中の戦闘機が動いています。
試してみたい人は
ブラウザでhttps://biginning.jp/ar/index.htmlで検索するもしくはこちらをクリックして、パンフレット画像を見てください!