Echo Engine

Introduction

Echo Engine is a game engine under development by me. I am making this engine so i will have more ease with creating 2D as well as 3D games. At this moment i’m making huge steps with the editor to allow for a much easier way to set up worlds. My goal for this engine is that it allows for creating 2D as well as 3D games in an easy way while still having the development be fast and as maintainable as possible. This of course while still keeping in mind that performance also is important.

Features

As expected the engine has a large set of features, therefore i will only name the subsystems here:

  • Logging: This allows users to write output to the console, rtf / html files and even upload messages to a server for online reviewing of the logs. This system is expandable as to where or how it outputs the messages the user wants to show.
  • Resource Management: The ResourceManager makes sure resources are only loaded once and then shared between anyone who uses them, this saves memory usage as well as loading time. This system also allows for Resource Hotswapping, enabling the user to edit resources (like models, textures, shaders, materials and scripts) externally which then will be reloaded when you get back in the game. This is very helpfull for development not requiring a restart or rebuild even.
  • Scene Management: For now scene management doesn’t do a lot, it just allows you to load/save a scene from/to a file and making sure everything gets updated / rendered.
  • GUI: I’m developing a module which allows you to show some guis. I am currently expanding the widgets and adding a few new ones for a bigger feature set. The gui is currently built using XML to allow for an easy representation. The editor directly uses thi gui module which helps push it forward and improve upon user-friendlyness.
  • Renderer: The rendererer started off as a DirectX 9 renderer but is now rewritten to OpenGL 2.1. The renderer has full support for shader effects and materials.
  • Input Management: I am currently using DirectInput to handle my input, it is quite nicely designed and allows for multiple devices and custom listening profiles.
  • Timers: Listeners can be registered with timers of any interval, these timers are shared to keep the overhead of updating the timers as low as possible.
  • Network / Threads: I have made a start on implementing some networking features like sockets and http requests. However at the moment i’m not really satisfied with this because my interfaces dont allow for me to use PThreads and UNIX sockets so i will be refactoring this module in a while. PThreads and UNIX sockets are really important to me because i am making a game with this engine which uses the Client / Server model and i really dont want to write / host a Windows server.
  • Collision: The collision system currently consists of a collision checker which uses SAT and some utilities like a 2D collison map to ease the use of this system.
  • Sprites: Sprite support so you can create those 2D games really fast.
  • Utilities / Data types: Some utilities like vector math, random number generator, file access and more of those sort of things.
  • Lighting / Shadow mapping: The engine supports two lighting systems. One trough an easy to use, engine provided, lighting shader where a light manager decides which lights get used based on the influence a light has. The second lighting system is a light pre-pass renderer where the normals and depth are rendered to a buffer which is then used to generate a lighting buffer which is applied while rendering the scene again. For the first lighting system shadow mapping is (like lighting) implemented for the three basic light types (directional, spot, point). While this still requires some work like adding cascaded shadow mapping the basics are there.
  • Navigation mesh: A navigation mesh can be generated trough a simple to use, easy to understand facade using Recast and Detour. Currently it’s in it’s early implementation stage but it looks like this is a keeper.
  • Editor: The engine’s editor currently supports real time editing of shaders aswell as tweaking the configuration for building the navigation mesh. I have also made a start with a world editor which currently allows for editing entities and components.
  • Scripting: The engine has support for scripting using angelcode. Because angelcode looks and feels very much like C++ scripting feels very natural aswell and can be easilly integrated back into the engine / game if need be.

Techniques

Language: Everything in C++.

API’s: WinApi for some of the Windows specific stuff. Winsock for sockets. DirectX for input. OpenGL for rendering.

Tools: Microsoft Visual C++ and Eclipse for programming. Varying tools for UML editing. TortoiseSVN as subversion client.

Images

Multiple windows, multiple scenes, multiple presenttargets:

 

Terrain:

 

Log (click for html version) :

 

Shaders and the editor, also a part of the gui:

 

And finally an example of a scenefile (click).

Videos

The very first movie of the engine quickly showing some things it can do:

A movie showing the light pre-pass system in use:

The first iteration of implementing physics:




©2017 Echo Gaming Entries (RSS) and Comments (RSS)  Raindrops Theme