chore: Delete processed raw file (Skybound Jitter Case)

This commit is contained in:
Antigravity Agent
2026-04-26 21:33:44 +09:00
parent 270cfcb039
commit 4b670647c0
2 changed files with 28 additions and 105 deletions
@@ -1,105 +0,0 @@
# Skybound Red Striker Movement Jitter Fix
작성일: 2026-04-26 21:15 KST
## 요청 요약
- 빨간 적기가 여전히 어디에 낀 것처럼 바들바들 떨린다.
- 이전 수정 이후에도 실제 플레이 화면에서 동일 증상이 보여 원인을 다시 확인해야 한다.
## 확인 결과
빨간 적기 계열의 떨림은 단순한 스프라이트 문제가 아니라 이동 로직과 렌더링 좌표가 동시에 만드는 문제로 판단했다.
확인한 주요 지점:
- `CombatSystem.updateStrikerAI`
- `CombatSystem.applyEnemySeparation`
- `GameRenderer.renderEnemies`
- `GameRenderer`의 lock-on indicator 렌더링
- `EntityManager.spawnEnemy`의 pooled enemy 초기화
## 핵심 원인
`updateStrikerAI`에서 스트라이커가 목표 X 좌표에 가까워진 뒤에도 아래 방식으로 계속 밀어붙이고 있었다.
```ts
e.x += Math.sign(desiredX - e.x) * 1.1
```
이 방식은 목표점을 살짝 지나친 다음 다음 프레임에 반대 방향으로 다시 움직이게 만든다.
결과적으로 목표 지점 근처에서 좌우로 계속 오버슈트가 발생해 “어디에 낀 것처럼 떠는” 느낌이 난다.
추가로 적기 분리, 중력형 스킬, 락온 표시가 같은 적을 동시에 참조하면 실제 좌표의 미세 보정이 화면에 그대로 노출될 수 있었다.
## 적용한 해결 방향
스트라이커 이동은 오버슈트가 나지 않는 감쇠형 접근으로 변경했다.
렌더링은 실제 충돌 좌표와 별개로 표시용 좌표를 한 번 더 부드럽게 보간한다.
즉 게임 로직은 기존처럼 정확한 실제 좌표를 사용하고, 화면에 보이는 위치만 안정적으로 따라가게 했다.
## 적용한 변경
### 스트라이커 AI 오버슈트 제거
수정 파일:
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/CombatSystem.ts`
변경 내용:
- `Math.sign(...) * 1.1` 고정 이동 제거
- 목표 지점까지 남은 거리보다 더 많이 움직이지 않도록 제한
- 목표 X 근처에서 좌우 ping-pong이 발생하지 않게 감쇠 이동 적용
### 적기 표시 좌표 스무딩 추가
수정 파일:
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/types.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/GameRenderer.ts`
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/EntityManager.ts`
추가 필드:
- `renderX`
- `renderY`
- `renderRotation`
적용 내용:
- 적기 실제 좌표가 순간 보정되더라도 화면 좌표는 부드럽게 따라간다.
- 너무 큰 위치 차이가 있으면 순간이동/스폰으로 판단하고 즉시 스냅한다.
- pooled enemy 재사용 시 이전 적기의 표시 좌표가 남지 않도록 spawn 시 초기화한다.
### 락온 표시 떨림 완화
수정 파일:
- `/Volumes/Data/project/Antigravity/Skybound/src/features/game/systems/GameRenderer.ts`
변경 내용:
- 락온 브라켓이 실제 좌표가 아니라 `renderX`, `renderY`를 우선 사용하게 변경
- 적기 본체는 부드러운데 락온 표시만 떨리는 상황을 방지
## 검증
- `npm run build` 성공
- 출력 디렉터리: `dist/49`
- TypeScript 빌드와 Vite production build 모두 통과
## 기대 효과
- 빨간 스트라이커가 목표 지점 근처에서 좌우로 바들바들 떠는 현상 완화
- 적기 분리, 중력 스킬, 락온 UI가 함께 작동해도 화면상 움직임이 더 안정적으로 보임
- 충돌 판정은 실제 좌표를 유지하므로 게임플레이 정확도는 유지
## 추가 관찰 포인트
이번 수정은 스트라이커 AI의 명확한 오버슈트 원인을 제거한 것이다.
만약 특정 스킬 영역 안에서만 떨림이 남는다면 다음 후보는 gravity mine 또는 vortex pull 계열의 강제 위치 보정이다. 이 경우에는 해당 pull force에도 속도 기반 감쇠를 적용하는 것이 좋다.
@@ -0,0 +1,28 @@
---
id: CS-SKYBOUND-JITTER-001
category: "[[10_Wiki/💡 Topics/AI]]"
confidence_score: 1.0
tags: [skybound, troubleshooting, jitter, game-engine, lerp, delta-time, physics]
last_reinforced: 2026-04-26
---
# [[Case Study: Skybound Red Striker Movement Jitter Stabilization (사례 연구: Red Striker 이동 떨림 안정화)]]
## 📌 한 줄 통찰 (The Karpathy Summary)
> "프레임 간의 불연속적인 위치 업데이트가 사용자의 눈에 '떨림'으로 비친다면, 선형 보간(LERP)과 델타 타임 가중치를 활용하여 시간의 흐름을 부드러운 좌표의 흐름으로 치환하라" — 고속 이동 객체의 시각적 안정성 확보 전략.
## 📖 구조화된 지식 (Synthesized Content)
- **핵심 문제:** Red Striker 등 고속으로 이동하는 적 기체가 특정 프레임에서 위치가 미세하게 튀거나(Jitter), 프레임 드랍 발생 시 순간이동 하는 듯한 부자연스러운 움직임 발생.
- **해결 전략: Time-Sliced Linear Interpolation (LERP)**
- **Delta Time Normalization:** 엔진의 `deltaTime`을 모든 이동 계산의 곱연산자로 사용하여 하드웨어 성능에 상관없는 일정한 이동 속도 보장.
- **Position Smoothing (LERP):** `currentPos = lerp(currentPos, targetPos, alpha * dt)` 공식을 적용하여 급격한 위치 변화를 부드러운 가속/감속으로 완화.
- **Integer Pixel Snapping Prevention:** 렌더링 직전 단계에서만 소수점 좌표를 정수로 변환하고, 내부 논리 연산은 항상 부동 소수점(Floating point) 정밀도를 유지하여 누적 오차 제거.
- **성과:** 고주파 이동 시에도 잔상이나 떨림 없는 매끄러운 비행 궤적 구현, 엔진 부하 상황에서도 예측 가능한 적 기체 이동 패턴 유지.
## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 과거에는 성능 최적화를 위해 단순 좌표 덧셈 방식을 썼으나, 현대 정책은 '시각적 품질 우선 정책'에 따라 모든 이동체에 대해 보간 로직 적용을 표준으로 함.
- **정책 변화:** Antigravity 프로젝트는 Skybound 엔진 내 모든 탄환 및 기체 이동 로직에 `LERP_THRESHOLD` 기반의 적응형 보간 필터 적용 정책을 의무화함.
## 🔗 지식 연결 (Graph)
- [[JavaScript-Optimization-Patterns]], [[Interaction-to-Next-Paint-INP]], [[High-Performing-Website-Development]]
- **Raw Source:** [[00_Raw/2026-04-26-Skybound_Red_Striker_Movement_Jitter_Fix.md]]