두 개의 네트워크 상태를 보간합니까?


11

나는 클라이언트 측에 시뮬레이션 된 많은 엔티티를 가지고 있으며 (각 프레임마다 속도가 위치에 추가됩니다.) 마지막으로 본 위치와 속도 변화에 대한 업데이트를 보냅니다. 이것은 훌륭하게 작동하며 다른 플레이어는이 작품을 찾습니다. 그러나 잠시 후이 플레이어들은 일정 시간이 지나면 비 동기화되기 시작합니다. 대기 시간 때문입니다.

상태를 올바른 위치에 놓 이도록 상태를 보간하는 방법을 알고 싶습니다. 나는 플레이어가 마지막으로 본 위치와 현재 속도를 알고 있지만 마지막으로 본 상태로 보간하면 플레이어가 실제로 뒤로 이동합니다. 나는 다른 고객들에게 속도를 전혀 사용할 수 없었고 단순히 적절한 방향으로 그들을 '잡을'수 있었지만 이것이 재규어 운동을 일으킬 것이라고 생각합니다. 대안은 무엇입니까?

답변:


9

이러한 이유로, 시뮬레이션이 주어진 시점에 주어진 클라이언트에서 실제로 렌더링되는 것 보다 1 프레임 이상 실행되는 경우가 종종 있습니다 . 다시 말해, 렌더링하는 것은 실제로 마지막 프레임이 아닌 두 번째 마지막 프레임 일 수 있습니다.

이 기사 에서 "ahead"라는 단어의 모든 인스턴스를 검색 하면 위에서 설명한 것보다 더 나은 그림을 얻을 수 있다고 생각합니다.


자, 내가 300ms 전에 플레이어를 렌더하고 미래를 향해 보간해야한다는 것을 암시합니까? (새로운 상태가 도착할 때 별도의 상태에서,이 스위치 것)
본입 힐츠에게

@VaughanHilts 다시 기사와 의견을 읽으십시오. 개퍼는 그 분야의 전문가이며, 내가 할 수있는 것보다 훨씬 명확하게 설명합니다. 그러나 일반적인 아이디어는 그렇습니다. 시뮬레이션 모델은 앞서 있지만 렌더링은 설명 된 효과를 설명하기 위해 렌더링보다 다소 뒤쳐집니다. 내가이 기술을 본 유일한 장소는 결코 아닙니다.
엔지니어

2

네가 얘기 할 때:

이 플레이어들은 일정 시간이 지나면 비 동기화되기 시작합니다

지연 시간 문제보다 시계에서 벗어나는 문제와 관련이 있다고 생각합니다. 지연 시간이 10 분 이상인 경우 시작 시간과 마찬가지로 나빠 야합니다. 한 게임 클럭이 다른 게임 클럭보다 약간 빠르게 실행되면 시간이 지남에 따라 점점 더 악화되는 이상한 지터 아티팩트가 있습니다. 현재 클라이언트가 현재 패킷이 서버에서 도착할 때 클라이언트를 시뮬레이트하여 클라이언트를 뒤로 끌어 당겨 엔터티가 이동하게 할 수 있습니다. 더 많은 테스트를 실행하여 찾으십시오.

동기화되지 않은 게임 시계가 실제로 문제가되는 경우 업데이트 루프를주의 깊게 살펴보고 모든 업데이트가 통과 한 게임 시간 (고정 또는 가변)을 기반으로하고 게임이 정확한지 확인해야합니다. -시간은 벽시계와 같은 것을 사용하여 진행됩니다 (렌더링 시간이나 다른 변수는 아님). Gaffer는 이것에 관한 좋은 기사 를 가지고 있으며 여기에 고정 대 가변 시간 단계에 대해 이야기하는 적절한 질문이 있습니다 . 도움이 되었기를 바랍니다.


이것은 사실이 아닙니다. 사실이 너무 멀었습니다 (지연 스파이크 또는 무언가- '정지'할 패킷이 제 시간에 수신되지 않고 클라이언트가 제 시간에 스스로 수정할 수 없다는 사실입니다. 케이스 때문에 클라이언트가 중지 된 후 내가 할 수있는 대부분의 위치로 DEFINTELAY의 보간 백.
본입 힐츠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.