diff --git a/docs/FINAL_REPORT.md b/docs/FINAL_REPORT.md new file mode 100644 index 0000000..52a4483 --- /dev/null +++ b/docs/FINAL_REPORT.md @@ -0,0 +1,170 @@ +# Magic Exam Hall — HCI Final Report (초안) + +작성일: 2026-06-12 / 상태: **초안** — `(데이터)` 표시는 플레이테스트 결과로 채운다. +구조는 HCI Final Report Guideline(Background → Problem definition → Proposed Solution/System → Implementation → Experiment and Result → Conclusion)을 그대로 따른다. + +--- + +## 1. Background + +### 1.1 드로잉 마법 입력의 계보 + +게임에서 "마법을 시전한다"는 행위는 대부분 두 가지 입력으로 추상화되어 왔다. 정답 룬을 외워 재현하는 방식(Arx Fatalis, 2002)과 키 조합으로 원소를 섞는 방식(Magicka, 2011)이다. 전자는 그리는 행위가 있지만 탐색이 "공략 암기"로 수렴하고, 후자는 조합의 폭은 넓지만 손으로 긋는 행위 자체가 없다. + +| 게임 | 입력 방식 | 이 자리에서 비는 것 | +| --- | --- | --- | +| Black & White (2001) | 마우스 제스처 | 그리기가 게임의 중심이 아님 | +| Arx Fatalis (2002) | 룬 모양 그리기 | 정답 레시피 암기, 조합 실험 없음 | +| Magicka (2011) | 키보드 원소 조합 | 그리는 행위 자체가 없음 | +| The Witness (2016) | 패널 위 선 긋기 | 발견형이지만 실시간 세계 반응 없음 | + +**손으로 그리는 입력 × 레시피 없는 발견형 퍼즐 × 실패가 단서가 되는 학습 톤** — 이 세 축의 교차점은 20년간 사실상 비어 있었다. 두 축을 가진 게임은 많지만 셋을 다 가진 작품은 없다. + +### 1.2 왜 HCI 문제인가 + +이 교차점이 비어 있던 이유는 기술이 아니라 인터랙션 설계의 어려움이다. 자유 드로잉을 입력으로 받는 순간 시스템은 두 가지 HCI 문제를 떠안는다: ① 인식 실패가 사용자에게 **불투명**하다 — 왜 거부됐는지 모르는 실패는 좌절과 이탈로 이어진다. ② 필체는 사람마다 다르다 — 하나의 '정답 모양'을 기준으로 삼으면 일부 사용자는 구조적으로 계속 거부당한다. 본 프로젝트는 이 두 문제를 게임이라는 형식 안에서 풀 수 있는지를 검증한다. + +## 2. Problem Definition + +### 2.1 타깃 유저 + +공략 없이 스스로 발견하는 과정을 즐기는 PC 퍼즐·어드벤처 게이머 (The Witness, Outer Wilds 류 선호층). + +- 마우스·키보드만 사용하며, 드로잉/제스처 입력 경험은 전제하지 않는다. +- 1회차 30~60분의 짧은 완결 경험을 기대한다. +- 사람마다 필체가 달라 같은 도형도 서로 다르게 그린다. + +### 2.2 니즈와 문제 + +1. **실패의 불투명성** — 제스처 인식 시스템은 실패할 때 이유를 알려주지 않는다. 사용자는 "왜 안 됐는지"를 모르면 입력 자체를 불신하게 된다. +2. **필체 다양성의 거부** — 단일 기준 모양으로 판정하는 인식기는 개인의 그리기 습관을 흡수하지 못해, 특정 사용자에게 체계적으로 불리하다. +3. **암기형 진행의 한계** — 정답 레시피를 외워 재현하는 구조는 발견의 재미를 죽인다. 사용자는 외워서 통과하는 시험이 아니라 실험해서 통과하는 시험을 원한다. + +### 2.3 연구 질문 + +> **기호 기반(드로잉) 입력이 재미와 몰입을 만들면서도, 실패 이유를 납득 가능하게 설명할 수 있는가?** + +세부 질문: (RQ1) 설명 없이도 인식 시스템의 규칙을 플레이만으로 학습할 수 있는가 — 무설명 60분 내 통과 엔딩 도달로 측정. (RQ2) 실패 피드백이 다음 행동을 알 수 있는 수준으로 이해되는가 — 실패 직후 인터뷰로 측정. (RQ3) 인식이 필체 개인차에 공정한가 — family별 첫 시도 성공률 분포로 측정. + +## 3. Proposed Solution / System + +### 3.1 시스템 개요 + +`Magic Exam Hall`은 2D top-down 마법 드로잉 퍼즐 어드벤처다. 플레이어는 떠 있는 마법탑의 입학생이 되어 **맵 바닥에 직접 문양을 그리고**, 문양의 형태와 품질에 따라 세계 상태를 바꾸며, 정답 레시피 없이 관찰과 조합으로 5층 시험을 통과한다. + +### 3.2 왜 이렇게 설계했는가 (design rationale) + +**① 마법 문법 — 암기가 아니라 문법 학습으로.** +base 문양 5종(불·물·바람·땅·생명)은 "세계를 바꾸는 동사", overlay 장식 6종은 "동사를 바꾸는 수식"이다. 주문이 아니라 문법을 배우게 함으로써 암기형 진행(문제 3)을 구조적으로 차단한다. 같은 주문도 위치에 따라 다르게 해석되므로(3층 다리 근처의 `earth`는 지지대, 표적 근처에서는 엄폐물), 발견 자체가 보상이 된다. + +**② family와 quality의 분리 — 필체 차이를 실패가 아니라 세기 차이로.** +인식기는 "무엇을 그렸는가(family)"와 "얼마나 잘 그렸는가(quality)"를 분리해 판정한다. 형태가 종류를 결정하고 품질은 효과의 세기·지속에만 영향을 주므로, 서툰 필체는 **거부되는 대신 약하게 성공**한다. 이것이 필체 다양성 문제(문제 2)에 대한 1차 응답이다. + +**③ 커스텀 도형 개인화 (two-track personalization) — 사용자의 모양을 시스템의 기준으로.** +사용자가 직접 그려 등록한 도형(gold capture)이 인식 기준이 된다. 시스템이 정한 모양에 사용자를 맞추는 대신, 사용자의 모양에 시스템을 맞춘다. 2층 '반응층'은 이 등록-사용 루프 자체를 퍼즐로 만들었다. + +**④ 단계적 힌트 escalator — 실패를 처벌이 아니라 단서로.** +실패 피드백은 한 번에 정답을 주지 않고 단계적으로 강화된다: 환경 반응(비언어) → 행동 동사가 담긴 한 줄 노트 → 체크리스트 → ghost trace(반투명 시범 궤적). NPC 멘토는 정답을 말하지 않고 관찰 단서만 준다. 모든 발화는 노트(codex)에 자동 기록되어 사용자가 자신의 학습 이력을 다시 볼 수 있다. 이것이 실패 불투명성 문제(문제 1)에 대한 응답이다. + +**⑤ 처벌 없는 실패 — 시도를 가볍게.** +체력·죽음·점수 감점이 없다. 위험 접촉도 가까운 안전 지점으로 되돌릴 뿐이다. 실패 비용을 낮춰 실험 횟수를 늘리는 것이 발견형 학습의 전제이기 때문이다. + +### 3.3 어떻게 문제를 푸는가 (problem ↔ design 대응) + +| 문제 | 설계 응답 | +| --- | --- | +| 실패의 불투명성 | escalator 힌트(④), 실패 유형 분류(invalid/incomplete/dependency/detached/no-seal)별 다른 피드백, codex 기록 | +| 필체 다양성 거부 | family/quality 분리(②), 커스텀 도형 개인화(③) | +| 암기형 진행 | 마법 문법(①), 목표 '상태' 달성형 퍼즐 — 해법이 복수인 층 설계, 처벌 없는 실패(⑤) | + +## 4. Implementation + +### 4.1 2트랙 구조 + +| 트랙 | 역할 | 기술 | +| --- | --- | --- | +| Web Recognizer Lab | 인식 알고리즘 빠른 실험, 대시보드, stroke 수집 설문 | TypeScript + Vite, Vitest | +| Unity Playable | 5층 시험장 본 게임 | Unity 6000.3.14f1, URP 2D | + +인식 파이프라인을 웹에서 먼저 검증한 뒤 Unity로 이식했다. 양 트랙은 family/operator/status/log 명명을 공유한다 (`RECOGNITION_CONTRACT.md`). + +### 4.2 인식 파이프라인 + +stroke session(다획 입력 버퍼 0.8초) → 특징 추출 → family 판정 + quality vector → 세계 효과. 커스텀 도형은 등록 시점의 gold capture와 형태 비교로 판정한다. + +### 4.3 게임 구성 (5층) + +| 층 | 이름 | 퍼즐 | 가르치는 것 | +| --- | --- | --- | --- | +| 1 | 발착층 | 인덱스 룬 5종을 base 문양으로 깨움 | 그리기 → 세계 반응의 기본 루프 | +| 2 | 반응층 | 커스텀 도형 등록 → 반응 표식 5종 발동 | 개인화: 내 모양이 기준이 됨 | +| 3 | 건널목층 | 4개 구간의 길을 커스텀 스펠로 개통 | 위치 의존 해석, 복수 해법 | +| 4 | 타격층 | 훈련 표적 4종에 조합 반응 확인 | 조합 실험과 즉각 피드백 | +| 5 | 성좌심 | 마법진 6슬롯을 임의 조합으로 충족 | 배운 문법의 자유 응용. 5/6 통과, 6/6 진엔딩 | + +보조 시스템: 멘토 NPC(컨텍스트 소환, 정답 금지 대사), codex(발견·노트 자동 기록), 엔딩 리포트("당신은 이런 마법사였습니다" — 플레이 스타일 데이터화), 접근성 옵션 6항목, 3슬롯 저장. + +### 4.4 검증 자동화와 로깅 + +- 자동 테스트: 웹 181개(Vitest), Unity EditMode 105개 + PlayMode 47개 — 5층 synthetic 완주, 5/6·6/6 엔딩 분기까지 자동 검증 (2026-06-12 로컬 전부 통과) +- Windows 빌드 한 줄 명령 + player smoke 스크립트 +- 실험 로깅: attempts.csv(시도별 family/status/assist level/타임스탬프), 엔딩 리포트, 익명 세션 ID — 수집 항목과 개인정보 기준은 `LOGGING_AND_PRIVACY.md` + +## 5. Experiment and Result + +### 5.1 실험 설계 (who / where / how) + +- **Who**: 개발 미참여 외부 참가자. 1차 N=5, 2차 N=3~5. 마우스·키보드 사용 가능, 익명 로그 수집 동의자. +- **Where**: 고정 Windows 빌드, 대면 관찰 환경. +- **How**: 참가자는 설명 없이(조작법은 게임 내에서만 확인) 새 게임을 시작해 60분 내 통과 엔딩을 목표로 플레이한다. 진행자는 정답·문양 모양을 설명하지 않는다. 직후 5점 척도 설문(명확성·공정성·피드백 도움·조작감·몰입감)과 10~15분 반구조화 인터뷰를 진행한다. 상세 절차는 `RESEARCH_PROTOCOL.md`. +- 2차 테스트는 1차 결과로 인식 튜닝(오인식 상위 family 보정, 입력 버퍼 0.6/0.8/1.0초 A/B 확정)을 반영한 빌드로 반복해 개선 폭을 측정한다. + +### 5.2 측정 지표 (metrics) + +| 지표 | 정의 | 대응 RQ | 출처 | +| --- | --- | --- | --- | +| 통과 엔딩 도달률·소요 시간 | 무설명 60분 내 5/6 엔딩 도달 | RQ1 | ending report | +| 첫 시전까지 시간 | 시작 → 첫 인식/실패 시도 | RQ1 | attempts.csv | +| family별 첫 시도 성공률 | base family별 첫 attempt 성공 비율 분포 | RQ3 | attempts.csv | +| 실패 유형 분포 | invalid/incomplete/dependency/detached/no-seal | RQ2 | attempts.csv | +| assist level 도달률 | 힌트 단계 1/2/3 사용 횟수 | RQ2 | attempts.csv | +| 피드백 이해도 | 실패 후 다음 행동을 말로 설명 가능한지 | RQ2 | 인터뷰 | +| 막힘 지점 | 2분 이상 정체 또는 동일 목표 3회 이상 실패 | RQ1 | 관찰 | +| 설문 5점 척도 | 명확성·공정성·피드백 도움·조작감·몰입감 | 전체 | 설문 | + +### 5.3 사전 수집: stroke 데이터 + +본 실험에 앞서 웹 트랙에서 도형 구성 stroke 수집 세션을 진행해(2026-05-27, 지시 조건 블록별 다회 시행) 인식기의 노이즈 내성 분석에 사용했다 (`scripts/shape-regex-noise-mass-analysis.py` 외). `(데이터: 세션 수와 분석 요약을 여기에 정리)` + +### 5.4 결과 + +`(데이터) 1차 N=5 결과: 통과율, 첫 시전까지 시간 분포, family별 성공률, 실패 유형 분포, assist 도달률, 막힘 지점 상위 3개, 설문 평균` + +`(데이터) 2차 결과: 1차 대비 개선 폭 — 튜닝 전후 비교` + +`(데이터) 인터뷰 인용: 실패 피드백 이해 사례 / 오해 사례 각 2~3개` + +## 6. Conclusion + +### 6.1 Design Implications + +(아래는 실험 전 가설 형태의 초안이다 — 결과 데이터로 검증·수정한다.) + +1. **실패를 '약한 성공'으로 변환하는 quality 분리는 드로잉 입력의 좌절을 낮춘다.** 거부 대신 약한 효과를 보여주면 사용자는 입력이 "읽히고 있다"는 신뢰를 유지한 채 형태를 교정한다. `(데이터로 검증)` +2. **힌트는 단계적으로, 정답은 마지막까지 유보하는 escalator가 발견의 재미와 진행 보장을 양립시킨다.** 한 번에 정답을 주면 발견이 죽고, 안 주면 이탈한다. 비언어 → 행동 동사 한 줄 → 시범 궤적의 단계가 그 사이를 잇는다. `(데이터로 검증)` +3. **사용자가 등록한 모양을 인식 기준으로 삼는 개인화는 '시스템에 맞추는 학습'을 '시스템을 길들이는 경험'으로 바꾼다.** 게임 외 제스처 UI(펜 입력, 터치 단축 제스처)에도 적용 가능한 패턴이다. `(데이터로 검증)` +4. **모든 피드백을 다시 볼 수 있는 기록(codex)으로 남기는 것은 일회성 토스트보다 학습을 지원한다.** `(데이터로 검증)` + +### 6.2 Limitations + +- 인식 휴리스틱의 개인차: 특징 기반 판정은 여전히 일부 필체에 편향될 수 있다 (user profile 보정의 Unity 이식은 향후 과제). +- 표본 크기 N=5~10, 단일 세션 측정 — 장기 학습 곡선은 다루지 않는다. +- 참가자 모집 풀의 동질성(대학 환경) 가능성. + +### 6.3 Future Work + +user profile 보정의 Unity 이식, 외부 배포(Windows 릴리스), 더 큰 표본의 반복 실험. + +--- + +부록 참조: `GAME_DESIGN.md`(설계 전문), `RESEARCH_PROTOCOL.md`(실험 절차), `LOGGING_AND_PRIVACY.md`(수집·개인정보), `RECOGNITION_CONTRACT.md`(인식 스키마), 저장소 `github.com/sw1029/magic`.