Catharsis is a game engine and associated set of tools for game development. The engine is built to be a platform upon which to build games, or other realtime graphics applications.




Features

Modern Design

Catharsis is built to use modern graphics hardware, including vertex and pixel shaders. The fixed function graphics pipeline is not supported in Catharsis, everything uses a vertex and pixel shader. This greatly simplifies rendering setup and liberates the user of the engine. All rendering data is directly mapped onto shader parameters. Meshes, for instance, consist only of named buffers of data. These data buffers can be interpreted in the vertex shader as vertex positions, normals, etc. Since these data buffers do not have to correspond to specific vertex attributes, arbitrary vertex data can be added to a mesh. The user simply names a data buffer in the mesh file and that data is accessible through the shader parameter of the same name during rendering. Catharsis uses Nvidia's Cg to accomplish this. An added benefit of this is that Cg shaders are automatically supported in both OpenGL and DirectX, making this system completely API independent.

Python Interface

The Catharsis engine contains a python interface to all engine interfaces. With the Catharsis Python Interface applications can be developed quickly and easily in Python. This is a great asset for developing simple tools and utilities that can benefit from using the engine.

Maya Plugins and Tools

Catharsis is built around using Maya as the asset creation tool. Using Maya provides artists a familiar environment for modeling and less restrictions in development. There is no requirement on geometry being constructed from convex polyhedra, for example. This also saves time: developers do not have to maintain and add features to engine specific modelling tools, and artists do not have to learn these engine specific tools.

SNAX

SNAX is an automated exporting system, it can build catharsis usable assets from a variety of sources. It handles exporting data from Maya binary files, PSDs, and other common source asset formats. Maya scenes setup to use SNAX can have all of their data exported and immediately usable in Catharsis in moments. An entire tree of engine useable assets can be built solely from a set of source assets without the need for metadata files.

Data Driven

Catharsis uses human readable scripts (called defs) to define all game and engine data. XML is used to store defs allowing them to be easily read and created, both by hand and programatically. Defs can be easily loaded and their data queried in the engine, and new defs can be created and written just as easily. Internally defs are treated as dictionaries, making them very easy to use. Defs also ensure generic interfaces between systems and tools, which makes systems much more extensible and less prone to error when a new piece of data is added.

Module System

The catharsis engine does nothing on it's own, it only provides a stable platform upon which modules are developed. A Catharsis module has a generic interface to the engine and has access to all engine features. The module is free to do what ever it wants, there is no required module structure. This allows game modules, tool modules, and other modules to be created and used with catharsis. Catharsis provides a set of standard system modules including: FileSystem, MaterialSystem, MeshSystem, etc. Modules can be left unloaded if desired, for instance if the engine does not need to render the rendering modules can remain unloaded. Modules can be loaded and unloaded on the fly without restarting Catharsis.

Object System

The Catharsis object system is part of the engine. Modules register their own objects with the object system on load. Any type of object can then be created from the engine without knowing where it came from or telling the engine it's actual type. Objects use smart pointers and reference counting so no objects are leaked. Objects can have an arbitrary number of controllers attached which modify the object. Further, object data is defined in XML def files external to the engine, making them easy to modify.

Scene Graph

The Catharsis Scene Graph System is built out of objects, and as such, can easily be extended with new nodes. The scenes can be exported from Maya to Catharsis scene files (XML defs). The scene graph uses the object controller system to define scene node behaviour. This allows the user to add any controller types they can think up and add new behaviours to the scene very easily. The scene graph is based on David H. Eberly's work in 3D Game Engine Architecture, but has been modified heavily to integrate the def and the module systems.

IMGUI

Immediate Mode GUI (IMGUI) is an idea from Casey Moriarty that I ran across at website Molly Rocket. Instead of creating widgets and adding them to other widgets and setting up complex widget heirarchies and event callbacks the IMGUI design provides a very simple and efficient way to quickly use GUI elements. This has allowed me to make much more useful interfaces for tools and test programs as I develop the engine.