chore: Delete processed raw file (Skybound Jitter Case)
This commit is contained in:
@@ -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]]
|
||||
Reference in New Issue
Block a user