Main Page

From Helium
Jump to: navigation, search

Contents

Helium Game Engine

Goals

Helium aspires to be a fully-featured open-source game engine:

  • Permissively licensed (BSD-style)
  • Designed to scale to large-scale game development
  • Portable to different architectures, including game consoles, smartphones, and tablets
  • Use familiar industry-standard DCC user interface and usability design
  • Import content using production proven interchange formats (like FBX)

History

Helium was born directly out of Insomniac Games' Nocturnal Initiative. Nocturnal Initiative was created by Geoff Evans, Andy Burke, and Mike Acton as a way of sharing proven game development techniques with the community through the sharing of source code. It was announced at GDC San Francisco 2008. All source code shared via Nocturnal was production-tested library code.

After leaving Insomniac, Geoff Evans, Andy Burke, Rachel Mark, and Paul Haile continued working on code released through Nocturnal at WhiteMoon Dreams. WhiteMoon Dreams' generous support necessitated a new name for its independent development of the technology. Helium, as a project distinct from Nocturnal, was born. Over the summer and fall of 2010 Helium was refactored and improved to include better support for unicode, improved UI components in the Editor, and better cross-platform support. WhiteMoon Dreams donated to the Helium Project their entire custom built engine, named Lunar. Lunar was mostly written by Ted Cipicchio. Lunar focused primarly on memory allocation, containers, rendering, FBX import.

Helium continues to this day without direct funding from any entity or game developer in the spare time of Geoff Evans and Philip Degarmo.

Architecture

Helium is built using premake. Premake interprets lua script and generates platform-specific IDE project files (AKA solution files, or solutions). Currently Helium is compiled using two solutions: Tools and Runtime. This is done due to allow the HELIUM_TOOLS macro conditionally compile tools-only code at any level of the codebase.

  • The Tools solution aims to yield a monolithic, integrated editor for the creation of game content, as well as any command line utilities necessary to streamline production.
  • The Runtime solution aims to be an asset pipeline-free build of the game engine fit for bundling on a console disk, or distributed via app store.

Roughly, Helium's source code is organized into many modules:

  • Platform - abstracts most platform-specific functionality, with little time taken for adding convenience
  • Foundation - platform agnostic code built on top of Platform to aid in convenience of programming
  • Numerous Engine Modules - implements rendering and other critical engine systems
  • TestApp - app used to verify that systems are working, helps to aid making major or dangerous changes
  • Editor - wxWidgets application that is the user-facing content creation app, all wxWidgets dependent code is confined to the Editor project
  • Game - app to run the final game that will load fully-processed game data (see ExampleGame/ExampleMain for now)

Technologies

Fully Native Compilation

At the current time Helium is fully compiled to native code. Our long term goal is to build system such that implementing new features is easy to add via compiled code instead of extended through a scripting interface. Scripting (as a game tools concept) is planned to be implemented as basic building blocks that are placed within the 3D game world that are connected together via a message-queue based communication system. Due to this parallelism should be easier to achieve. Prefab structures will allow for reusable chunks of logic to be used through the game to speed content creation. These reusable chunks expose ports for input and output within the larger context of the game world.

C++ Reflection

Helium makes extensive use of C++ Reflection to automate rote tasks that would otherwise require boilerplate code. Geoff Evans has written an article outlining C++ Reflection and its virtues here.

Getting Started

Notable wiki pages:

Online resources:

Continued Development

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox