#gfg10 Multiprocessor Game Loops: Lessons from Uncharted 2: Among Thieves
게임루프에 주요 이슈를 잘 정리. bucket 개념을 추가한 게 좋았고 bucket update 사이에 broadphase AABBs를 업데이트하는 게 신선했다.
Optimizing Large-Scale Updates
- 비효율적이다
- 중복 계산
- 리소스 재할당
- 캐시 일관성(cache coherence) 유지가 힘들다.
- 병렬처리에 안 좋다.
Bucketed Game Object Updates
- dependency tree의 level을 bucket으로 개념화.
- bucket 사이에는 종속성이 있지만 bucket 안에서는 없다.
Game Object State Vectors
- 이렇게 패러매터로 시간을 입력받는 vector로 추상화할 수 있다.
- 접근 좋네.
one frame off bug
- 이전 프레임 오브젝트 상태를 참조할 수 있기 때문에 이전 bucket에 있는 오브젝트만 참조할 수 있게 제한
- bucket 순서대로 업데이트되고 …., b-1, b, b+1, …. 순으로 업데이트
- 충돌 검출이 골치아픈 문제인데, bucket 사이에 broadphase AABBs를 업데이트해서 해결
Ways to Achieve Parallelism
- broadphase는 lock이 꼭 필요한데, 비동기로 업데이트하고 최대한 query를 늦추는 방향으로 디자인
발표
- Game Forum Germany 2010
- 발표자: Jason Gregory / Naughty Dog
- 발표자료: pdf
- 발표자료: slideshare