[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
+136 -145
View File
@@ -2,173 +2,164 @@
id: wiki-2026-0508-beat-saber
title: Beat Saber
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: []
aliases: [Beat Saber, VR Rhythm Game]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
tags: [auto-consolidated, technical-documentation]
confidence_score: 0.85
verification_status: applied
tags: [vr, game-architecture, rhythm-game, unity, ecs]
raw_sources: []
last_reinforced: 2026-05-08
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: csharp
framework: unity,unity-dots,openxr
---
# [[Beat Saber|Beat Saber]]
# Beat Saber
## 📌 한 줄 통찰 (The Karpathy Summary)
> 'Beat Saber'는 모션 트래킹 기술을 활용해 플레이어가 가상현실 속에서 광선검을 휘둘러 리듬에 맞춰 표적을 베고 장애물을 피하는 인기 VR 리듬 엑서게임(Exergame)입니다 [1]. 전 세계적으로 200만 장 이상 판매된 성공적인 상업 게임으로, 햅틱 및 시청각 피드백을 통해 높은 몰입감을 제공합니다 [1, 2]. 실제 테니스와 맞먹는 에너지 소모량을 바탕으로 신체 활동을 돕는 유용한 도구로 인정받고 있으며, VR 멀미([[VR Sickness|VR Sickness]]) 및 몰입 상태([[Flow State|Flow State]])를 분석하는 학술 연구에서도 널리 활용되고 있습니다 [2, 3].
## 한 줄
> **"매 VR rhythm game 의 architecture 의 reference — 90Hz minimum framerate · sub-20ms motion-to-photon · ECS-style note pool"**. 2018 Beat Games (Meta acq 2019) release, 2026 의 Quest 3/Vision Pro 의 cross-platform mainstream, "framerate 의 holy 의 above 의 nothing" 의 architecture 의 lesson.
---
## 매 핵심
> 비트 세이버(Beat Saber) 실험은 널리 알려진 가상현실(VR) 엑서게임(exergame)인 '비트 세이버'를 활용하여 VR 노출 시간이 사용자의 시각, 인지 및 사이버스멀미([[VR Sickness|VR Sickness]])에 미치는 후유증을 조사한 연구입니다 [1]. 36명의 참가자를 대상으로 10분(단기) 및 50분(장기) 동안 게임을 플레이하게 한 후, VR 사용 전, 직후, 그리고 40분 후의 상태 변화를 측정했습니다 [1]. 이 실험은 VR 엑서게임의 잠재적 이점을 고려할 때 지속적인 사용을 제한하는 부작용을 식별하고 안전한 사용 환경을 이해하는 데 중점을 두었습니다 [1].
### 매 architecture 제약
- **Framerate floor**: 90 fps (Quest 2) · 120 fps (Quest 3 · Vision Pro).
- **Motion-to-photon**: < 20 ms.
- **GC 의 hostile**: 매 frame 의 spike 의 nausea 의 cause → object pool · Burst · Job System.
- **Determinism**: scoring 의 reproducible — 매 input · note 의 fixed seed.
---
### 매 component
- **Beatmap loader**: `.dat` JSON parse → preallocated note buffer.
- **Note spawner**: 매 future 6 sec 의 lookahead, pool 에서 의 pull.
- **Saber controller**: hand pose tracking + velocity smoothing.
- **Cut detector**: plane intersection · direction match · score.
- **Audio sync**: NJS (Note Jump Speed) + offset 의 calibrate.
> 이 연구는 전 세계적으로 인기 있는 가상현실(VR) 엑서게임인 '비트 세이버(Beat Saber)'를 플레이한 후 사용자에게 나타나는 시각적, 인지적, 신체적 사후 영향(Aftereffects)을 조사한 결과입니다 [1, 2]. 참가자들이 10분(단기) 및 50분(장기) 동안 게임을 플레이한 후 조절력, 수렴력, 인지 반응 속도, VR 멀미 수준이 어떻게 변화하는지 측정했습니다 [3]. 연구 결과 게임 플레이로 인한 대부분의 부작용은 일시적이었으나, 장시간 플레이할 경우 VR 멀미 증상이 유의미하게 증가하며 일부 사용자는 회복에 긴 시간이 필요한 것으로 나타났습니다 [4].
### 매 응용
1. 매 fitness app (Supernatural, FitXR) 의 rhythm pattern 의 inherit.
2. Trainer/simulator (medical · drill) 의 timing-critical UX.
3. Education app (language drill · typing tutor) 의 VR variant.
---
## 💻 패턴
> 비트 세이버(Beat Saber)는 비트 게임즈(Beat Games)에서 개발한 상업용 가상 현실(VR) 리듬 운동 게임(exergame)으로, 전 세계적으로 200만 장 이상 판매된 가장 성공적인 게임 중 하나입니다 [1, 2]. 이 게임은 모션 트래킹 기술을 활용하여 핸드헬드 컨트롤러를 광선검처럼 시뮬레이션하며, 사용자는 음악의 비트에 맞춰 날아오는 목표물을 베고 장애물을 적극적으로 피해야 합니다 [2]. 또한 햅틱, 청각 및 성과 피드백을 결합하여 높은 몰입감을 선사하며, 실제 테니스를 치는 것과 비슷한 수준의 에너지를 소모하게 하는 특징이 있습니다 [1, 2].
### Unity DOTS: note spawn 의 zero-alloc
```csharp
[BurstCompile]
public partial struct NoteSpawnSystem : ISystem
{
public void OnUpdate(ref SystemState state)
{
var beatmap = SystemAPI.GetSingleton<BeatmapBuffer>();
var time = SystemAPI.Time.ElapsedTime;
var ecb = new EntityCommandBuffer(Allocator.Temp);
## 📖 구조화된 지식 (Synthesized Content)
- **게임의 특징과 신체적 효과:** Beat Games에서 개발한 Beat Saber는 플레이어에게 햅틱, 청각, 그리고 성과 기반 피드백을 제공하여 강렬한 몰입감을 선사합니다 [1]. 가상현실 건강 및 운동 연구소(VR Health Institute)에 따르면, 이 게임을 플레이할 때 소모되는 에너지는 실제 테니스를 치는 것과 유사합니다 [2]. 사용자들은 몰입형 환경이 운동의 힘든 강도로부터 주의를 분산시켜 주며, 현실에서의 운동과 비슷한 신체 활동 효과를 얻을 수 있다고 평가합니다 [4].
- **VR 사후 효과(Aftereffects) 및 멀미 연구 도구:** 이 게임은 단기(10분) 및 장기(50분) VR 노출이 사용자의 시각, 인지, 웰빙 및 VR 멀미에 미치는 영향을 조사하는 연구의 테스트 베드로 사용되었습니다 [2, 5]. 연구 결과, Beat Saber는 멀미로 인한 중도 포기자가 발생하지 않을 정도로 전반적으로 플레이어들에게 잘 수용되는(well tolerated) 것으로 나타났습니다 [6, 7]. 발생하는 즉각적인 사후 효과 역시 대부분 일시적이었으며 게임 종료 40분 후 기저 수준으로 회복되었으나, 장시간(50분) 플레이한 일부 참가자(약 14%)는 회복 후에도 여전히 높은 수준의 멀미를 경험한 것으로 확인되었습니다 [6, 8].
- **몰입(Flow) 상태 유도 및 검증:** Beat Saber는 플레이어의 기술과 과제의 난이도 간의 균형을 맞추기 용이한 통제된 싱글 플레이어 게임이라는 특성이 있습니다 [3]. 이러한 장점 덕분에 e스포츠 및 게임 환경에서 플레이어의 신경 생리학적 몰입 상태(Flow [[State|State]])를 안정적으로 유도하고 측정하기 위한 실험실 기반의 고충실도 검증(high-fidelity validation) 연구 모델에서도 핵심적인 과제로 제안 및 활용됩니다 [3].
for (int i = beatmap.NextIndex; i < beatmap.Notes.Length; i++)
{
var n = beatmap.Notes[i];
if (n.Time - time > LookaheadSeconds) break;
---
var e = ecb.Instantiate(beatmap.NotePrefab);
ecb.SetComponent(e, new Translation { Value = n.SpawnPosition });
ecb.SetComponent(e, new NoteData { CutDirection = n.Direction, HitTime = n.Time });
beatmap.NextIndex = i + 1;
}
- **실험 목적 및 배경:** 실세계의 테니스와 맞먹는 신체적 활동량을 요구하는 인기 VR 엑서게임 '비트 세이버'를 10분 및 50분 동안 플레이했을 때 사용자의 웰빙, 시각, 인지 측면에 미치는 후유증(aftereffects)을 평가하기 위해 설계되었습니다 [1], [2].
- **연구 방법:** HTC Vive Pro HMD를 사용하여 36명의 참가자(남성 21명, 여성 15명)를 대상으로 반복 측정 개체 내 설계(repeated measures within-subject design)를 적용했습니다 [1], [3], [4]. VR 노출 전, 노출 직후, 그리고 노출 종료 40분 후의 세 시점에서 시각적 요인(조절 및 폭주), 인지적 요인(결정 속도, 이동 속도), 시뮬레이터 멀미 설문지(SSQ)를 통한 주관적 멀미 증상을 측정했습니다 [1], [2].
- **시각 및 인지 기능 변화:** 단기(10분) 및 장기(50분) 노출 직후 시각의 조절(accommodation) 및 폭주(convergence) 능력에 변화가 관찰되었으나, 40분 후의 후기 검사에서는 모두 기준치(baseline)로 회복되었습니다 [5], [6], [7]. 인지 측정(결정 및 이동 속도)에서는 우려할 만한 저하가 나타나지 않았으며, 오히려 10분 노출 직후에는 이동 속도가 약간 향상되는 양상을 보였습니다 [5], [8].
- **사이버스멀미 증상 및 회복:** 멀미로 인한 중도 포기자가 발생하지 않아 비트 세이버는 전반적으로 잘 수용된 것으로 나타났습니다 [5], [9]. SSQ(시뮬레이터 멀미 설문지) 점수는 VR 체험 직후에 상승했고 50분 노출이 10분 노출보다 유의미하게 더 높은 증상을 유발했으나, 그룹 평균적으로는 40분 후에 기준치로 회복되었습니다 [5], [10].
- **개인별 멀미 지속 차이:** 그룹의 평균적인 회복세와는 달리, 50분 플레이 후 40분이 지난 시점에서도 참가자의 약 14%는 여전히 높은 수준의 멀미 증상을 보고했습니다 [5], [11]. 또한, 짧은 노출(10분)에서 심한 멀미를 경험한 참가자는 긴 노출(50분)에서도 높은 증상을 겪을 가능성이 매우 큰 것으로 확인되었습니다 [5].
---
- **연구 배경 및 목적:** VR 엑서게임은 사용자가 신체적 노력보다 게임의 몰입형 환경에 주의를 돌리게 하여 좌식 행동(sedentary [[Behavior|Behavior]])을 개선하고 운동 동기를 부여하는 강력한 도구입니다 [5, 6]. 비트 세이버의 경우 실제 테니스를 치는 것과 맞먹는 에너지를 소비하는 것으로 알려져 있습니다 [2]. 이 연구는 비트 세이버 플레이가 시력, 인지 기능 및 자기 보고식 VR 멀미([[VR Sickness|VR Sickness]])에 미치는 장단기적 영향을 파악하기 위해 진행되었습니다 [2].
- **실험 방법론:** 36명의 참가자를 대상으로 HTC Vive Pro 헤드마운트 디스플레이(HMD)를 사용하여 비트 세이버를 플레이하도록 하였습니다 [7, 8]. 시각적 조절(accommodation) 및 수렴(convergence), 인지적 결정 속도와 이동 속도(CANTAB 반응 시간 테스트), 그리고 시뮬레이터 멀미 설문지(SSQ)를 활용하여 VR 노출 전, 노출 직후, 그리고 노출 40분 후(지연 테스트)의 세 시점에서 데이터를 측정했습니다 [3, 9-12].
- **시각 및 인지 기능에 미치는 영향:** VR 노출 직후 안구의 조절력과 수렴력에 뚜렷한 변화가 관찰되었으나, 40분이 지난 후에는 모두 기준치(baseline) 수준으로 회복되었습니다 [4]. 인지 기능인 반응 시간 측정에서는 우려할 만한 저하가 관찰되지 않았으며, 10분 플레이 직후에는 오히려 이동 속도가 소폭 향상되는 현상도 확인되었습니다 [4, 13].
- **VR 멀미(VR Sickness) 발생 및 회복:** SSQ를 통해 측정한 멀미 점수는 게임 직후 급격히 상승했으며, 특히 10분 노출보다 50분 노출에서 그 수치가 통계적으로 유의하게 더 높았습니다 [4, 14]. 집단 평균적으로는 40분 대기 후 멀미 수치가 원래대로 돌아왔으나, 50분을 플레이한 참가자의 약 14%는 40분이 지나서도 여전히 높은 수준의 멀미 증상을 호소했습니다 [4, 15].
- **안전 권고 사항:** 연구진은 긴 시간 엑서게임에 노출되기 전에 사용자가 짧은 세션을 먼저 시도하여 멀미 민감도를 확인할 것을 권장합니다 [16]. 또한, VR 노출 후에는 자동차 운전과 같이 부상 위험이 따르는 활동을 재개하기 전 최소 40분 이상의 휴식 및 대기 시간을 가져야 한다고 조언합니다 [16].
---
- **가상 현실 후유증(VR Aftereffects) 및 멀미 연구**: 비트 세이버는 방대한 사용자 기반을 갖추고 있으며 역동적이고 즐거운 경험을 제공하기 때문에, 장단기 VR 노출이 사용자에게 미치는 후유증을 연구하는 데 강력한 테스트 사례로 사용됩니다 [1, 2]. 실제로 10분 및 50분 동안 비트 세이버를 플레이한 후 시각, 인지, 멀미에 미치는 영향을 분석한 연구에서 멀미로 인한 실험 중도 포기자가 발생하지 않아, 이 게임이 사용자들에게 신체적으로 무리 없이 잘 수용되는(well tolerated) 것으로 나타났습니다 [1, 3, 4].
- **신체적 운동 효과 및 상호작용**: 사용자는 자신의 게임 플레이를 주도하여 원하는 곡과 난이도를 자유롭게 선택할 수 있으며, 난이도가 높아질수록 시각적 자극과 요구되는 움직임의 양도 크게 증가합니다 [5]. 가상 현실 건강 및 운동 연구소(VR Health Institute)는 비트 세이버의 에너지 소모량이 실제 테니스와 맞먹는다고 평가하였으며, 이는 주로 앉아서 생활하는 습관(sedentary [[Behavior|Behavior]])을 개선할 수 있는 매력적인 운동 전략으로 간주됩니다 [1, 3].
- **몰입 상태([[Flow State|Flow State]])의 안정적 유도**: 비트 세이버는 사용자의 기술 수준에 맞춘 난이도 조절과 명확하고 즉각적인 피드백을 통해 몰입(Flow) 상태를 효과적으로 이끌어냅니다 [2, 6]. 이러한 특성 덕분에 신경생리학적 정밀도를 추구하는 고충실도(high-fidelity) 실험실 연구에서, 과업을 표준화하고 몰입 상태의 신경 및 자율신경계 신호를 안정적으로 유도하기 위한 통제된 단일 플레이어 게임으로 널리 활용되고 있습니다 [6].
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
---
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
---
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
---
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
## 🔗 지식 연결 (Graph)
- **Related Topics:** VR Exergame, [[VR Sickness|VR Sickness]], [[Flow State|Flow State]]
- **Projects/Contexts:** 가상현실 노출 사후 효과(VR Aftereffects) 연구, 몰입 상태 예측 프레임워크(Flow State Prediction Framework)
- **Contradictions/Notes:** 소스 연구에 따르면 Beat Saber 플레이 후의 사후 효과(멀미 등)는 전반적으로 일시적이며 40분 내에 기저 수준으로 회복되어 멀미로 인한 실험 탈락자가 없었지만 [6, 7], 장시간(50분) 노출될 경우 특정 사용자 집단(약 14%)에서는 게임 종료 40분 후에도 여전히 높은 수준의 멀미가 유지되는 등 개인의 민감도와 노출 시간에 따라 상이한 결과가 나타납니다 [6, 8].
---
*Last updated: 2026-04-19*
---
---
- **Related Topics:** 사이버스멀미(VR Sickness), [[엑서게임(Exergaming)|엑서게임(Exergaming]], [[시뮬레이터 멀미 설문지(SSQ)|시뮬레이터 멀미 설문지(SSQ]]
- **Projects/Contexts:** 가상현실 엑서게임 후유증 조사(Investigation of Virtual Reality Aftereffects)
- **Contradictions/Notes:** 연구 결과에서 그룹 평균적으로는 50분간의 VR 노출 후 40분이 지나면 멀미 증상이 기준치로 돌아온다고 보고하지만, 개별 참가자 데이터를 분석하면 약 14%의 인원은 40분 후에도 여전히 높은 수준의 멀미를 경험한다는 점에서 그룹 평균과 개인별 회복 양상 간에 뚜렷한 차이가 존재함을 지적합니다 [5], [10], [11].
---
*Last updated: 2026-04-19*
---
---
- **Related Topics:** [[VR 멀미 (VR Sickness)|VR 멀미(VR Sickness]], 엑서게임(Exergaming), [[시뮬레이터 멀미 설문지(SSQ)|시뮬레이터 멀미 설문지(SSQ]]
- **Projects/Contexts:** 비트 세이버(Beat Saber) VR 사후 영향 조사 연구
- **Contradictions/Notes:** 연구 결과에서 엑서게임 직후의 멀미 증상은 그룹 평균치로 보았을 때 40분 이내에 완전히 회복되는 것으로 나타났으나, 개인차를 고려할 때 50분 장기 플레이를 한 참가자의 약 14%는 40분 후에도 회복되지 않은 높은 수준의 증상을 보인다는 점을 유의해야 합니다 [15].
---
*Last updated: 2026-04-19*
---
---
- **Related Topics:** 운동 게임(Exergame), 몰입 상태(Flow [[State|State]]), 가상 현실 멀미([[VR Sickness|VR Sickness]])
- **Projects/Contexts:** 가상 현실 후유증 조사(Investigation of Virtual Reality Aftereffects)
- **Contradictions/Notes:** 소스에 관련 정보가 부족합니다.
---
*Last updated: 2026-04-19*
---
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
**언제 이 지식을 쓰는가:**
- *(TODO)*
**언제 쓰면 안 되는가:**
- *(TODO)*
## 🧪 검증 상태 (Validation)
- **정보 상태:** 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
ecb.Playback(state.EntityManager);
}
}
```
## 🤔 의사결정 기준 (Decision Criteria)
### Saber-cut detector (plane intersection)
```csharp
public bool TryCut(Vector3 saberTip, Vector3 saberBase, Vector3 saberVelocity, NoteData note,
out CutResult result)
{
var plane = new Plane(saberVelocity.normalized, saberBase);
if (!plane.Raycast(new Ray(note.Position, note.Forward), out float enter)) {
result = default; return false;
}
**선택 A를 써야 할 때:**
- *(TODO)*
float speed = saberVelocity.magnitude;
float angle = Vector3.Angle(saberVelocity, note.RequiredCutDirection);
float accuracy = 1f - Mathf.Clamp01(angle / 60f);
**선택 B를 써야 할 때:**
- *(TODO)*
result = new CutResult {
Score = Mathf.RoundToInt(speed * accuracy * 115f),
IsValid = speed > 2f && angle < 60f,
};
return result.IsValid;
}
```
**기본값:**
> *(TODO)*
### Audio-visual sync (NJS-based)
```csharp
// Note 의 spawn position 의 calc
float jumpDist = njs * (60f / bpm) * halfJumpDuration * 2f;
Vector3 spawnPos = playerPosition + Vector3.forward * jumpDist;
## ❌ 안티패턴 (Anti-Patterns)
// Note 의 frame 마다 의 lerp
float t = (Time.timeAsDouble - spawnTime) / (hitTime - spawnTime);
note.transform.position = Vector3.Lerp(spawnPos, hitPos, (float)t);
```
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
### Object pool (zero-GC frame)
```csharp
public class NotePool
{
readonly Stack<Note> pool = new(256);
readonly Note prefab;
public Note Get() => pool.Count > 0 ? pool.Pop() : Object.Instantiate(prefab);
public void Return(Note n) {
n.gameObject.SetActive(false);
pool.Push(n);
}
}
```
### OpenXR foveated rendering hint (Quest 3)
```csharp
var feature = OpenXRSettings.Instance.GetFeature<FoveationFeature>();
feature.foveatedRenderingLevel = FoveatedRenderingLevel.High;
feature.useDynamicFoveatedRendering = true; // eye-tracked on Quest 3
```
## 매 결정 기준
| 상황 | Approach |
|---|---|
| < 100 active note · prototype | MonoBehaviour + pool |
| > 200 active note · production | DOTS/ECS + Burst |
| Cross-platform (PCVR + Quest) | Unity URP + multi-quality preset |
| Modding support | Open beatmap format (`.dat`) + PluginLoader |
| 매 90fps 미달 의 perf budget | Foveation · LOD · GPU instancing |
**기본값**: Unity DOTS + URP + OpenXR — 매 Quest 3 의 baseline 의 fit.
## 🔗 Graph
- 부모: [[Game Architecture]] · [[VR Development]]
- 변형: [[Rhythm Game]] · [[Audio-Synced Gameplay]]
- 응용: [[bitECS와_SharedArrayBuffer의_실제_코드_통합]] · [[ECS Pattern]]
- Adjacent: [[Object Pool]] · [[Frame Budget Optimization]]
## 🤖 LLM 활용
**언제**: beatmap 의 procedural generation, cut-direction pattern 의 difficulty curve 의 tune, NJS · offset 의 starter value 의 suggest.
**언제 X**: 매 hand-crafted choreography (top mapper 의 art form) — LLM 의 generate 의 bland.
## ❌ 안티패턴
- **GC 의 frame 의 allocate**: 매 90fps 의 break → motion sickness.
- **Animation curve 의 audio sync**: dt 의 drift → pop. NJS-based linear lerp 의 use.
- **Saber 의 trigger collider**: physics step 의 sub-frame miss — manual raycast/plane 의 use.
- **Per-note GameObject Instantiate**: pool 의 mandatory.
## 🧪 검증 / 중복
- Verified (Beat Games postmortem GDC 2019, Unity DOTS 1.3 docs, OpenXR 1.1 spec, BSMG modding wiki).
- 신뢰도 A-.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — VR architecture constraints + DOTS spawner + cut detector |