Untold Engine
"A Swift-based 3D game engine for macOS and iOS, designed with simplicity in mind."
The Untold Engine is an open-source 3D game engine I’m developing for macOS and iOS. Built with Swift and Metal, it focuses on making game development easier and more accessible, while still offering the tools needed to create engaging 3D experiences.
Features So Far
- Simple API: Designed to be easy to understand and use, even for beginners.
- Metal Integration: Leverages Apple’s graphics API for smooth and efficient rendering.
- Core Systems: Includes essential components like rendering, physics, and entity management.
What’s Next?
The engine is still evolving, with plans to:
- Add more advanced physics and collision detection.
- Improve rendering features for better visuals.
- Continue expanding the tools and systems to support a wide range of game ideas.
Get Started with the Untold Engine
Getting started with the Untold Engine is simple. Whether you’re curious to explore or ready to build your own game, I’ve designed multiple paths to suit your needs.
Prerequisites
To start using the Untold Engine, you’ll need:
- An Apple computer.
- The latest version of Xcode, available on the App Store.
Quick Start Guide
Want to see the engine in action? Follow the Quick Start Guide on GitHub to set everything up in minutes.
Choose Your Path
I’ve made it easy to get started, whether you want to:
- Explore: Try out a demo scene to see what the engine can do.
- Learn: Dive into tutorials and learn the basics of game creation.
- Create: Start building your own game with the provided templates and tools.
Ready to begin? Head over to the Untold Engine GitHub page to download the engine and access detailed instructions.
Release Notes
Beta Version v0.1.0 In this version, the Untold Engine was completely re-written in Swift and Metal. And makes use of an ECS design.
Beta Version v0.0.16 In this version, I implemented an Editor using the ImGui library. I also, implemented a scripting system using the Gravity Scripting Language and improved the workflow of the engine.
Beta Version v0.0.15 I improved the Rendering System. Actually, rewrote most of it to accomodate future implementation for a Render Graph. I also implemented Triple Buffering, a G-Buffer render pass, Shader Hot-Reloading, among other things.
Beta Version v0.0.14 The engine now supports a Scene Manager and Layer entities. I also implemented a Shader Entity, which allows developers to write their own HUD shaders. Group AI Steering Behaviors were also added to the engine, such as Separation, Cohesion, Alignment, and Flocking behaviors. I also fixed an issue with the Normal Maps.
Beta Version v0.0.13
In this version, several issues were fixed. The loading of 3D models was improved. The engine now imports 3D model attributes by reading binary files instead of XML files. The Convex Hull computation was removed. This is now computed offline in the Digital Asset Converter utility. Data to GPU transmission was also improved. Mouse and Keyboard support was also added. And the computed navigation path was improved.
Beta Version v0.0.12
In this version, an Artificial Intelligence System was implemented in the Untold Engine. It contains several Steering Behaviors such as Seek, Arrive, Pursuit, Collision Avoidance, and Wonder. A Navigation System using the A* Pathfinder algorithm was also implemented.
3D characters are also capable of going up and down slopes.
Beta Version v0.0.11
The engine now implements a Camera System which allows the camera to behave as a First Person Camera, Third Person Camera and as a Basic Follow Camera. The Camera Culling was also improved. It now allows the developer set the desired Culling interval. Finally, the Particle System was improved to produce 3D particles. Read More
Beta Version v0.0.10
In this version of the engine, I added support for a wireless game controller. Since, the engine uses the Metal API, the engine is thus capable of running a game on several devices such as iOS and Mac. The video shows a small demo running on my Mac. Read More
Beta Version v0.0.9
The engine implements the GJK algorithm to detect collision. The Collision Detection system worked fine between objects of similar size. However, for disproportionate size objects, i.e., terrain and a cube, the collision algorithm would fail 50% of the time. It took me over two months to improve the collision detection between disproportionate objects. It is not perfect, but it works within constraints. Read More
Beta Version v0.0.8
Substantial memory leaks were happening all over the engine. The leakage was something I could no longer ignore, so this month I focused on fixing this issue. I used Xcode's Instrument app to help me locate the memory leakage throughout the engine. I'm now happy to say that the engine is leakage free. Read More
Beta Version v0.0.7
This month I decided to scrap the original Particle System I had written back in v0.0.4 and focused on implementing a real Particle System. As the video shows, the engine is capable of creating smoke, explosions, snow and many other particles using its new Particle System. Read More
Beta Version v0.0.6
These past two weeks I've been working on implementing a Frustum Culling algorithm for the engine.
The logic behind a Frustum Culling algorithm is essentially this:
"If the camera does not see the 3D model, then the engine should not render it".
Implementing this logic, allows you to have 100 models in a game, but only 10 or so many models being rendered at any time. Thus, improving the game experience. Read More
Beta Version v0.0.5
In version v0.0.5, I ported the game engine from OpenGL to Apple's Metal API.
Initially, I planned to keep working on the 3D soccer game using v0.0.4 of the engine. However, I decided to port the engine once I saw an Augmented Reality demo. I realized that Augmented Reality (AR) is the future of gaming and it may be a good idea to have this feature available in the engine. However, the AR framework only works with the Metal API; it does not support OpenGL. Read More
Beta Version v0.0.4
In this beta version v0.0.4, I implemented a primitive particle system, thus allowing explosion effects to occur once a missile hits the asteroid. I also enabled multi-touch, this allows the spaceship to turn as it speeds up. I also set up collision filters among object types. For example, object A and object B can collide; object A and object C can collide, but any collision among object B and Object C is ignored. Read More
Beta Version v0.0.3
In this beta version v0.0.3 of the engine, animations and collision detection can work simultaneously. The BHV algorithm was improved helping the engine make better decisions when pairing up 3D models for collision detection. The MVC (Model-View-Controller) flow of information was also improved. Read More
Beta Version v0.0.2
In Beta version v0.0.2, the game engine is capable of detecting collision between any convex models. Emulates physical forces such as gravity, drag, etc. Renders shadows.
Beta Version v0.0.1
In Beta version v0.0.1, the game engine is capable of rendering 3D models with textures/normal maps, animation, skyboxes, fonts, sprites and contains a digital asset importer.