AR (Augmented Reality)とDR (Diminished Reality)

最近、UnityのAR Foundation経由でiOSのARKit 3遊びをしていますが、



昨年、書店で「ARの教科書」を立ち読みして、思いの外しっかりした内容だったので購入したのでした。

ARの教科書

https://book.mynavi.jp/ec/products/detail/id=91748

随分ストレートなタイトルなので、世に沢山あるようなプログラミングの入門書みたいなものかと思ったら、割とアカデミックな洋書の翻訳本なんですね。
原著は2016年に出版された”Augmented Reality: Principles and Practice“で、2人の著者はどちらもARを研究する大学教授だ。

書籍のサポートサイトもある↓
https://sites.google.com/view/ar-textbook/

チュートリアル動画↓





xR Tech Tokyoで輪講会もあったね。
https://www.godis1st.net/2018/12/ar.html


スポンサーリンク


本書の冒頭で書かれている通り、ARは複数の研究分野(主にCGとCV)が複合的に絡み合って発展したため、ARの文脈で理論と実装をバランス良く体系的にまとめた教科書的な書物が長らく存在しなかった。
実装面において、ARは既存の技術分野を横断した開発知識が必要だが、その一方でAR体験を設計するには人間の知覚についても理解が必要だ。
未来を見据えた理想的なビジョンを描くのも大事だが、優れたAR体験を実装するには、今現在の技術的制約と人間の知覚特性のバランスを取って体験を設計(モデル化)できなければならない。

本書の原題にある”Principles and Practice“は日本語で言うと「原理と実践」ということで、まずARという概念の定義、感覚を提示する手段(ディスプレイ)について視覚に限らず音声、触覚、嗅覚・味覚なども紹介した後、最も盛んに実装されている視覚系のARを実現するための画像認識、コンピューターグラフィックスの技術、アプリケーション設計について概観できる構成になっている。

ARのための画像認識

単眼カメラで撮影した2D画像から3Dの情報を得る理屈はこういう分野↓



思えば、ARという言葉が一般に浸透してだいぶ経つ。
ARToolKit全盛の時代はデフォルトのARマーカー「Hiro」をよく見かけた。ARマーカー独特の意匠がARというジャンルのシンボルマーク、アフォーダンスとして機能していた時代があった。

現在この手の矩形マーカーはARコンテンツ向けというより、カメラ画像からの堅牢な位置測位・トラッキングのための手段として定着した気がする。
ArUco:OpenCVベースのコンパクトなARライブラリ
最近、ARToolKit以外にもっとコンパクトなARライブラリがないか調べてる。ARアプリを作りたいわけじゃなくて、アプリケーション開発の部品として、単眼カメラによるマーカー認識で3次元座標を取得する機能が欲しいだけなので、あんまりゴテゴ...


ハリウッド映画のメイキングで、俳優の演技をキャプチャするためのスーツにマーカーがたくさん貼り付けられている。
映画『ミュータント・タートルズ』を観てきた
ガメラからの亀つながりというわけではないけど、実写版のミュータント・タートルズをIMAX3Dで観てきた。「実写版」と言っても、過去に着ぐるみで撮られた実写映画が3作もある。今回のは「CGで実写化したやつ」とでも呼ぶべきか。2007年...


一目でマーカーだと分かる矩形のARマーカーに対して、その後明示的なマーカーを使わずに自然特徴量だけで位置測位・トラッキングを行う手法も登場した。(これがマーカーレスと呼ばれることもある)

スマートフォンの時代になり、ここ最近はカメラ位置のトラッキングに撮影画像だけでなくスマホのモーションセンサーも併用するVIO(visual-inertial odometry)で実用面も一応一段落した感じ。(あくまでエンタメ用途のARでは)

追記:ARの歴史についてはこちらの記事が詳しい↓
https://note.com/hato_fun/n/n4ca0e20000cb

Occlusion

今ARの実装でホットな技術課題はOcclusionのようだ。現実のオブジェクトよりも後ろにあるCGオブジェクトは遮蔽されるはず。この現実のオブジェクトとCGオブジェクト表示の前後関係の矛盾をどう解決するか。
アプローチとしては、単眼カメラ動画からDepth Mapを推定したり、もっと大雑把に前後フレームの視差から物体の境界書き割りを推定したり、あるいはSemantic Segmentationで特定の物体についての境界を推定したり。
ここでも機械学習ベースの手法が盛んに研究されている。

Siggraph Asia 2018では、同じセッションでFacebookとGoogleが別々のアプローチでARのOcclusion問題を解決する手法を発表していた。

Facebook

Facebookの研究の方はソースコードも含めてネットで無料公開されている↓
https://homes.cs.washington.edu/~holynski/publications/occlusion/index.html
https://github.com/facebookresearch/AR-Depth



スポンサーリンク

Google

GoogleはAndroidのARCoreに実装してくれてる↓
https://developers.googleblog.com/2019/12/blending-realities-with-arcore-depth-api.html


Niantic

ポケモンGOの開発元で知られるNianticもOcclusion問題に取り組んでいる。
https://nianticlabs.com/ja/blog/nianticrealworldplatform/



Niantic LabsとしてDepth推定の論文を発表し、ソースコードも公開している↓
https://arxiv.org/abs/1806.01260
https://github.com/nianticlabs/monodepth2


PoepleOcclusion

オイラが最近遊んでいるiOSのARKit3では、人物領域をSegmentationすることで現実空間の人とCGオブジェクトの重なりを解決するもの。

オイラもこの記事を参考にPoepleOcclusionを試してみた↓



顔が判別できるほど大きく写っている人物に対してはちゃんとSegmentationがかかる。ARで問題となるのは特に手前の物体によるOcclusionなので、これで十分。要件の落としどころが上手い。

DR (Diminished Reality)

現実空間に架空のオブジェクトなどを配置するAR: Augmented Reality(拡張現実感)に対して、オイラが個人的に注目しているのは、現実空間からオブジェクトを消して見せるDR: Diminished Reality(隠消現実感、減損現実感)と呼ばれる概念。

ARが情報の足し算だとすると、DRは情報の引き算と言える。

その概念を初めて知ったのは2015年のSSIIだった↓



あれから数年経って、面白い実装例が増えてきた↓



http://harrischris.com/article/biophillic-vision-experiment-1

Deep Learningで特定の物体領域を検出する精度が上がったから、次の課題はその領域をどうやって加工するかだ。



ARKit 3のPeopleOcclusionはDRの実装にも利用できるね↓




https://wired.jp/2019/08/03/leapmotion-blog/



https://nlab.itmedia.co.jp/nl/articles/2105/28/news131.html


スポンサーリンク

関連記事

ZBrushで手首のモデリングをリファイン
ZBrushで仮面ライダー3号を造る 仮面編 DynaMesh
SSII 2014 デモンストレーションセッションのダイジェスト動画
映画『ドラゴンボール超 ブロリー』を観た (ややネタバレ)
レンダラ制作はOpenGL とか DirectX を使わなくてもできるんだぜ
シフトカーを改造してラジコン化する人達
Leap MotionでMaya上のオブジェクトを操作できるプラグイン
続・ディープラーニングの資料
ガメラ生誕50周年
JavaによるCGプログラミング入門サイト (日本語)
2015年10月21日
ゴジラ三昧
マイケル・ベイの動画の感覚
この連休でZBrushの スキルアップを…
Mayaのシェーディングノードの区分
Oculus Goを購入!
WebGL開発に関する情報が充実してきている
Blender 2.81でIntel Open Image Denoiseを使う
ZBrushでアヴァン・ガメラを作ってみる
PythonでMayaのShapeノードプラグインを作る
ZBrushのZmodelerとDynamic Subdivisionを学ぶ
ガワコス
Adobeの手振れ補正機能『ワープスタビライザー』の秘密
Windows Server 2008にAutodesk Maya 2009をインストール
PGGAN:段階的に解像度を上げて学習を進めるGAN
物理ベースレンダリングのためのマテリアル設定チートシート
OpenCV 3.1とopencv_contribモジュールをVisual Studio 2015で...
BSDF: (Bidirectional scattering distribution funct...
『電光超人グリッドマン』のBlu-ray BOXが12月20日発売予定
機械学習のオープンソースソフトウェアフォーラム『mloss(machine learning ope...
ベイズ推定とグラフィカルモデル
KelpNet:C#で使える可読性重視のディープラーニングライブラリ
Unityをレンダラとして活用する
CGAN (Conditional GAN):条件付き敵対的生成ネットワーク
OpenMesh:オープンソースの3Dメッシュデータライブラリ
単純に遊びに行くのはだめなのか?
タイミングとクオリティ
OpenCVで動画の手ぶれ補正
Unity ARKitプラグインサンプルのチュートリアルを読む
OpenGVの用語
Web経由でRaspberry PiのGPIOを操作したい
マジョーラ

コメント