Dev:Source/GameEngine/Projects/BlendX

提供: wiki
移動先: 案内検索

BlendX, blender game engine rewrite

Overview

The goal is to rewrite the current BGE by replicating most of it's current features and adding more features found in todays up to date 3d engines. Such features are, full screen post processing, true bone animation, advanced dynamics system (physics/collision/particles, including real rag dolls) and real-time shadows. Also the current logics system will be replaced with a similar, but more organized and advanced logics system.

Motivation

The motivation for this project comes from the fact that the current blender game engine is outdated and hardly a competitive interactive 3d content creation tool. The current BGE contains numerous bugs and it's real-time performance is not acceptable for demanding game artists and designers. Also it's functionality is far from complete, and it's scripting system is very restricted. Basically it has become a ghost project with very few people working on it. When comparing BGE to other parts of blender, it introduces a severe imbalance in development activity or in usability. To bring the BGE back to the potential game development tool map, a full rewrite is needed.

The goals of the new GE, BlendX

  • Better and faster rendering
    • Replace the current rendering system with a system that takes advantage of new hardware and improves the quality of the rendered content. To gain more speed in rendering meshes, VBO's will be used and according to the users preference, the vertex arrays will be optimized by indexing them before rendering. Textures will support both hardware and software mipmaps and anisotropic filtering. Also the current alpha blending (transparency) system needs improvements.
  • Advanced culling system
    • Implement an advanced culling system for scenes with high polygon count, (hierarchical occlusion maps, lazy occlusion grid, hierarchical frustum culling?)
  • True bone animation
    • Support true bone animation with user controllable bones. Also support blending animations with different bone animations (in blender terminology, blending actions). Also a bone actuator would useful.
  • Post processing system
    • Implement a stackable post processing system with effects like bloom, motion blur, depth of field, HDR, etc... Use FBO's for fast rendering to textures. FBO rendering to texture could also be utilized in creating various effects which require render to textures.
  • Advanced sound system
    • Don't load big sound files into memory. Instead, stream them from the hard drive. Also add new sound formats. (ogg, mp3?, etc..)
  • New game logics system
    • Implement a new game logics system which enables more advanced and more organized logics. The new logics system would consists of states, actions, triggers and actuators of which actions enable clever reusage of logic bricks. More information and research can be found from this document: http://www.blender.org/documentation/logic_editing_proposal.pdf.
  • Advanced scripting system
    • Enable the user to create a “super script” which is capable of controlling the whole engine from loading the engine to the point where it is shut down. The primary scripting language will be python, but other scripting languages could be implemented later on.
  • Shadow system
    • Implement shadow mapping enabling soft shadows. Also implement other shadowing techniques if possible (projective shadows, shadow volumes).
  • GUI system
    • Implement a python controlled GUI system with layers, buttons, sliders, etc.

Implementation

The libraries that will be used for BlendX:

  • OpenGL for graphics. It enables cross platform functionality which is mandatory for blender since it already is distributed for all of the mainstream OSs (Windows, Linux, MAC).
  • GLEW for taking advantage of new graphics hardware. GLEW is cross platform and is easy to use for accessing OpenGL extensions.
  • OpenAL for sounds. OpenAL is cross platform an fairly easy to use. However this is not a permanent solution since blender sound system is being revamped and it would be preferable for the GE to use the same sound system as blender.
  • Bullet for physics. Bullet is already integrated into blender and is an active project, thus making itself a fairly potential choice.

Current status of BlendX

The main developer has stopped developing the engine. Here is the current status of the code:

  • Better and faster rendering
    • Rendering system is compatible with both VBO's and indexed vertex arrays for older hardware.
    • Dynamic lighting, introducing positional, directional and spot lights is implemented.
    • Textures can contain both, hardware and software mipmapping. Anisotropic filtering is supported also.
    • GLSL shaders are implemented.
  • Advanced culling system
    • Hierarchical frustum culling and hierarchical occlusion maps are implemented. Scenes with several hundreds of thousands of triangles can be rendered with BlendX with decent framerates.
  • True bone animations
    • True bone animation is supported. Bone actuator is still to be implemented.
  • Post processing system
    • Post processing system has it's basic implementation done, including FBO's. Bloom, sepia tone, gray scale, sharpen and color filter post processing effects have been implemented.
  • Advanced sound system
    • Sound system is implemented and working. Streaming sounds from the hard drive is still to be implemented.
  • New game logics system
    • Logics system is work in progress. The functionality of the current logics system has mostly been replicated.
  • Advanced scripting system
    • Super scripts are implemented. The old functionality (Python controller) is implemented also. The current bindings are still experimental (SWIG).
  • GUI system
    • GUI system is still wip but many features have already been implemented (layers, buttons, truetype fonts, etc...)

Plugin possibility

Transforming BlendX into a plugin wouldn't probably be too difficult, but in case this happens, it would be preferable that the user can start the plugin by simply pressing 'p' as done with the current GE. If the user wants to change the plugin that starts by pressing 'p', he/she just changes the path to the plugin that the 'p' hot key starts from the GE plugin preferences. This kind of functionality shouldn't be difficult to implement for systems like BEEI.

Authors regards

Hi, I'm the author of this project (toonist, aka centralnoise at #blendercoders @ FreeNode) and unfortunately I can't give any kind of guarantee that this project will ever be completed, as software projects, commercial or non commercial are launched, put on hold and dropped very frequently by one reason or another. However I'll do my best to develop this project to a point that it is usable for serious game development and continue pushing it further after the current goals have been achieved.

Source

If anyone wants to continue on the project, just grab the code and ask around at IRC for the main developer (centralnoise) or at the blenderartists.org forums (toonist).

http://wiki.blender.org/uploads/7/79/Blendx.zip