Merged Reality
複合現実の同義語であるマージドリアリティは、現実世界のライブ映像に、現実の形状、奥行き、オクルージョンを反映する仮想オブジェクトを重ね合わせます。
マージドリアリティは複合現実(MR)の同義語です。仮想オブジェクトがユーザーの実環境内に現れ、実際のテーブルの上に置かれたり、実在する人の後ろに隠れたり、実際の壁に跳ね返ったりして、環境と相互作用する体験を指します。Intelは2016年、Project Alloyとともにこの名称を導入しました。Project Alloyは、RealSense深度カメラによってユーザーの手や部屋を仮想体験に取り込む、ケーブル不要のヘッドセット試作機でした。この考え方自体は以前からあります。Paul MilgramとFumio Kishinoは1994年、複合現実ディスプレイの分類において、現実環境と仮想環境を現実・仮想連続体の両端に置き、その間にあるすべてを複合現実と呼びました。マージドリアリティと単純なオーバーレイを分けるのは環境の理解であり、あらゆる面や人の位置を把握するためにコンピュータービジョンと空間コンピューティングに依存します。
マージドリアリティ、AR、VRの違い#
- 拡張現実(AR)は、スマートフォン画面上のテキストラベルからメガネ内の3Dモデルまで、現実世界の映像にデジタルコンテンツを追加します。複合現実は、コンテンツが現実のシーンに位置合わせされ、シーンと相互作用するARであり、実際には両方の用語が広く重複して使われています。
- 仮想現実(VR)は現実世界を完全に置き換えます。Project Alloyが目指した連続体の一方である拡張仮想は、仮想世界を基盤とし、ユーザーの手などの現実の要素を取り込みます。
- 拡張現実(XR)はAR、MR、VRを包括する用語です。
ヘッドセットが現実世界を取り込む方法は2つあります。Microsoft HoloLens 2などの光学シースルー機器は、透明ディスプレイを通してユーザーの直接視界に光を追加するため、仮想オブジェクトを背景より暗く表示できません。Meta Quest 3やApple Vision Proなどのビデオパススルー機器は、外向きのカメラで部屋を撮影し、不透明なディスプレイに合成結果を表示します。そのため現実のオブジェクトで仮想オブジェクトを完全に隠せますが、カメラの遅延が発生します。
マージドリアリティの仕組み#
現在のヘッドセットでは毎秒72~120フレームを表示し、各フレームでデバイスの姿勢、シーンのモデル、レンダリングされた仮想コンテンツを組み合わせます。そのため、知覚モデルはヘッドセット内のエッジAIプロセッサー上でリアルタイム推論を行う必要があります。Visual SLAMがヘッドセットを追跡し、深度センサーまたは深度推定で実際の各面までの距離を測定して部屋の3D再構成を行います。セマンティックセグメンテーションは床、壁、テーブルにラベルを付け、物体検出は家具や人を見つけ、姿勢推定はジェスチャー用の手のキーポイントを追跡します。オクルージョンは、失敗したときにユーザーが最も気づく処理です。カメラに近い人の前に仮想オブジェクトが浮かぶと、錯覚はすぐに崩れます。AppleのARKitは2019年から、オクルージョン処理のために人をセグメンテーションしています。
セグメンテーションマスクを使うと、オクルージョンを簡単に表現できます。この例では、UltralyticsのYOLO26インスタンスセグメンテーションモデルで街路の写真から人を検出し、人々とバスの間に配置した仮想パネルの前面に、その人々のピクセルを表示します。
import cv2
import numpy as np
from ultralytics import YOLO
model = YOLO("yolo26n-seg.pt")
result = model("https://ultralytics.com/images/bus.jpg")[0]
camera = result.orig_img
# 仮想オブジェクトをレンダリングします。人々とバスの間に立つ緑色のパネル
virtual = camera.copy()
cv2.rectangle(virtual, (50, 450), (760, 650), (0, 200, 0), thickness=-1)
# 人々はパネルよりカメラに近いため、そのピクセルでパネルを隠す必要があります
occluder = np.zeros(camera.shape[:2], np.uint8)
for cls, polygon in zip(result.boxes.cls, result.masks.xy):
if result.names[int(cls)] == "person":
cv2.fillPoly(occluder, [polygon.astype(np.int32)], 255)
merged = np.where(occluder[..., None] > 0, camera, virtual)
cv2.imwrite("merged_reality.jpg", merged)保存された画像では、パネルはバスを覆う一方、検出された歩行者の後ろに隠れます。人物のマスクがある領域では、カメラのピクセルが優先されるためです。実運用システムでは、メトリック深度を使って同じ判定をピクセル単位で行います。これにより、クラス一覧では網羅できないテーブル、壁などの表面にも対応できます。
実際のアプリケーション#
- 産業向けトレーニングと保守: 技術者は、目の前の機械に固定された手順、トルク値、リモート専門家の注釈を確認できます。また、研修生は実際の作業場に配置された仮想設備を使って手順を練習できます。
- 設計と建築: チームは実際の部屋で実物大の仮想自動車内装や建物モデルを確認し、その周囲を歩きながら物理的な部品と比較できます。
- ゲーム: Quest 3の複合現実ゲームはプレイヤーの部屋をスキャンし、仮想キャラクターが現実の壁から現れたり、ボールが実際の家具に跳ね返ったりするようにします。
- 手術: 2019年に米国食品医薬品局の認可を受けたAugmedicsのxvision Spine Systemは、脊椎手術中、患者のCT画像に基づく解剖図と計画したスクリューの軌道を外科医のヘッドセットに重ねて表示します。










