Skip to content

Shell4026/ShellEngine

Repository files navigation

ShellEngine

image 스크린샷 2026-05-11 012031

Video Label
간단한 에디터 데모 영상(Youtube)

개요

저수준 그래픽 API를 직접 다루면서 현대 게임 엔진의 핵심 시스템을 설계, 구현하는 것을 목표로 한 1인 개발 프로젝트입니다.

렌더링 파이프라인 / 멀티스레딩 아키텍처 / 메모리 관리 / 에디터 통합 영역을 스스로 설계했습니다.

특징 및 문서

Vulkan 기반 렌더링 시스템 | 상세 문서

로우레벨 Vulkan API를 직접 사용하여 고성능 그래픽 파이프라인을 구현했습니다.
추후 패스 추가 및 구조 변경이 쉽도록 유니티의 SRP와 유사한 패스 기반 구조를 채택했습니다.

  • Vulkan 커맨드 버퍼 병렬 기록

멀티스레딩 아키텍처 | 상세 문서

게임 스레드와 렌더 스레드를 분리하여 CPU와 GPU 작업이 병렬로 진행되도록 설계했습니다.

  • 이중 버퍼링 + 지연 동기화: 두 스레드가 서로 블로킹하지 않고 프레임 간 안전하게 데이터를 교환
  • 가비지 컬렉션 타이밍: Sync 타이밍에 맞춰 GC가 실행되어 렌더 중 메모리 해제로 인한 크래시를 방지
  • 스레드 풀: 분리 가능한 작업은 Task로 쪼개 병렬 처리, Vulkan 커맨드 버퍼도 병렬로 기록
  • ImGUI 멀티스레드 지원: 기본적으로 멀티스레드를 지원하지 않는 ImGUI를 수정하여 통합 | 상세 문서

런타임 리플렉션 시스템 | 상세 문서 | 구현 과정 (velog)

C++은 기본적으로 런타임 리플렉션을 지원하지 않아 직접 설계, 구현했습니다.

  • 객체의 타입 정보와 멤버 변수 메타데이터를 런타임에 조회, 수정 가능
  • 이를 기반으로 에디터의 Inspector 자동 생성과 가비지 컬렉터를 구현 - 리플렉션 하나로 여러 시스템이 구동되는 구조

리플렉션 기반 가비지 컬렉터 | 상세 문서 | 구현 과정 (velog)

C++에서 메모리 관리를 단순화하기 위해 마크 앤 스윕 방식의 GC를 직접 구현했습니다.

  • PROPERTY 매크로로 등록된 포인터를 리플렉션으로 추적하여 댕글링 포인터를 자동으로 nullptr 처리
  • STL 컨테이너를 상속한 GC 전용 컨테이너로 컨테이너 내 포인터도 안전하게 관리
  • 멀티스레딩 구조의 Sync 타이밍에 동작하여 렌더 중 해제로 인한 문제를 원천 차단
  • GCObject를 상속하여 사용자 정의 구조체 내부의 SObject도 추적 가능

  • 런타임 리플렉션을 활용한 Hierarchy(계층 구조) 및 Inspector(속성 편집) 자동 생성
  • 사용자 정의 Inspector 지원 | 상세 문서
  • 유저 코드 핫-리로드: 엔진 재시작 없이 런타임 중 컴포넌트 코드 추가, 수정 가능 | 구현 과정 (velog)
  • Unity 스타일의 편집 환경 / Blender 스타일의 오브젝트 조작 방식
  • 빌드 시스템

커스텀 셰이더 언어 | 상세 문서 | 구현 과정 (velog)

Unity ShaderLab과 유사한 문법의 셰이더 언어와 하향식 파서(Top-Down Parser) 를 직접 구현했습니다.
파이프라인 설정(블렌딩, 컬링 등)을 셰이더 코드 안에서 선언적으로 작성할 수 있습니다.


컴포넌트 기반 아키텍처 | 상세 문서

Unity와 유사한 컴포넌트-엔티티 구조를 채택하여 기능의 조합과 확장이 용이하도록 설계했습니다.


Physics 시스템 | 상세 문서

ReactPhysics3D를 연동하여 물리 연산 및 충돌 처리를 지원합니다.


크로스 플랫폼 지원 (Windows / Linux)

  • Windows: Win32 API / Linux: X11
  • 플랫폼 독립적인 창 생성 및 이벤트 처리 모듈화

프로젝트 구조 흐름

흐름도

Note

게임 스레드와 렌더 스레드가 분리되어 동작하며, Sync 타이밍에 버퍼를 교환하고 GC가 실행됩니다. 자세한 사항은 '특징 및 문'의 멀티 스레딩 아키텍쳐를 참조 하세요.

생명주기 drawio

게임 스레드내의 모든 객체는 생명 주기를 따릅니다.

구성 요소

구조

설치

Windows

Required

디버그 빌드

cmake --preset x64-debug
cmake --build out/build/x64-debug

릴리즈 빌드

cmake --preset x64-release
cmake --build out/build/x64-release

또는 해당 저장소를 다운 받은 후 Visual Studio에서 폴더를 열고 CMake로 빌드

Linux

Required

sudo apt install build-essential ninja-build
sudo apt install libx11-dev libxext-dev libgl1-mesa-dev

디버그 빌드

cmake --preset linux-debug
cmake --build out/build/linux-debug

릴리즈 빌드

cmake --preset linux-release
cmake --build out/build/linux-release

TODO

  • 스켈레탈 메쉬
  • 애니메이션, 애니메이터
  • Undo/Redo

About

Vulkan C++17 크로스 플랫폼 게임 엔진

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors