오픈월드 게임을 만들어보자 Three.js Webgame Debug 스킬 분해

문제 또는 학습 목표

기존 threejs-webgame-debug Skill 하나에 blank-screen 진단, 엔티티 지형 정렬, aggro 관리 등 여러 책임이 섞여 있었다. 특정 문제 해결 시마다 불필요한 단계를 거쳐야 했고, failure owner가 모호해 수리 범위가 커졌다.

이번 과제에서는 하나의 큰 Skill을 책임 경계 기준으로 분해하여 독립적인 두 Skill로 재구성하는 과정을 실측했다.

시작 전 큰 Skill과 흔들림

항목

내용

원본 Skill

threejs-webgame-debug — Three.js + Vite 블랙스크린 진단 및 엔티티 정렬

흔들린 장면

1회차: blank screen → triage만 하면 되는데 terrain-align 단계까지 강제로 거침

흔들린 장면

2회차: entity floating → terrain-align만 필요한데, blank-screen triage의 identifier collision 체크가 불필요하게 개입

흔들린 장면

3회차: monster aggro → terrain-align에 aggro 파라미터가 섞여 있어, aggro만 바꾸고 싶어도 전체 단계를 다시 실행해야 함

반복할수록 "같은 체크리스트로 고칠 수 있는 실패인가, 다른 사람/책임이 개입해야 하는가"가 모호해지는 흔들림이 발생했다.

보호 원본·learner working-copy 경계

역할

상태

Protected distributed original (parent skill)

수정 금지

Immutable source copy

백업, 해시 검증 완료

Learner-owned candidate A

생성 완료

Learner-owned candidate B

생성 완료

자동 backup receipt·SHA-256 readback·restore rehearsal

항목

내용

Backup 시점

원본 readback 후 첫 mutation 직전

원본 SHA-256

해시 검증 완료

백업 파일 수

3 (SKILL.md, 참조 파일, 템플릿)

Source↔backup readback

파일별 존재 확인, 내용 동일

Restore rehearsal

백업 디렉토리에서 원본과 파일 구조 일치 확인

자동 삭제

금지 — learner explicit prune 전까지 보존

왜 분리했는가

vite-blank-screen-triage 분리 이유

원본 Skill에서 blank-screen 진단은 다음 failure owner를 가졌다:

  • Module parse: same-scope identifier collision

  • Import path: legacy query string

  • HMR cache: stale module graph

  • GPU/driver: WebGL context null

이 failure owner들은 엔티티 높이 문제와 전혀 무관하다. verifier도 "minimal scaffold 렌더링"으로 다르고, repair도 "rename identifier / strip query string / clear cache"로 독립적이다. 따라서 triage는 standalone Skill로 분리하는 것이 자연스럽다.

threejs-terrain-entity-align 분리 이유

원본 Skill에서 entity-align은 다음 failure owner를 가졌다:

  • Terrain offset 이중 카운트: height formula 오류

  • FBM multiplier 과다: 절벽 생성 → 엔티티 vanish

  • NaN clamp 누락: bilinear lookup 시 경계 index 미보정

  • Camera target Y drift: 시야 tilt

  • Aggro default: 모든 몬스터가 즉시 추적

이 failure owner들은 blank-screen 진단과 무관하다. verifier도 "player grounded / slimes height / wolves near ground / camera stable / monsters idle"로 독립적이다. repair도 "explicit Y assignment / offset formula / clamp indices / FBM adjustment / aggro default false"로 독립적이다. 따라서 entity-align도 standalone Skill로 분리하는 것이 자연스럽다.

선택한 Y 경계와 observed evidence

경계

선택

Observed Evidence

vite-blank-screen-triage

Y (분리)

failure owner: module parse/import/cache/GPU — entity-align의 terrain/FBM/camera와 전혀 다름. verifier: minimal scaffold vs grounded entities. repair: rename/strip/restart vs formula/formula/adjust.

threejs-terrain-entity-align

Y (분리)

failure owner: terrain offset/NaN/FBM/camera/aggro — triage의 ESM/query-string/HMR와 전혀 다름. verifier: 5개 entity checklist vs 4개 triage checklist. repair: height formula vs diagnostic steps.

N으로 판단해 유지한 후보

원본 Skill의 "Monsters blending into flat terrain"과 "Layered renderOrder can cause depth fighting"은 같은 failure owner(시각적 레이어링)를 가져서, threejs-terrain-entity-align 내부의 보강 항목으로 유지했다. 분리 신호가 약했기 때문에 억지로 분리하지 않았다.

다음 탐색 후보:

  • Parent skill의 "CSS2DRenderer DOM overlay" — 독립적 failure owner 가능 (DOM 조작)

  • "Post-patch duplicate closers" — triage의 Step 8과 overlap, 추가 분리 신호 없음

작은 Skill 후보와 readback 상태

후보 A: vite-blank-screen-triage

항목

내용

역할

블랙스크린 원인 진단 및 최소 수리

Input

프로젝트 루트 경로, 브라우저 URL, Console/Network 상태

Output

Root cause category + Fixed code or next action

Verifier

Minimal scaffold 렌더링, Network 200, Console 0, HMR clean

Failure Return

WebGL null→Human, 404→path fix, Empty Error→collision, HMR→restart

Readback

verified — SKILL.md 존재, frontmatter 정상

후보 B: threejs-terrain-entity-align

항목

내용

역할

엔티티-지형 높이 정렬 및 시각적 레이어링

Input

Terrain config, entity base Y per type, min follow distance

Output

Grounded entities, no float/sink/vanish, stable camera

Verifier

Player grounded, slimes height, wolves near ground, camera stable, monsters idle until hit

Failure Return

sink→formula, vanish→clamp/FBM, tilt→targetY, chase→aggro

Readback

verified — SKILL.md 존재, frontmatter 정상

Tree와 Circuit

threejs-webgame-debug (parent, protected)
├── vite-blank-screen-triage (standalone)
└── threejs-terrain-entity-align (standalone)
Input (blank screen / entity float)
  │
  ├─► vite-blank-screen-triage
  │     ├─ scaffold 검증
  │     ├─ 8단계 트라이어지
  │     └─ Output: root cause + fix
  │
  └─► threejs-terrain-entity-align
        ├─ explicit Y assignment
        ├─ offset formula
        ├─ FBM 조정
        └─ Output: grounded entities
  • Orphan: 없음

  • 순환 호출: 없음

  • 입력 없는 노드: 없음

  • 실패 반환 없는 연결: 없음

분해 Build Gate 상태

필드

split_search_status

y_found

learner_y_decision

accepted

selected_y_boundary

vite-blank-screen-triage / threejs-terrain-entity-align

evidence_for_y

failure owner/verifier/repair가 모두 다름

small_skill_artifacts

2

artifact_form

files

candidate_readback

verified

runtime_discovery

verified

status

candidate_written → PASS

Proof/Gate 스케치와 관찰

vite-blank-screen-triage Proof

Verifier

결과

관찰

Minimal scaffold 렌더링

PASS

실제 게임이 정상 렌더링 중 (건물, 지형, 캐릭터)

Network 모든 .js 200

PASS

Vite HMR connected, 404 없음

Console uncaught error 0

PASS

연결 로그만 존재, 에러 없음

HMR reload clean

PASS

정상 연결, blank error 없음

threejs-terrain-entity-align Proof

Verifier

결과

관찰

Player stands on terrain surface

PASS

발이 지면에 닿음, 그림자 확인

Slimes animate at correct height

PASS

지형 위에 표시, 땅 아래 없음

Wolves near ground level

PASS

지면 근처 위치

Camera follows without vertical tilt

PASS

부드러운 추적

Monsters idle until hit

PASS

정지 상태, 추적 없음

Gate 판정 로그

[Code Gate] vite-blank-screen-triage: PASS (verifier 4/4)
[Code Gate] threejs-terrain-entity-align: PASS (verifier 5/5)
[Human Gate] vite-blank-screen-triage: PASS (사용자 accept)
[Human Gate] threejs-terrain-entity-align: PASS (사용자 accept)

실패·막힘·수정

#

실패

소유자

수정

재판정

1

YAML lint 실패 — Interface Card에 백틱 코드블록 포함

Agent

코드블록 제거 후 순수 YAML로 재작성

PASS

2

Vite 서버 꺼짐 — 검증 시점에 dev server 미구동

Agent

dev server 재시작

PASS

최소 수리 원칙 준수: 실패 시 전체 Skill을 다시 만들지 않고, 실패한 Skill의 learner-owned 후보만 자동 백업 후 수정.

결과

  1. vite-blank-screen-triage — 독립적인 8단계 블랙스크린 진단 Skill로 분해 완료. blank screen 발생 시 빠르게 root cause를 특정하고 최소 수리할 수 있음.

  2. threejs-terrain-entity-align — 독립적인 엔티티-지형 정렬 Skill로 분해 완료. terrain 추가 후 floating/sinking/vanishing 문제를 빠르게 수리할 수 있음.

  3. 두 Skill은 독립적 failure owner, verifier, repair, change cycle을 가짐. 각각 독립적으로 호출·검증·수리 가능.

  4. 원본 Skill은 보호 상태로 유지, learner-owned 후보만 수정.

집과 나무가 있는 도시의 3D 이미지
2
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.