16MHz 386SX CPU에서 돌린 초대 심시티의 최적화 비법
원제 How to run a city builder on 16 MHz
100 포인트댓글 29
Key Point
초고성능 현대 하드웨어에서도 시뮬레이션 게임이 버거워하는 반면, 30년 전 16MHz CPU에서 풀 기능 도시 시뮬레이션을 돌렸던 기법이 오늘날 최신 게임 엔진에서도 여전히 핵심 최적화 원리로 쓰이고 있다.
핵심 요약
- 1989년 초대 심시티는 16MHz로 작동하는 인텔 386SX 프로세서에서 풀 기능의 도시 시뮬레이션을 구현했으며, 2008년 GPL 라이선스로 공개된 마이크로폴리스 소스코드를 통해 그 최적화 기법을 분석할 수 있다.
- 시뮬레이션의 핵심은 Simulate() 함수로, 교통, 화재, 전력, 범죄 등 각 시스템을 업데이트하는데 매 프레임마다 모든 함수를 호출하면 CPU가 감당할 수 없다.
- 해결책은 mod16 파라미터를 사용해 0~15 사이를 순환하며 각 프레임마다 특정 시뮬레이션 부분만 실행하는 것으로, 전체 시뮬레이션이 완성되려면 평균 8프레임, 최악의 경우 15프레임이 필요하다.
- 이 방식은 입력 반응이 지연되지만, 도시 시뮬레이션에서는 즉각적인 반응보다 자연스러운 변화 시간이 게임플레이에 더 적합하다.
- 같은 원리를 2014년 레이싱게임 어세토 코르사가 사용했는데, 매 프레임마다 6개 큐브맵 면을 모두 업데이트하지 않고 FACES_PER_FRAME 설정에 따라 일부만 업데이트해 환경 반사를 렌더링한다.
- 언리얼의 루멘 같은 고급 렌더링 시스템도 매 프레임 조명을 완전히 재계산하지 않으며, 화면 크기나 마지막 업데이트 이후 시간 같은 런타임 요소에 따라 작업량을 동적으로 결정한다.
- 프레임 분산 최적화는 렌더링 코드에서 가장 흔하지만, 게임플레이 코드에서도 매 프레임 모든 코드를 실행할 필요가 있는지 검토하면 성능을 크게 개선할 수 있다.