-
Notifications
You must be signed in to change notification settings - Fork 73
Home
##What is it?
XLE is a work-in-progress multi-platform 3D C++ game engine built for extensibility and efficiency. It's open-source! (licensed under the MIT License)
For screenshots see the XLE Development Blog
Nyra model from Paul Tosca and background from sIBL Archive.
This engine is intended as a starting place for engine developers looking to build custom solutions. It will provide a working toolset of high quality basic code, a running head-start for an engine developer looking to develop custom technology, or a graphics programmer wanting to experiment with some new graphical technique.
But please remember that XLE is still very much a work in progress! It is not yet ready for practical uses.
XLE is being developed at the Korean MMORPG company, XL Games.
Github address: https://github.com/xlgames-inc/XLE. Please read Getting starting compiling before compiling!
##Key Architecture
What does XLE look like?
XLE has been growing and changing rapidly. But there are clear architectural divisions. This diagram shows a rough outline of the major parts of the engine.
Where possible, XLE makes use of other open-source libraries, rather than re-rewriting from scratch.
Here is a quick run-down of the components of the system:
Component | Description |
---|---|
Utility | Utility functions and tools. String manipulation, low-level file system functionality, heap, threading and processor utilities |
ConsoleRig | Logging & in-game console functionality. Debugging support tools |
Math | Math functionality commonly required for games and rendering (3d transformations, basic intersections) |
Assets | (not pictured) Asset management and streaming functionality |
RenderCore::Metal | Thin layer over the low-level graphics API. Provides partial platform independence |
RenderCore | Startup and manage graphics devices |
RenderCore::Assets | (not pictured) Run-time asset representations for rendering primitives (models, animation, terrain, etc) |
BufferUploads | Manages background transfers of data to the gpu, and low-level streaming |
Shaders | As expected, GPU shaders |
SceneEngine | This is the biggest component, and includes code for rendering world scenes (including structural management code, lighting effects and rendering techniques) |
RenderOverlays | 2D rendering and widgets; mostly for debugging purposes |
PlatformRig | Manages the frame loop, window creation, etc |
ColladaConversion | Import from Collada data sources, and geometry manipulation |
ShaderParser | Utility library for GUI tools using shaders |
Of these components, the "SceneEngine" is the largest. Within the scene engine, there are implementations of many graphics techniques and visual simulations.
##What's special?
So what's unique about XLE? I hope that XLE can help provide an environment where engine developers can more quickly create custom solutions for games. It's designed to be built upon and customised, so that everything built with it feels unique and different.
Some engines are designed to replace programmers. Well, at least in part. That is to say, content creators can work directly with the engine toolset for most tasks, bypassing programmer support.
XLE's philosophy is to empower programmers. To provide programmers with what they need so that they can build custom solutions for their content creators.
It's a massive goal. Other industries achieve these goals by building ecosystems of tools that can cooperate. Even the highest quality products reuse libraries that everyone has access to. But the games industry has had difficulty building that type of environment. I hope that one day XLE can play a small part in an active ecosystem of high-end games-focused open source technology.
##These pages
These pages will provide technical information of interest to engine programmers.
What to read now?
Page | Contents |
---|---|
Getting starting compiling | How to start compiling XLE. Please read first, it's a little complicated. |
Sample Data | Acquiring more data for samples |
Reused Libraries | Re-used open source libraries and licenses |
Layer Diagram | Details about the top-level physical architecture of XLE |
Roadmap | Some areas for future development |
Suggested Uses | Suggestions for uses of XLE |
Ruminations | Some ideas and considerations about future features and behaviour |
Technical topics:
Page | Contents |
---|---|
Best Practices | Best Practices used in XLE |
3D vector math regime | Coordinate systems and matrix math uses in XLE |
Use of exceptions | Exceptions in XLE, and rationale |
Some pages on specific XLE techniques:
Page | Contents |
---|---|
Scene trees and XLE | Scene tree (or lack thereof) rationale in XLE |
Lighting parser diagram | Architecture of the lighting parser, and interaction with the scene parser |
Transformation machine | Details on the "TransformationMachine" object used for playing back artist-authored animation data |
Coding Tricks | Coding tricks with XLE libraries |
Multi-platform | Multi-platform status |
##Intro to classes
Page | Contents |
---|---|
Class Accessors | ClassAccessors metaprogramming helpers |
##Code documentation You can also find code documentation here: XLE Code Documentation
##Dev team contact
Please use: [email protected] to contact the dev team (in English or Korean).