개발자공부일기
지연 숨기기(Latency Hiding) 본문
선형 보간 (Linear Interpolation)
1. 개념
선형 보간은 두 점 사이의 값을 직선적으로 계산하는 기법입니다. 이를 통해 연속적인 움직임이나 상태를 부드럽게 보여줄 수 있습니다. 특히, 네트워크 기반 애플리케이션에서 서버와 클라이언트 간 데이터 전송이 불규칙하거나 느릴 때, 중간 상태를 계산해 끊김 없는 시각적 경험을 제공합니다.
2. 공식
선형 보간은 두 값 AA와 BB 사이에서 tt (0과 1 사이의 값)에 따라 중간 값을 계산합니다.
Lerp(A,B,t)=A+(B−A)×tLerp(A, B, t) = A + (B - A) \times t
- AA: 시작 값
- BB: 끝 값
- tt: 보간 계수(0일 때 AA, 1일 때 BB)
3. 예제
캐릭터의 위치가 서버에서 A=(10,10)A = (10, 10), B=(20,20)B = (20, 20)로 업데이트된 경우, 클라이언트는 tt 값을 사용해 중간 위치를 계산합니다.
function lerp(start, end, t) {
return start + (end - start) * t;
}
// 예제: X, Y 좌표를 선형 보간
let startX = 10, startY = 10;
let endX = 20, endY = 20;
let t = 0.5; // 중간 지점
let currentX = lerp(startX, endX, t);
let currentY = lerp(startY, endY, t);
console.log(`현재 위치: (${currentX}, ${currentY})`); // (15, 15)
4. 장점
- 부드러운 움직임: 네트워크 데이터가 지연되거나 누락된 경우에도 자연스러운 이동을 보장.
- 간단한 계산: 계산이 직선적이므로 구현이 쉽고 성능에 큰 영향을 주지 않음.
5. 단점
- 직선적인 결과: 두 점 사이의 경로가 직선으로 고정되어 비자연스러울 수 있음.
- 미래 데이터 필요: 목표 값 BB를 미리 알고 있어야 작동 가능.
추측항법 (Dead Reckoning)
1. 개념
추측항법은 현재 상태와 물리적 속성을 기반으로 미래 상태를 예측하는 기법입니다. 이는 네트워크 지연으로 인해 서버의 최신 상태를 즉시 받을 수 없는 상황에서 사용됩니다. 클라이언트는 이전 데이터와 현재 데이터를 바탕으로 객체의 위치나 상태를 예측해 사용자에게 보여줍니다.
2. 작동 방식
- 초기 상태: 클라이언트는 서버에서 마지막으로 받은 객체 상태(위치, 속도, 가속도 등)를 저장.
- 예측: 이 데이터를 바탕으로 객체가 다음에 위치할 것으로 예상되는 값을 계산.
- 보정: 서버가 새 데이터를 보내면 클라이언트는 예측된 상태를 실제 상태와 비교하여 오차를 수정.
3. 예제
아래는 일정 속도로 움직이는 객체의 위치를 예측하는 간단한 추측항법 구현입니다.
class Player {
constructor(x, y, velocityX, velocityY) {
this.x = x; // 현재 위치
this.y = y;
this.velocityX = velocityX; // 속도
this.velocityY = velocityY;
this.lastUpdate = Date.now(); // 마지막 업데이트 시간
}
// 다음 위치를 예측
predictPosition() {
const now = Date.now();
const deltaTime = (now - this.lastUpdate) / 1000; // 초 단위 시간 경과
this.lastUpdate = now;
this.x += this.velocityX * deltaTime;
this.y += this.velocityY * deltaTime;
return { x: this.x, y: this.y };
}
// 서버 데이터를 받아 보정
correctPosition(serverX, serverY) {
this.x = serverX;
this.y = serverY;
}
}
// 사용 예
const player = new Player(10, 10, 2, 3); // 초기 위치와 속도
console.log(player.predictPosition()); // 예측된 위치 출력
player.correctPosition(12, 14); // 서버 데이터로 보정
console.log(player);
4. 장점
- 실시간 반응성: 서버 응답을 기다리지 않고 사용자 입력에 즉시 반응.
- 적용 범위가 넓음: 캐릭터 움직임, 물체 충돌, 궤적 예측 등 다양한 시뮬레이션에서 활용 가능.
5. 단점
- 보정 오차: 서버 데이터와 클라이언트 예측 간의 차이로 인해 "워프"(갑작스러운 위치 이동)가 발생할 수 있음.
- 복잡성 증가: 속도, 가속도 등을 고려한 예측 알고리즘이 복잡해질 수 있음.
선형 보간 vs 추측항법
특징 | 선형 보간 (Linear Interpolation) | 추측항법 (Dead Reckoning) |
핵심 개념 | 현재와 미래 값을 연결해 중간 값을 계산 | 현재 데이터를 바탕으로 미래 상태를 예측 |
필요한 데이터 | 시작 값과 목표 값 | 현재 위치, 속도, 가속도 등 동적 데이터 |
복잡성 | 비교적 간단 | 상대적으로 복잡 |
적용 분야 | 부드러운 움직임 구현 (애니메이션, 상태 전환) | 멀티플레이어 게임, 네트워크 상태 동기화 |
주요 문제 | 직선적 움직임으로 비자연스러울 수 있음 | 보정 오차로 인해 비정상적인 상태 발생 가능 |
'TIL(Today I Learned)' 카테고리의 다른 글
버퍼 객체 (0) | 2025.01.14 |
---|---|
RAM (0) | 2025.01.13 |
대칭키, 비대칭키 암호화 (0) | 2025.01.08 |
게임에서 쓰이는 삼각함수 (0) | 2025.01.07 |
컴퓨터구조 - CPU (0) | 2025.01.06 |