ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • deterministic physics
    카테고리 없음 2021. 11. 24. 10:58

    1. 부동소수점

      다른 머신에서 동일한 부동 소수점 계산이 다른 결과로 나온다. 그래서 게임 로직이 결과론적인지 확인 하려면 부동 소수점 연산을 피해야 합니다. 그러나 결코 쉬운 일이 아닙니다. 부동 소수점은 게임 엔진, 미들웨어 및 라이브러리의 모든 곳에 있는 기본 타입 입니다. 논리 계산에는 일반적으로 고정 소수점 라이브러리를 사용할 수 있습니다.

     

    2. 결정론적 램덤

      이것은 비교적으로 쉽습니다. 게임 세션이 시작되면 모든 플레이어는 동일한 랜덤 시드를 가져와야 하며, 이는 임의의 모든 랜덤성이 결정적이어야 합니다.

     

    3. 정렬된 데이터 구조

      예를들어 대부분의 언어에서 해시(map, dictionary)의 항목 순서는 보장되지 않습니다. 따라서 해시를 통한 반복은 신중하게 검토하고 SortedDictionary와 같은 것을 선호해야 합니다. 이것은 미묘하고 추적하기 어렵습니다.

     

    4. 물리

     대부분의 물리 엔진은 부동소수점 또는 내부 아키텍처로 인해 결정적이지 않습니다. 그렇다고해서 전혀 사용할 수 없다는 뜻은 아닙니다. 디스플레이를 위한 비 결정적 물리 엔진을 사용 할 수 있습니다. 예를들어 3D 전략 시뮬레이션 게임을 만든다면, 게임 로직에서 x, y축만  결정적인 충돌 감지 기능을 사용하고, 지형의 높낮에에 따라 z축은 물리 엔진을 자유롭게 사용할 수 있습니다. 

     

    5. 로직과 뷰의 분리

      로직은 일반적으로 뷰 레이어(예: 애니메이션)에 의존하지 않아야 합니다. 예를들어 플레이어 ability 시스템을 구현할 때 한가지 방법은 USING_ABILITY로 상태를 변경하고 애니메이션을 재생하는 것입니다. 애니메이션이 끝났을 때 IDLE로 상태를 변경하기 위한 콜백을 추가합니다. 그러나 이는 일반적으로 비결정적인 에니메이션 시스템에 의존한다는 것을 의미 합니다. 

     그래서 플레이어가 ability를 사용할때  USING_ABILITY로 상태를 변경하고, 애니메이션을 플레이 하라고 애니메이션 시스템에 지시합니다. 그리고 10 로직 틱 이후, 애니메이션 시스템을 고려하지 않고 IDLE로 상태를 변경합니다. 또한 로직이 렌더링 프레임과 다른 빈도로 실행되는 것은 매우 일반적입니다. 많은 게임은 10Hz의 로직 틱과 60Hz의 랜더링 틱으로 실행됩니다. 

Designed by Tistory.