Metal-Based Game Engine in Swift
Palico Engine: Metal-Based Game Engine in Swift ?
Implement a game engine on macOS using Metal API. Still in development. Currently I am working on a more capable entity-component-system MothECS ?
Palico – It is a cat-like combat companion in Monster Hunter!
Palico Engine’s Sprint Board on Jira (need permission request). Currently there are 65 issues in total!
? Install & Run
# Clone
git clone https://github.com/forkercat/PalicoEngine.git
cd PalicoEngine
# Compile
swift build
# Run
swift run Editor
? User Guide
Mouse Controls:
Command + Left
: Rotate cameraRight
: Look aroundMiddle
: PanScroll
: Zoom in/out
Keyboard Controls:
Tab
: Select next in-scene objectF
: Focus on objectQ
: No actionW
: TranslateE
: RotateR
: Scale
Create GameObject:
? Dependencies
dependencies: [
.package(url: "https://github.com/forkercat/OhMyLog.git", .branch("main")),
.package(url: "https://github.com/forkercat/MathLib.git", .branch("main")),
.package(url: "https://github.com/forkercat/MothECS.git", .branch("main")),
.package(url: "https://github.com/forkercat/SwiftImGui.git", .branch("update-1.86-docking")), // forked from @ctreffs
.package(url: "https://github.com/forkercat/SwiftImGuizmo.git", .branch("master")), // forked from @ctreffs
],
Thanks to SwiftImGui by @ctreffs I am able to use ImGui in this application.
I forked the repository and wrapped ImGui v1.86 and added new OSX backend file. Related PRs:
? Future Development
Rendering:
- Add skybox
- Add shadow
- Support PBR
- Support deferred rendering (render pass has already been setup)
Model:
- Load 3D models
- Load textures in models
- Load animation
Other:
- Improve MothECS
- Integrate ImGuizmo
- Property/Inspector panel
- Game object selection
- Scene loading (yaml)
- Content browser (Asset Panel)
? Reference
Started by following game engine turotial series by TheCherno and wrote implementation in C++. Also check out Hazel Engine repository. It is a great learning resource!
- Metal by Tutorial by Caroline Begbie & Marius Horga
- ImGui on GitHub: ocornut/imgui, cimgui/cimgui, ctreffs/SwiftImGui
- More to be added!