[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
@@ -2,91 +2,227 @@
id: wiki-2026-0508-mobile-augmented-reality
title: Mobile Augmented Reality
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: [P-Reinforce-AUTO-MOAR-001]
aliases: [Mobile AR, Smartphone AR]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
tags: [auto-reinforced, mobile-ar, augmented-reality, mobile-computing, cv, mobile-interaction]
confidence_score: 0.9
verification_status: applied
tags: [ar, mobile, computer-vision, 3d]
raw_sources: []
last_reinforced: 2026-04-20
last_reinforced: 2026-05-10
github_commit: pending
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
language: Swift / Kotlin / C#
framework: ARKit 7 / ARCore / Unity AR Foundation
---
# [[Mobile-Augmented-Reality|Mobile-Augmented-Reality]]
# Mobile Augmented Reality
## 📌 한 줄 통찰 (The Karpathy Summary)
> "손바닥 위에서 겹쳐지는 두 세계: 스마트폰의 카메라와 센서를 이용해 내 방 바닥에 가상 가구를 놓아보거나 길거리에 포켓몬을 소환하듯, 실시간 정보와 가상 객체를 물리적 현실 위에 정밀하게 덧씌우는 이동형 혼합 현실."
## 한 줄
> **"매 스마트폰 매 camera 매 real-time 3D 매 합성 — 매 SLAM 기반 device-pose tracking + plane detection + lighting estimation"**. Apple ARKit (2017), Google ARCore (2018) 매 starting point, 매 2026 매 ARKit 7 + ARCore 1.45 + Unity AR Foundation 6 매 unified API, 매 LiDAR/depth sensor 매 mesh reconstruction 매 standard.
## 📖 구조화된 지식 (Synthesized Content)
모바일 증강 현실(MAR)은 모바일 기기를 통해 현실 세계에 디지털 정보를 증강하여 보여주는 기술입니다.
## 매 핵심
1. **3대 핵심 기술**:
* **Tracking**: 카메라와 관성 센서(IMU)를 이용해 기기의 위치와 방향을 파악. (SLAM 기술)
* **Scene Understanding**: 평면, 조명, 사물을 인식하여 가상 객체가 현실과 이질감 없이 섞이게 함. ([[Computer Vision|Computer Vision]]와 연결)
* **Rendering**: 초당 60프레임 이상의 속도로 가상 객체를 실제 화면에 그려냄.
2. **왜 중요한가?**:
* 정보를 찾기 위해 화면 속으로 들어가는 대신, 정보가 우리가 사는 현실 하드웨어 위로 직접 나타나게 함으로써 소통 방식(HCI)을 혁신함. ([[HCI (Human-Computer Interaction)|HCI (Human-Computer Interaction)]]와 연결)
### 매 핵심 capabilities
- **6DoF tracking**: 매 device pose (position + rotation) 매 visual-inertial SLAM.
- **Plane detection**: 매 horizontal/vertical plane 매 detect.
- **Hit testing**: 매 screen ray 매 world surface 매 intersection.
- **Lighting estimation**: 매 ambient light + spherical harmonics + shadow.
- **Anchors**: 매 world coordinate 매 stable point 매 attach virtual object.
- **People occlusion**: 매 ML-based segmentation 매 사람 뒤 / 앞 렌더링.
- **Depth API**: 매 LiDAR (iPhone Pro) / ToF (Android) / monocular (ML).
- **Cloud anchors / Persistent anchors**: 매 multi-device + multi-session 공유.
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌**: 과거에는 마커(Marker)가 있어야만 가능했던 '마커 기반 정책'이었으나, 현대 정책은 공간 자체를 즉석에서 스캔하는 '마커리스(Markerless) 정책'으로 진화함(RL Update).
- **정책 변화(RL Update)**: 스마트폰 화면을 통해 보는 단계를 넘어, 가벼운 안경(AR Glasses) 형태의 모바일 기기 정책으로 하드웨어가 전이되며 '항상 켜져 있는 AR(Always-on AR) 정책' 시대로 진입 중임. ([[Hardware|Hardware]]와 연결)
### 매 platforms
- **ARKit 7** (iOS 19): RoomPlan, Object Capture (photogrammetry), Geo Anchors, Vision Pro bridge.
- **ARCore 1.45** (Android): Geospatial API (Streetscape Geometry), Depth API, Cloud Anchors.
- **Unity AR Foundation 6**: cross-platform abstraction over ARKit/ARCore.
- **Unreal AR**: Niagara particles + Lumen — 매 high-fidelity preferred.
- **WebXR Device API**: browser-based AR (Chrome Android, Quest browser).
## 🔗 지식 연결 (Graph)
- [[Computer Vision|Computer Vision]], [[HCI (Human-Computer Interaction)|HCI (Human-Computer Interaction)]], [[Internet of Things (IoT)|Internet of Things (IoT)]], [[Hardware|Hardware]], User Experience (UX)
- **Modern Tech/Tools**: ARKit (Apple), ARCore (Google), [[Unity|Unity]] (Vuforia), Pokémon GO.
---
### 매 응용
1. IKEA Place — furniture preview in room.
2. Snapchat Lenses — face/world filters.
3. Pokémon GO — geo-anchored creatures.
4. Google Maps Live View — walking AR navigation.
5. Industrial maintenance overlays.
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
## 💻 패턴
**언제 이 지식을 쓰는가:**
- *(TODO)*
### ARKit RealityKit (Swift)
```swift
import ARKit
import RealityKit
**언제 쓰면 안 되는가:**
- *(TODO)*
class ARController: NSObject, ARSessionDelegate {
let arView = ARView(frame: .zero)
## 🧪 검증 상태 (Validation)
func start() {
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal, .vertical]
config.environmentTexturing = .automatic
if ARWorldTrackingConfiguration.supportsFrameSemantics(.sceneDepth) {
config.frameSemantics.insert(.sceneDepth) // LiDAR
}
arView.session.run(config)
arView.session.delegate = self
}
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
func placeBox(at screenPoint: CGPoint) {
guard let result = arView.raycast(from: screenPoint,
allowing: .estimatedPlane,
alignment: .horizontal).first else { return }
let anchor = AnchorEntity(world: result.worldTransform)
let box = ModelEntity(mesh: .generateBox(size: 0.1),
materials: [SimpleMaterial(color: .red, isMetallic: false)])
anchor.addChild(box)
arView.scene.addAnchor(anchor)
}
}
```
## 🤔 의사결정 기준 (Decision Criteria)
### ARCore (Kotlin)
```kotlin
class ArSceneView(context: Context) : GLSurfaceView(context) {
private lateinit var session: Session
**선택 A를 써야 할 때:**
- *(TODO)*
fun init(activity: Activity) {
session = Session(activity)
val config = Config(session).apply {
planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
lightEstimationMode = Config.LightEstimationMode.ENVIRONMENTAL_HDR
depthMode = if (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC))
Config.DepthMode.AUTOMATIC else Config.DepthMode.DISABLED
}
session.configure(config)
}
**선택 B를 써야 할 때:**
- *(TODO)*
fun onTap(x: Float, y: Float) {
val frame = session.update()
for (hit in frame.hitTest(x, y)) {
val trackable = hit.trackable
if (trackable is Plane && trackable.isPoseInPolygon(hit.hitPose)) {
val anchor = hit.createAnchor()
placeModel(anchor)
return
}
}
}
}
```
**기본값:**
> *(TODO)*
### Unity AR Foundation (C#)
```csharp
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
## ❌ 안티패턴 (Anti-Patterns)
public class PlaceObject : MonoBehaviour {
public ARRaycastManager raycaster;
public GameObject prefab;
static List<ARRaycastHit> hits = new();
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
void Update() {
if (Input.touchCount == 0) return;
var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began) return;
if (raycaster.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon)) {
var pose = hits[0].pose;
Instantiate(prefab, pose.position, pose.rotation);
}
}
}
```
### People occlusion (ARKit)
```swift
config.frameSemantics.insert(.personSegmentationWithDepth)
arView.environment.background = .cameraFeed()
arView.renderOptions.remove(.disablePersonOcclusion)
```
### Geospatial anchor (ARCore)
```kotlin
val earth = session.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) return
val anchor = earth.createAnchor(
37.7749, -122.4194, // lat/lng
altitude,
0f, 0f, 0f, 1f // quaternion
)
```
### WebXR (browser AR)
```js
const session = await navigator.xr.requestSession('immersive-ar', {
requiredFeatures: ['hit-test', 'local'],
})
const refSpace = await session.requestReferenceSpace('local')
const viewerSpace = await session.requestReferenceSpace('viewer')
const hitSource = await session.requestHitTestSource({ space: viewerSpace })
session.requestAnimationFrame(function onFrame(t, frame) {
const hits = frame.getHitTestResults(hitSource)
if (hits.length > 0) {
const pose = hits[0].getPose(refSpace)
placeReticle(pose.transform.matrix)
}
session.requestAnimationFrame(onFrame)
})
```
### Mesh reconstruction (LiDAR)
```swift
config.sceneReconstruction = .meshWithClassification
// ARMeshAnchor frame update
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
for case let mesh as ARMeshAnchor in anchors {
addMeshToScene(mesh)
}
}
```
## 매 결정 기준
| 상황 | Approach |
|---|---|
| iOS-only, 매 native UX | ARKit + RealityKit |
| Android-only | ARCore + Sceneform-EQR / Filament |
| Cross-platform iOS+Android | Unity AR Foundation |
| Web/no-install | WebXR (Chrome Android only currently) |
| High-fidelity / game | Unreal AR |
| Geo-anchored content | ARCore Geospatial / ARKit Location Anchors |
| Indoor mapping | ARKit RoomPlan / ARCore Streetscape |
| Multi-user shared session | Cloud Anchors (ARCore) / SharePlay (ARKit) |
**기본값**: 매 cross-platform 매 Unity AR Foundation, 매 native 매 ARKit/ARCore 직접.
## 🔗 Graph
- 부모: [[Augmented-Reality]] · [[Computer-Vision]]
- 변형: [[ARKit]] · [[ARCore]] · [[WebXR]] · [[Unity-AR-Foundation]]
- 응용: [[Geospatial-AR]] · [[Face-Tracking]] · [[Object-Capture]]
- Adjacent: [[SLAM]] · [[OpenGL ES]] · [[Metal]] · [[Vulkan]] · [[Vision-Pro]]
## 🤖 LLM 활용
**언제**: 매 mobile AR feature 설계, 매 ARKit/ARCore 선택, 매 placement/occlusion/lighting 매 implementation.
**언제 X**: 매 desktop VR/AR (different platforms), 매 marker-based AR only (legacy — Vuforia 같은 different stack).
## ❌ 안티패턴
- **첫 frame 매 immediate placement**: 매 tracking 매 not-converged — 매 plane detection 매 wait.
- **매 anchor 매 world origin attach**: 매 drift 누적 — 매 surface anchor 매 use.
- **무한 occlusion 활성화 매 mid-tier device**: 매 30fps 이하 — 매 capability check.
- **Battery 무시**: 매 AR session 매 30 min 매 device thermal throttle — 매 idle pause.
- **Privacy 무시**: 매 camera + location 매 prompt + purpose string 필수 (App Store/Play reject).
## 🧪 검증 / 중복
- Verified (ARKit 7 docs, ARCore 1.45 docs, Unity AR Foundation 6).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — ARKit/ARCore/Unity/WebXR patterns + capabilities matrix |