NickelEngine
NickelEngine은 개발자 VisualGMQ가 제작하는 C++ 기반의 오픈 소스 게임 엔진 프로젝트다. 데이터와 실행 로직을 분리하는 엔티티 컴포넌트 시스템(ECS)을 중심에 두고 그래픽스·반영(reflection)·장면 편집기 등을 자체 구성하려는 연구·개발 성격의 엔진이다. 2...
| 분류 | 게임 엔진, 데이터 중심 ECS 기반 엔진 |
|---|---|
| 개발자 | VisualGMQ |
| 개발 형태 | 개인 개발·공개 소스 연구 프로젝트 |
| 개발 언어 | C++17 중심 |
| 기반 개념 | ECS |
| 구형 ECS 참고 | EnTT |
| 신규 ECS 설계 목표 | Archetype 기반 모델(Flecs 참고) |
| 그래픽스 구형 구성 | Vulkan, OpenGL·OpenGL ES |
| 그래픽스 재설계 | Vulkan 중심 전환 계획 |
| 초기 편집기 | Dear ImGui 기반 |
| 새 편집기 목표 | Qt 6 |
| 반영 시스템 | C++ 헤더 기반 코드 생성·정적·동적 반영 연구 |
| 빌드 도구 | CMake, Python 코드 생성기 |
| 개발 플랫폼 | PC 개발 중심, Android 프로젝트 파일 포함 |
| 개발 현황 | 엔진 전면 재작성 진행 |
| 초기 코드 | NickelEngine-backup에 보존 |
| 공개 라이선스 | MIT License |
| 소스 코드 | VisualGMQ/NickelEngine |
| 개발자 소개 | VisualGMQ 프로젝트 목록 |
| 기술 시연 | NickelEngine 소개 영상 |
NickelEngine은 개발자 VisualGMQ가 제작하는 C++ 기반의 오픈 소스 게임 엔진 프로젝트다. 데이터와 실행 로직을 분리하는 엔티티 컴포넌트 시스템(ECS)을 중심에 두고 그래픽스·반영(reflection)·장면 편집기 등을 자체 구성하려는 연구·개발 성격의 엔진이다. 2024년에는 초기 엔진을 소개하는 시연 영상이 공개됐고, 이후 기존 구현을 보관하면서 기본 시스템을 재작성하는 작업으로 방향을 전환했다. 현재의 저장소는 상용 범용 엔진의 안정판이라기보다 차세대 구조를 구축하는 개발 중 코드베이스다.[1]
원래 NickelEngine은 C++17과 ECS 프레임워크를 중심으로 구성됐으며 개발자는 EnTT와 Bevy 등의 데이터 중심 설계에서 아이디어를 얻은 별도 ECS·반영 기능을 제작해 왔다. 기존 ECS에는 EnTT를 참고한 부분이 있고, 개발자는 새 버전에서 Flecs와 유사한 Archetype 기반의 ECS를 구현하고 싶다고 설명한다. 엔티티에 연결된 컴포넌트의 조합에 따라 자료를 그룹화하면 동일한 구성 요소를 사용하는 많은 객체를 효율적으로 처리할 수 있다. 다만 이 자료 배치는 재작성 목표이므로 구버전과 새 버전 모두에서 완성된 동일 API로 제공된다고 단정할 수 없다.[2]
그래픽스 분야에서도 세대별 변화를 구별해야 한다. 과거 엔진은 Vulkan과 OpenGL·OpenGL ES 경로가 공존하는 구조였지만 새 버전에서는 Vulkan에 집중할 계획이라고 개발자가 밝혔다. 이 전환은 하나의 렌더러에서 여러 API를 항상 지원한다는 방식과 다르며, 셰이더·자원 관리·GPU 명령 제출과 렌더링 도구를 새 구조에 맞춰 재구현하는 것을 뜻한다. 대상 게임이나 그래픽스 데모의 기능과 실제 플랫폼 호환성은 각 시기의 소스 및 지원 백엔드를 기준으로 판단해야 한다.
자체 반영 시스템과 코드 생성 도구도 엔진의 중요한 연구 영역이다. 구형 구현에는 C++ 객체의 속성과 타입을 편집기 및 직렬화 시스템에 노출하는 반영 기능이 존재했고, 새 설계에서는 헤더 파일을 해석하는 Python 기반 코드 생성기를 개선하려고 한다. 반영 자료는 게임 객체를 자동으로 저장하거나 편집기 속성 패널에 표시하는 데 활용할 수 있다. 저장소는 해당 도구의 Python 의존성을 설치하고 CMake 프리셋으로 엔진을 컴파일하는 절차를 안내한다.[3]
편집기와 개발 도구의 재구성도 진행된다. 원래 버전의 사용자 인터페이스는 Dear ImGui로 구현했으며 새 버전에서는 Qt 6 기반 편집기를 계획하고 있다. 동시에 외부 라이브러리의 서브모듈 의존성을 줄이고 작은 라이브러리 소스를 프로젝트에 통합해 빌드 재현성을 높이는 방향을 선택했다. 개발자는 기능 변경과 버그 수정에 이슈 번호를 연결하고 CI를 통해 기본 브랜치가 컴파일 가능한 상태로 유지되도록 하는 개발 절차를 소개한다. 이는 렌더링 성능뿐 아니라 엔진 코드베이스의 유지보수성과 개발 경험을 중시하는 변화다.[4]
저장소에는 C++ 코드·CMake 설정과 Android 관련 프로젝트가 포함되어 있지만, 목록에 존재하는 플랫폼 파일이 곧 모든 기능의 안정된 배포 지원을 뜻하지는 않는다. 엔진은 MIT License로 공개되며 원본 저장소의 LICENSE 파일과 소스·도구를 이용할 수 있다. 구버전이 별도 보존 저장소로 옮겨졌다는 사실은 프로젝트 자체가 다른 기업의 새로운 엔진으로 변경됐다는 의미가 아니라 같은 개발자의 코드 재구성에 해당한다. NickelEngine은 ECS와 반영, Vulkan 중심 렌더링, 편집기 개발을 함께 실험하는 공개 C++ 게임 엔진의 사례다.[5]