2013-10-02 1 views
1

나는 avia 시뮬레이터 프로젝트를위한 오픈 소스 Torque 3d 게임 엔진을 사용하고 있습니다. 여러 IG (이미지 생성기) PC에서 단일 이미지를 생성해야합니다. 각 IG 디스플레이에는 특정 각도 오프셋이있는 자체 뷰 카메라가 있으며 LAN을 통해 서버에서 현재 위치에 대한 정보를 얻습니다.게임 엔진의 다른 인스턴스에 의해 생성 된 뷰의 시간 동기화

이미 멀티 IG 시스템을 설정했습니다. 네트워크 연결이 튼튼합니다 (< 1ms 미만) 프레임 속도가 좋으며 각 IG에서 약 70FPS입니다. 그러나 일부 IG은 다른보기보다 빠르게보기를 업데이트하기 때문에 전체 그림을 이동하는 동안 보이지 않습니다.

IG 업데이트를 동시에 수행 할 수있는 솔루션을 찾고 있습니다. 어쩌면 LAN을 통해 연결된 다른 PC를 하나로 만드는 정밀한 시간 동기화 알고리즘이있을 수 있습니다.

답변

1

나는 훨씬 간단한 문제가 있었지만 내 접근 방식이 도움이 될 수 있습니다.

15 밀리 초 틱으로 모든 컴퓨터에서 시계를 실행해야합니다. 각 이미지는 특정 틱에 대해 올바르게 생성되고 틱 ID 시간으로 표시되어야합니다. 디스플레이 기계는 자체 시계를 점검하고, 표시해야하는 특정 틱 번호 (시간)를 결정하고, 특정 시간 동안 이미지를 잡고 표시 할 수 있습니다.

(올바른 사고 방식을 생각하면 네트워크가 실제로 나쁘다고 생각하고 현재 디스플레이 틱보다 1000 개 이미지를 전달하는 IG가 1 개 있고 다른 이미지는 5 틱 뒤에 있다고 생각하십시오. 결과는 당신이 가지고있는 것에서 실제로 좋게 보일 것입니다.)

디스플레이가 IGs 뒤에서 조금씩 돌아가고 싶다면 항상 현재 틱에 대한 전체 이미지 세트를 갖고 있어야합니다. 나는 클라이언트 - 서버 설정을 가지고 있었고 누락 된 업데이트에 가까워지면 디스플레이 (클라이언트) 타이머를 느려지 게했다. 은 모든 IG 머신을 동기화해야하므로, 디스플레이에 마스터 클럭을두고 메시지가 전송되는 것이 좋을 수 있습니다. (당신은 내가 가진 변수 네트워크 지연이 없을 수 있지만, 그들을 위해 계획하는 것이 가장 좋습니다.)

을 키는 디스플레이가 시간 이미지를 포함하는 것이, 각 이미지는 특정 시간에 만들 수 있어야한다는 것입니다 합성 이미지는 필요할 때 바로 나타납니다 (밀리 세컨드마다 15 밀리 초마다). 또한 네트워크 또는 컴퓨터에 따라 을시기 적절하게 수행하지 마십시오. 피드백을 사용하여 모든 것을 동기화 상태로 유지하십시오. 피드백에

추가 :

은 프레임의 마지막 이미지가 한 번에 T 디스플레이 컴퓨터의 시간 (실시간)에 의한 시간 T 후에 5ms의 도착 말한다. T 시간에 T + 10ms의 프레임을 표시하면 어느 누구도 시간 지연에주의 할 것이므로 이미지를 어셈블 할 시간이 충분할 것입니다. 상수 (10ms) 지연을 사용하면 효과적 일 수 있습니다. 특히 충분히 크게 만들면 더욱 그렇습니다. 항상 똑같은 네트워크로 운영되는 경우 이동하는 방법 일 수 있습니다.

하지만 모든 IG 머신이 실시간으로 정밀하게 동기화되고 이미지를 생성하는 데 일정 시간 이상을 소요하며 예측 가능한 시간 내에 디스플레이 시스템에 이미지를 전송하는 경우가 많습니다.

표시 장치에서 수신하는 이미지의 타임 스탬프를 기준으로 지연을 결정하도록하는 것이 좋습니다. 시간상 필요한 이미지를 얻지 못하면 지연을 늘리고, 모든 IG가 디스플레이에 필요한 이미지보다 몇 개의 이미지를 실행하고 있다면 이미지를 줄이는 것이 좋습니다. (때로는 정말 늦은 이미지를 무시하고 싶을 수 있습니다. 구식 인 이미지, 시간이 지나면 눈에 잘 띄지 않는 이미지, 눈에 띄게 속도가 올라가고 속도가 느려지는 디스플레이 등 더 귀찮은 이미지를 선택해야합니다.)

내 원래의 답변에서 IG 기계를 제 시간에 운영하기 위해 디스플레이로부터 어떤 종류의 피드백을 제안했지만 과장 될 수 있습니다. 컴퓨터의 시계는 아마도 충분할 것입니다.

매우 일반적으로 두 프로세스가 시간에 따라 조정해야하는 경우 각 프로세스가 신중하게 시간을 정하게되는 것보다는 단계 (피드백)를 유지하기 위해 서로 이야기하는 것이 가장 좋습니다.

+0

감사합니다. 프로토 타입을 작성하고 아이디어를 확인하려고합니다. "모든 것을 동기화 상태로 유지하기 위해 피드백을 사용함"이란 무엇을 의미합니까? NetTime 유틸리티를 사용하여 네트워크를 통해 내 PC에 시계를 동기화하고 동기화 월드 타임을 사용하여 매 30ms마다 타임 스탬프를 만듭니다. –

+1

@ YuriDobronravin : 의견에 뭔가를 추가했습니다. 당신이 정말로 그것을 필요로하는지, 내가 묘사 한대로 정확하게 원한다면 모른다. 그러나 그 개념은 매우 유용 할 수있다. – RalphChapin