---
title: "슈퍼 마리오 64의 움직임과 렌더링을 외부 게임 엔진에서 쓰는 라이브러리, libsm64"
published: 2026-07-27T10:04:48.000Z
canonical: https://jeff.news/article/5143
---
# 슈퍼 마리오 64의 움직임과 렌더링을 외부 게임 엔진에서 쓰는 라이브러리, libsm64

libsm64는 SM64 디컴파일 프로젝트에서 나온 마리오의 이동·렌더링 코드를 공유 라이브러리로 감싸, Unity·Godot·Blender 같은 외부 엔진에서 마리오를 넣어볼 수 있게 만든 오픈소스 프로젝트야. 다만 텍스처와 애니메이션 데이터는 공식 SM64 ROM에서 런타임에 추출해야 해서, 프로젝트 사용자는 직접 ROM을 제공해야 해.

- libsm64는 슈퍼 마리오 64의 마리오 이동·렌더링 코드를 외부 게임 엔진에서 쓰기 쉽게 만든 공유 라이브러리임
  - SM64 디컴파일 프로젝트에서 복원된 코드를 기반으로 함
  - 목표는 기존 엔진이나 시스템에 “마리오를 최소한의 노력으로 떨어뜨려 넣을 수 있게” 하는 것임

- 프로젝트가 직접 게임 에셋을 배포하지는 않음
  - 라이브러리는 런타임에 공식 SM64 ROM을 읽어서 마리오 텍스처와 애니메이션 데이터를 추출함
  - 그래서 이 라이브러리를 쓰는 프로젝트는 사용자에게 ROM을 직접 제공하라고 요구해야 함

> [!IMPORTANT]
> 코드 인터페이스는 오픈소스로 제공되지만, 마리오의 텍스처와 애니메이션 같은 에셋은 공식 ROM에서 가져오게 되어 있음. 게임 디컴파일 프로젝트에서 자주 보이는 법적 경계선이 여기에도 그대로 있음.

- 외부 API는 `libsm64.h`에 모여 있음
  - 클라이언트 프로젝트는 이 헤더를 include하고 공유 라이브러리를 로드하는 방식으로 붙이면 됨
  - `test` 디렉터리에는 최소 예제가 있어 라이브러리 사용 흐름을 확인할 수 있음

- 바인딩과 플러그인 생태계가 생각보다 넓음
  - Rust, Odin, C# 바인딩이 있음
  - Unity 플러그인, Godot 애드온, Blender 애드온, Game Maker 8 확장도 제공됨
  - Unity 쪽은 MelonLoader 모드와 BepInEx 플러그인까지 언급됨

- 빌드 요구사항은 비교적 전형적인 C/C++ 오픈소스 프로젝트 느낌임
  - python3가 필요함
  - 테스트 프로그램을 빌드하려면 SDL2와 GLEW가 필요하고, Ubuntu 기준으로는 `libsdl2-dev`, `libglew-dev`를 설치하면 됨
  - glibc 대신 musl libc로 링크하고 싶으면 `LIBSM64_MUSL=1 make`를 쓰면 됨

- 테스트 실행에는 `baserom.us.z64`라는 이름의 SM64 US ROM이 저장소 루트에 필요함
  - Linux와 Windows MinGW 빌드 모두 같은 ROM 파일 이름을 요구함
  - Windows에서는 MSYS2 MinGW 64 설정을 따라가되 저장소 URL만 libsm64 쪽으로 바꾸면 됨

- WebAssembly 빌드도 지원함
  - `emmake make CC=emcc`로 빌드할 수 있음
  - standalone 형태로 JS에서 호출하고 싶다면 `emcc dist/libsm64.so -o libsm64.js`를 추가로 실행해 `libsm64.wasm`과 `libsm64.js`를 만들 수 있음

---

## 기술 맥락

- libsm64의 기술적 선택은 게임 전체를 포팅하는 게 아니라, 마리오의 움직임과 렌더링 코드를 라이브러리 경계로 잘라내는 거예요. 그래서 외부 엔진 입장에서는 게임 전체를 끌고 오는 대신 필요한 캐릭터 로직만 호출할 수 있어요.

- 에셋을 ROM에서 런타임 추출하게 한 이유는 코드와 저작권 에셋을 분리하려는 의도가 커요. 디컴파일 코드 자체는 다룰 수 있어도 텍스처와 애니메이션 데이터를 같이 배포하면 문제가 커질 수 있거든요.

- `libsm64.h` 하나를 외부 API의 중심으로 둔 것도 실용적인 선택이에요. Unity, Godot, Rust, C#처럼 붙는 쪽이 다양할수록 C ABI에 가까운 얇은 경계가 유지보수하기 편하고, 바인딩도 만들기 쉬워요.

## 핵심 포인트

- libsm64는 SM64 디컴파일 코드의 이동·렌더링 로직을 외부 엔진에서 쓰기 쉽게 공유 라이브러리로 제공함
- 외부 API는 libsm64.h에 모여 있고, 클라이언트는 해당 헤더와 라이브러리만 로드하면 됨
- Rust, Odin, C#, Unity, Godot, Blender, Game Maker 8 등 여러 바인딩과 플러그인이 있음
- 빌드에는 python3가 필요하고, 테스트 프로그램에는 SDL2와 GLEW가 필요함
- WebAssembly 타깃으로도 빌드할 수 있어 브라우저나 JS 연동 실험도 가능함

## 인사이트

이 프로젝트는 게임 보존, 디컴파일, 엔진 통합이 만나는 꽤 흥미로운 사례야. ‘마리오를 어디에나 넣는다’는 밈처럼 보이지만, 실제로는 레거시 게임 로직을 라이브러리 경계로 분리해 재사용하는 방식이라 게임 개발자에게 꽤 배울 지점이 있음.
