Interface Engine

Game engines have become increasingly complex and feature filled. However, at its core, they are fairly simple to comprehend and understand. The game engine is a microcosm of an operating system - managing resources and coordinating execution. The main difference is that game engines are optimized for an active cycle, one where computation is continuous and timing does in fact play a part. There are a number of shared resources including the render targets, but otherwise a number of different processes can be in play. The individual game just specifies a single startup process but then can load or unload different startup processes. A scheduler can help manage and balance the resource usage across multiple threads.

Since core simulation and rendering loop processes are repetitive, we define these processes as a graph of producers and consumers which will allow the scheduler to understand synchronization points to better balance execution. Processes are responsible for allocation and release of the resources that they request and load.

Engine Overview

Systems

These are the core systems which need to be implemented for the engine.

  • Orchestration - The many systems of a simulation must be coordinated in execution. We define orchestration as running the game loop and managing all the different systems which goes into creating the end experience for the user.
  • Simulation - The world must be simulated in order to create an immersive experience. We have to define the component entity model which we will expose as the interface for interacting with the engine, but can also be used as the basis for all game simulation.
  • Graphics - The world must be rendered to the user. We need to define a number of primitives to be rendered including meshes and particle effects and the corresponding system for managing shaders and the data buffers being composed and sent to the GPU each frame.
  • User interface - While the user interface is not strictly necessary, it is an invaluable debugging and development tool. We would also like to implement complex interfaces in our use of the engine.
  • Input devices - We want to manage all the different input devices which a user can use. The more immersive or complex the environment is, the more useful additional methods of inputs can be. Having a flexible system allows user customization and a better experience.
  • Resource management - Large number of objects need to be loaded and managed to create an immersive experience. These resources need to be properly cached and evicted when necessary. Different capabilities of different computers will change the constraints for our resources and need to be managed.
  • Networking - Large scale games have networking as a requirement. The simulations we wish to create also need to be networked and thus this is a requirement.
  • Serialization - We need to be able to save and load state of the world.
  • Packaging - For distributions, we need to be able to package our assets and properly distribute updates.

Tools

In addition to the engine, we must develop a set of tool to support development.

Problem Sets

  • Lots of edge, content generation, erosion model, photometry, etc.
  • Not a lot of middle wear, system are independent.
  • Sound propagation is maturing
  • Crude incentive models, low fidelity.