TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 39 READS

파일 하나로 N64·플스1에서 물리 엔진 돌리기, Picophysics 이야기

파일 하나로 N64·플스1에서 물리 엔진 돌리기, Picophysics 이야기
SOURCE IMAGE · HACKER NEWS
파일 하나로 N64·플스1에서 물리 엔진 돌리기, Picophysics 이야기

혹시 닌텐도 64나 플레이스테이션 1(PSX), 드림캐스트 같은 옛날 게임기에서 지금도 새 게임이 만들어지고 있다는 사실, 알고 계셨나요? 이런 걸 '홈브류(homebrew)'라고 부르는데요, 공식 지원이 끝난 지 20년도 넘은 콘솔을 위해 취미 개발자들이 직접 게임과 도구를 만드는 문화예요. 오늘 소개할 Picophysics는 바로 이 홈브류 씬을 위한 물리 엔진인데, 특이하게도 파일 딱 하나로 이루어져 있어요. 프로젝트에 파일 하나만 복사해 넣으면 N64, PSX, 드림캐스트 같은 레트로 플랫폼에서 게임 물리를 돌릴 수 있다는 거죠.

물리 엔진이 뭐길래, 왜 레트로 콘솔에선 어려울까요

물리 엔진이 뭐냐면, 게임 속에서 물체가 '그럴듯하게' 움직이도록 계산해주는 코드 뭉치예요. 공이 벽에 맞으면 튕겨 나오고, 상자를 쌓으면 무너지고, 캐릭터가 경사면에서 미끄러지는 것 — 이런 걸 전부 수학으로 계산하는 거거든요. 크게 보면 두 가지 일을 해요. 물체끼리 부딪혔는지 알아내는 '충돌 감지'와, 부딪힌 다음 어떻게 움직일지 계산하는 '충돌 반응'이요.

문제는 레트로 콘솔의 하드웨어가 정말 열악하다는 점이에요. 플레이스테이션 1은 아예 FPU(부동소수점 연산 장치)가 없어요. 요즘 우리가 아무 생각 없이 쓰는 float 연산을 하드웨어가 지원하지 않는다는 뜻이거든요. 그래서 그 시절 게임들은 '고정소수점(fixed-point)' 연산을 썼어요. 이게 뭐냐면, 소수점 위치를 미리 정해두고 정수 연산만으로 소수를 흉내 내는 기법이에요. 예를 들어 3.5를 그대로 저장하는 게 아니라 3584(3.5 × 1024)라는 정수로 저장하고, 계산이 끝나면 다시 스케일을 되돌리는 식이죠. 메모리도 PSX는 2MB, N64는 4~8MB 수준이라, 요즘 웹페이지 하나보다 작은 공간에서 게임 전체가 돌아가야 해요. 이런 환경에서 물리 시뮬레이션을 돌리려면 알고리즘 하나하나를 극한까지 다듬어야 하는 거예요.

'단일 파일 라이브러리'라는 철학

Picophysics의 또 다른 매력은 단일 파일 구성이에요. C/C++ 세계에는 'stb 스타일'이라고 부르는 전통이 있는데요, 션 배럿(Sean Barrett)이 만든 stb 라이브러리들처럼 파일 하나에 모든 코드를 담아서, 복잡한 빌드 설정이나 패키지 매니저 없이 그냥 복사해서 쓰게 만드는 방식이에요. 레트로 콘솔 개발 환경은 플랫폼마다 툴체인이 제각각이라(N64는 libdragon, PSX는 PSn00bSDK, 드림캐스트는 KallistiOS 같은 SDK를 써요) 의존성이 주렁주렁 달린 라이브러리는 이식하기가 정말 고통스럽거든요. 파일 하나면 어떤 툴체인에든 바로 넣을 수 있으니, 이 씬에서는 단일 파일이 사실상 최고의 배포 형태인 셈이에요.

현대 물리 엔진들과 비교하면

요즘 게임 개발에서는 Box2D, Bullet, Jolt, Rapier 같은 물리 엔진이 표준처럼 쓰여요. 유니티나 언리얼에 내장된 물리도 이런 엔진들이 기반이고요. 다만 이 엔진들은 전부 넉넉한 메모리와 빠른 부동소수점 연산을 전제로 설계됐어요. Jolt만 해도 SIMD 명령어와 멀티스레딩을 적극 활용하는데, 1990년대 중반에 나온 콘솔에는 그런 게 있을 리가 없죠. 그래서 레트로 홈브류 개발자들은 지금까지 물리를 직접 바닥부터 짜는 경우가 많았는데, Picophysics처럼 여러 플랫폼을 겨냥한 공용 라이브러리가 나오면 진입 장벽이 확 낮아지는 거예요.

한국 개발자에게는 어떤 의미일까요

'내가 N64 게임 만들 일이 있겠어?' 싶으실 수도 있는데요, 이런 프로젝트의 진짜 가치는 학습에 있다고 생각해요. 제약이 심한 환경에서의 최적화 기법 — 고정소수점 연산, 캐시 친화적인 자료구조, 메모리 할당 최소화 — 은 임베디드 개발이나 모바일 성능 최적화에서 그대로 통하는 지식이거든요. 서버 개발만 하다 보면 '메모리는 사실상 무한하다'는 감각에 익숙해지기 쉬운데, 2MB 안에서 물리를 돌리는 코드를 읽어보면 컴퓨터가 실제로 어떻게 동작하는지 감이 확 살아나요. 코드베이스도 파일 하나 분량이라 물리 엔진의 내부 구조를 공부하는 입문 교재로도 부담이 없고요.

정리하면

Picophysics는 '파일 하나로, 25년 전 하드웨어에서, 게임 물리를'이라는 세 가지 제약을 동시에 만족시키려는 프로젝트예요. 실용성보다는 낭만과 학습 가치가 큰 물건이지만, 그래서 더 들여다볼 만하죠. 여러분은 제약이 빡빡한 환경에서 최적화해본 경험이 있으신가요? 어릴 때 하던 게임기를 위해 직접 뭔가 만들어보고 싶다는 생각, 해보신 적 있나요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://gitlab.com/Kazade/picophysics
SHARE
처리 중...