ARCoreプラットフォームは、Android向け拡張現実のためのGoogleのソリューションであり、スマートフォンのカメラと慣性センサーを使用して空間内の位置を追跡します。Google AR Developers, 2025によると、このプラットフォームはMotion Tracking、Environmental Understanding、Light Estimationの3つの基本技術をサポートしており、現実環境に仮想オブジェクトを配置します。クロスプラットフォームアーキテクチャにより、開発者は統一されたコードベースでAndroid、iOS、Unity、Unreal Engine向けのARアプリを作成できます。
重要なポイント
ARCoreはGoogleの拡張現実プラットフォームで、2018年にProject Tangoの後継として、より軽量でアクセスしやすい形式で発表されました。専用の深度センサーを必要としたTangoとは異なり、ARCoreはカメラと慣性センサー(IMU)のみを使用して標準的なAndroidスマートフォンで動作します。
ARCoreは3つの主要技術を使用します:Motion Tracking(デバイスの位置追跡)、Environmental Understanding(水平面と垂直面の検出)、Light Estimation(仮想オブジェクトの照明を実際の環境に合わせて調整)。これら3つの技術により、あらゆる表面に自然に見えるARオブジェクトを配置できます。
Google I/O 2024によると、ARCoreはSamsung、Xiaomi、Huawei、OnePlus、Google Pixelなどを含む10億台以上のAndroidデバイスでサポートされています。このプラットフォームはGoogle Play Services for ARと統合されており、Androidバージョンに関係なくGoogle Play Store経由でARCoreを更新できます。
6つのバージョンを経て、ARCoreは大きな進化を遂げました:ARCore 1.0 — 基本的な追跡と平面検出;ARCore 1.2 — 垂直面とAugmented Images;ARCore 1.7 — マルチプレイヤーセッション用のCloud Anchors;ARCore 1.10 — 表情追跡用のAugmented Faces。
ARCore 1.20+にはScene Semantic Understandingが含まれています — デバイス上のTensorFlow Lite MLモデルによるオブジェクトカテゴリ(床、天井、壁、家具、植物、ドア)の認識。Street View Geometry APIは、屋外のARナビゲーションにGoogle Street Viewの深度マップを使用することを可能にします。
// ARCoreセッションの初期化
val session = Session(context)
val config = Config(session)
config.lightEstimationMode =
Config.LightEstimationMode.ENVIRONMENTAL_HDR
config.planeFindingMode =
Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
session.configure(config)
// フレーム処理
val frame = session.update()
val pointCloud = frame.acquirePointCloud()
val planes = session.getAllTrackables(
Plane::class.java
)
ARCoreはハイブリッドアプローチを使用します:IMU(慣性計測ユニット)は高周波数(最大1000 Hz)でデバイスの位置を予測し、視覚オドメトリは30~60 Hzでカメラの特徴点分析に基づいて誤差を補正します。このアプローチにより、静止状態で約1~2センチメートルの追跡精度を提供します。
Environmental Understandingプロセスは3段階で機能します:まずARCoreがカメラ画像の特徴点を見つけ、次に同じ平面上にある点のクラスターを特定して多角形に近似します。平面認識後、ARCoreは新しいフレームが受信されるたびに更新されるTrackableオブジェクトを作成します。
Googleによると、ARCoreはカメラから最大1メートルの距離で10x10センチメートルの平面を検出します。中程度の部屋(20㎡)の場合、完全な平面スキャンには約2~4秒かかります。ToFセンサーサポート付きのDepth APIを使用すると、認識精度が40%向上します。
Depth APIは、カメラ画像のステレオ分析に基づいてシーンの深度マップを構築するARCore技術です。ToFセンサー(Time-of-Flight)搭載デバイスでは、深度マップが最大2cmの精度で即座に取得されます。深度センサーのないデバイスでは、Depth APIは機械学習を使用して単一フレームから深度を推定し、約10cmの精度を提供します。
Scene Meshは、ARCoreがリアルタイムで構築する環境の3次元メッシュです。メッシュは衝突物理、仮想オブジェクトの遮蔽、影のレンダリングに使用されます。Scene MeshはOpenGL ES 3.1とDepth API対応デバイスで利用可能で、1フレームあたり最大50万ポリゴンを生成します。
// 深度マップの取得
val depthImage = frame.acquireDepthImage16Bits()
// 検出された平面上にオブジェクトを配置
val hitResult = frame.hitTest(x, y)
.firstOrNull { it.trackable is Plane }
hitResult?.let { result ->
val anchor = session.createAnchor(
result.hitPose
)
val model = ModelRenderable.builder()
.setSourceId(R.raw.my_model)
.build()
.exceptionally { null }
AnchorNode(anchor).apply {
this.renderable = model.get()
}
}
ARCoreとARKitは同じタスク(位置追跡、平面検出、照明推定)を解決しますが、そのアプローチとエコシステムは異なります。ARCoreはクロスプラットフォームの互換性を優先する一方、ARKitはAppleのハードウェアとの深い統合を利用します。
主な違い:ARCoreはARCore SDKを介してAndroidとiOSで動作しますが、ARKitはiOSのみで動作します。ARCoreはFirebaseを介した同期にCloud Anchorsを使用しますが、ARKitはデバイス間の直接交換にARWorldMapを使用します。Depth APIを搭載したARCoreはToFセンサーをサポートし、LiDARを搭載したARKitは最大3cmの精度でレーザースキャンを提供します。
Google 2024のベンチマークテストによると、ジャイロスコープとToFセンサー搭載デバイスでのARCoreの追跡精度は、LiDAR搭載iPhoneでのARKitと同等で、2メートルの距離で誤差は2cmを超えません。ToFなしのデバイスでは、ARCoreは初期化速度でARKitに劣ります:3秒対0.5秒。
ARCoreとARKitの選択はターゲットオーディエンスによって異なります:アプリがiOS専用の場合、ARKitはより良いパフォーマンスと排他的なLiDAR機能へのアクセスを提供します。クロスプラットフォームのサポートが必要な場合、ArcoreiOS SDKを備えたARCoreは、各プラットフォームのハードウェア固有機能の一部を犠牲にしながらも、最小限のプラットフォーム差異で統一されたコードベースを使用できます。
| 特徴 | ARCore | ARKit |
|---|---|---|
| プラットフォーム | Android + iOS + Unity/Unreal | iOSのみ |
| 深度センサー | ToF(オプション) | LiDAR(Proモデル) |
| 同期 | Cloud Anchors(Firebase) | ARWorldMap(Multipeer) |
| 顔追跡 | Augmented Faces | Face Tracking(TrueDepth) |
| VIO精度 | 1~3cm | 0.5~1cm |
ARCoreの統合は、build.gradleにGoogle Play Services for ARの依存関係を追加することから始まります:com.google.ar:core。アプリはArCoreApk.checkAvailability()を使用してデバイス上のARCoreの可用性を確認する必要があります — ARCoreがインストールされていない場合は、Google Play Storeからインストールするようユーザーに促します。
基本的なARCoreプロジェクトには以下が含まれます:SessionとConfigの作成、カメラ表示用のSurfaceViewの設定、session.resume()によるセッションの開始、session.update()によるフレームの処理。3DオブジェクトのレンダリングにはSceneform SDK(FilamentベースのGoogleライブラリ)または複雑なシーンにはUnity/Unrealを使用します。
GoogleはKotlinアプリにSceneformを推奨しています — 3Dモデル(OBJ、glTF、FBX)をロードするModelRenderable、ARシーンにAndroid Viewを埋め込むViewRenderable、タッチ処理用のMotionEventなど、すぐに使えるコンポーネントを提供します。SceneformはARセッションのライフサイクルとリソース解放を自動的に管理します。
ARCoreは照明不足、均一な表面、またはデバイスの急速な動きによってトラッキングを失うことがあります。トラッキング状態はframe.getTrackingState()で確認できます — 値はTRACKING、PAUSED、STOPPEDです。PAUSEDに移行する際は、レンダリングを一時停止し、ユーザーにガイダンスを表示することをお勧めします:「デバイスをよりゆっくり動かしてください」または「より明るい場所に移動してください」。
障害後の自動復旧のために、ARCoreは保存された特徴点マップに基づく再位置特定をサポートしています。開発者はsession.serialize()でマップを保存し、session.deserialize()で復元できます — ユーザーが同じ物理空間に戻る長時間実行のAR体験に便利です。環境が大きく変わっていなければ、マップの復元には1~2秒かかります。
class ARCoreActivity : AppCompatActivity() {
private lateinit var session: Session
override fun onResume() {
super.onResume()
when (ArCoreApk.getInstance()
.checkAvailability(this)
) {
ArCoreApk.Availability.SUPPORTED_INSTALLED -> {
session = Session(this)
session.resume()
}
else -> {
showInstallPrompt()
}
}
}
}
よくある質問
ARCoreはGoogle Pixel 2+、Samsung Galaxy S7+、Xiaomi Mi 8+、Huawei P20+、OnePlus 6+、Sony Xperia XZ2+などを含む10億台以上のAndroidデバイスでサポートされています。認定デバイスの完全なリストはdevelopers.google.com/ar/devicesで公開されています。
ARCoreの基本機能 — Motion TrackingとEnvironmental Understanding — はインターネットを必要としません。Cloud Anchorsとクラウド参照付きのAugmented Imagesは接続が必要です。Depth APIとScene Meshはネットワーク接続なしでデバイス上で完全に動作します。
はい、ARCoreはOpenGL ES 3.1、Unity、Unreal Engineと直接使用できます。SceneformはシンプルなKotlinプロジェクトに推奨されるオプションですが、必須ではありません。現実的な物理演算を伴う複雑な3Dシーンには、ARCore SDKをサポートするゲームエンジンを使用することをお勧めします。
ARCoreは十分な照明(100~500ルクス)がある屋内空間に最適化されています。明るい日光の下では、カメラの露出オーバーにより追跡精度が低下する可能性があります。屋外での使用には、Googleは都市部の深度マップを提供するStreet View Geometry APIを推奨しています。
Scene Viewerは、コードを書かずにARで3Dモデルを表示するためのGoogleの既製UIコンポーネントで、WebXRを介して動作します。ARCoreは、セッション、トラッキング、レンダリングのすべての側面をプログラムで制御できるカスタムAR体験を作成するためのフル機能のSDKです。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。