Percularity is a a game engine programmed from scratch with C++ using open third-party libraries. It has been developed by Daniel Lorenzo & Joan Marín, two third course students of the Bachelor’s Degree in Video Games by UPC at CITM. The purpouse of the subject was to build a game engine useful enough it could allow us to develop a game with the whole class as a big team. Using pairs, each team developed their own version of the program with the idea of mergeing the best parts of each of them into the best game engine we could get.
You can download Percularity’s latest release or check out our GitHub repository!
About Percularity
Main core sub-systems
The main core sub-systems that form Percularity are the following:
The resource manager handles all the external files that are loaded into the engine. Whenever the user drags and drops a texture, an image, a JSON file or an FBX, this subsystem reads it using Assimp and DevIL, importing them into Percularity’s own file format and stores it in its library.
The camera manages the frustum culling, which renders only what is inside the view of the camera and the mousepicking, that allows the user select GameObjects clicking in them.
The scene has all the GameObjects and is in charge of Game mode, all the hierarchy of the GameObjects and the save and load of projects.
The renderer is in charge of the UI (wich uses ImGui) and controls the order of what is visible on the screen.
The physics sub-system is in charge of managing the dynamics of the GameObjects, such as gravity and interactions between them.
The application is the most important sub-system. Is in control of all the modules and makes its loop.
Specialized sub-system
Since we wanted the engine to be used for creating the game, each pair of students specialized the last delivery of the game engine development in one specific subsystem. The sub-system we chose was physics. With it, we programmed the possibility of adding ridigbodies as GameObject components (either box, sphere or capsule colliders), and we implemented the possibility of controlling a car in Game mode, which can interact with the scene and its collisions. Appart from that, the user can shoot spheres from the camera also to test the physics and we have added a sphere collider around the camera that prevents it from getting inside the meshes of the GameObjects.