태그 : DirectX
2007/08/08 다시 Direct3D [2]
2006/08/05 [DirectX]멀티 스레드를 이용한 리소스 로딩 [3]
게임을 하다보면 랙이라 불리는 게임의 메인루틴이 멈추는 순간이 있는데 이는 파일입출력, 버퍼 생성, d3d Surface 락, 생성등의 작업 수행시 일어나는 불가피한 게임 메인루틴의 지연순간을 말하는 것이다.
일단 리소스의 정의는 파일에서 읽어들이는 데이터라고 한정을 하고 게임내 리소스 객체들의 로딩및 생성시에, 로딩루틴과 메인루틴을 분리하여, 메인루틴의 지연현상을 없애는 방법 2가지를 알아 보자.
1. 맵단위나 존단위로 리소스를 분류한뒤, 맵에 들어갈 시나, 존 이동시에
전에 들고있던 리소스들을 릴리즈 시키고, 새 맵의 데이터를 로딩하는 방법.
2. 맵을 일정크기로 나누고(sector,block) 실시간으로 일정범위안에 들어
있는 리소스들을 로딩하고, 일정범위를 벗어난 객체들을 릴리즈시크는 방법.
1번의 방법의 경우, 처음 시작시에 리소스들을 다 로딩하므로 실제 게임시 맵의 교체가 없다면 로딩에 의한 지연 현상이 없지만 이 방법은 맵의 규모와 맵안에 존재하는 리소스의 양에 비례해서 로딩시간이 길어지고, 모든 리소스들을 들고 있어야 하므로 메모리를 많이 차지하여 클라이언트가 무거워지고, 고가상메모리까지 사용함으로써 하드디스크 스와핑까지 일어나 전체적속도가 급격히 떨어지는등.. 일정규모 이상의 맵이나 리소스를 가지는 게임의 경우 사용하기 부적합한 방법이라 할 수 있다.
# by | 2006/08/05 01:11 | Knowledge-Warehouse | 트랙백(11) | 덧글(3)
◀ 이전 페이지 다음 페이지 ▶