Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

지연 숨기기(Latency Hiding) 본문

TIL(Today I Learned)

지연 숨기기(Latency Hiding)

JavaCPP 2025. 1. 10. 20:51

선형 보간 (Linear Interpolation)

1. 개념

선형 보간은 두 점 사이의 값을 직선적으로 계산하는 기법입니다. 이를 통해 연속적인 움직임이나 상태를 부드럽게 보여줄 수 있습니다. 특히, 네트워크 기반 애플리케이션에서 서버와 클라이언트 간 데이터 전송이 불규칙하거나 느릴 때, 중간 상태를 계산해 끊김 없는 시각적 경험을 제공합니다.


2. 공식

선형 보간은 두 값 AABB 사이에서 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. 작동 방식

  1. 초기 상태: 클라이언트는 서버에서 마지막으로 받은 객체 상태(위치, 속도, 가속도 등)를 저장.
  2. 예측: 이 데이터를 바탕으로 객체가 다음에 위치할 것으로 예상되는 값을 계산.
  3. 보정: 서버가 새 데이터를 보내면 클라이언트는 예측된 상태를 실제 상태와 비교하여 오차를 수정.

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