Ouzel
Ouzel은 C++로 작성된 자유롭게 사용할 수 있는 크로스 플랫폼 2차원 중심 게임 엔진이다. 게임 렌더링과 소리·입력·애니메이션 등 공통 하위 시스템을 제공하며 Windows·Linux·macOS·Android·iOS·tvOS 및 웹용 이식 코드를 포함한다. 프로그램의 자체 게임 로...
| 분류 | 게임 엔진, 2D 중심 크로스 플랫폼 엔진 |
|---|---|
| 개발자 | Elviss Strazdins (elnormous) |
| 구현 언어 | C++ |
| 주요 버전 계열 | Ouzel 0.x |
| 개발 구조 | 렌더링·오디오·게임 실행 스레드 분리 |
| 장면 구조 | 2D·3D 객체, 장면 및 액터 |
| 렌더러 | Direct3D 11, OpenGL, OpenGL ES, Metal |
| 오디오 백엔드 | XAudio2, CoreAudio, OpenAL, ALSA, OpenSL ES |
| 게임 기능 | 애니메이션·입자, GUI, 자산 캐시 |
| 입력 | 키보드·마우스·게임패드 및 모바일 |
| 주요 운영체제 | Windows, Linux, macOS |
| 모바일·TV | Android, iOS, tvOS |
| 웹 | Emscripten 샘플 |
| 라이선스 | Unlicense, 퍼블릭 도메인 공개 |
| 공식 소스 | elnormous/ouzel |
Ouzel은 C++로 작성된 자유롭게 사용할 수 있는 크로스 플랫폼 2차원 중심 게임 엔진이다. 게임 렌더링과 소리·입력·애니메이션 등 공통 하위 시스템을 제공하며 Windows·Linux·macOS·Android·iOS·tvOS 및 웹용 이식 코드를 포함한다. 프로그램의 자체 게임 로직을 네이티브 코드로 작성하고 플랫폼별 그래픽스와 오디오 차이를 공통 인터페이스에 통합하는 개발 방식에 초점을 맞춘다.[1]
엔진은 장면과 액터 중심으로 게임 객체를 구성하고 위치·회전 등 변환과 애니메이션을 관리한다. 2D 스프라이트·문자열과 GUI·입자 효과 등의 콘텐츠를 장면에 결합할 수 있고, 일부 3D 장면 관리 기능도 지원한다. 렌더링·사운드·게임 로직 작업을 별도 스레드로 구성하는 설계는 사용자 게임 코드와 실제 GPU·오디오 장치 작업을 분리한다.
그래픽스 백엔드로 Direct3D 11과 OpenGL 2·3·4, OpenGL ES 2·3 및 Metal 등이 사용된다. 각 백엔드는 같은 엔진의 화면 그리기 명령을 해당 플랫폼의 GPU 기능으로 연결하지만 하드웨어별 셰이더·렌더 타깃 지원과 성능에는 차이가 있다. 텍스처·글꼴과 자원 캐시, 여러 뷰포트를 사용하여 다수의 화면 요소를 처리할 수 있다.[2]
오디오 백엔드는 Windows의 XAudio2, macOS·iOS의 CoreAudio, Linux의 ALSA·OpenAL 및 일부 Android용 OpenSL ES 등의 기술을 선택해 사용한다. 입력은 키보드·마우스·게임패드와 모바일 이벤트를 추상화하며 GUI 헬퍼와 액터 애니메이션, 트위닝을 게임에 결합할 수 있다. 이미지와 음악·사운드 및 모델 파일은 자원 관리 계층을 거쳐 로딩된다.
공개 저장소의 빌드 자료에는 Windows·macOS와 Linux 외에 Android·iOS·tvOS, Emscripten과 Raspberry Pi에서 실행하는 예제가 소개돼 있다. 이 플랫폼 목록은 프로젝트 특정 버전의 빌드 구성과 SDK를 전제로 하므로 오늘날 모든 기기에서 이전 설정을 그대로 사용하면 동작한다는 뜻은 아니다. 웹에서는 Emscripten을 통해 C++ 코드와 플랫폼 계층을 변환한다.
Ouzel 코드베이스는 Unlicense를 통해 퍼블릭 도메인과 이에 준하는 자유 이용을 의도하여 배포됐다. 외부 SDK와 제삼자 라이브러리 및 콘텐츠는 별도의 라이선스를 따른다. 이 엔진은 작은 네이티브 C++ 게임 코드에서 여러 운영체제의 그래픽스·오디오 백엔드를 재사용하는 크로스 플랫폼 설계의 사례다.[3]