Friday, June 5, 2009

Restarting the project!

When I started the Ainur engine project I chosen Ogre3D as the rendering engine.
It's a great Open Source C++ rendering engine that supports both DirectX and OpenGL, and a lot of 3rd party plugins exist.

Unfortunately I felt it was a bit slow, so I decided to rewrite Ainur to use Horde3D, a C based Open Source rendering engine that supports OpenGL.

It doesn't have the same 3rd party support that Ogre3D has, but it seems faster and lightweight when compared.

I still have the old source code so we will see if this Horde3D rewrite will succedes. If I will find some problems, I can easily switch back to Ogre3D.

Sunday, January 4, 2009

Grass lighting problem

I'm implementing dynamic lighting adapting the shaders I've found on the ETM forum, but I noticed that the grass made wtih PagedGeometry doesn't support lighting. Fortunately, someone wrote the patch and this allowed me to concentrate on getting proper dynamic lighting with normal mapping on ETM.
Here's the topic on the PG forum.
You can also download the diff file here.

A note about terrains

Ainur Engine uses Editable Terrain Manager which supports also terrain editing, which is a feature useful for the future Ainur Editor.
ETM is capable of splatting up to 12 textures per pass, using 4 coverage maps with 3 channels RGB, which seems to be the maximum number of textures per pass allowed by shader model 2.0 - actually Ainur is using 9 textures with 3 coverage maps but I am already removing shader model 1.0 support where it does make sense.
Since actually OpenGL 3.0 is not well received and Ogre only (officially) supports OpenGL and Direct3D, shader model 2.0 makes sense. Every graphics card should support it.

Friday, January 2, 2009

Roadmap

Currently the Ainur Engine has the following features:

  • Modular and object oriented design
  • Game state management
  • IntroState does a nice slideshow of your images
  • TextFile and XmlFile resource managers
  • CEGUI support
  • Console done with CEGUI which is not yet enabled
  • Support for mouse, keyboard, joystick/gamepad (even Microsoft XBOX 360 gamepad)
  • Terrains with Editable Terrain Manager whith support for splatting, lightmap and colourmap
  • Grass support with PagedGeometry
  • Sky, clouds, starts, sun, moon and da/night cycle with Caelum
  • Bloom effect (which was taken from Ogre examples but it's not that great with Ainur because the lights seem too bright)
  • Resource locations with a simple XML file
  • CEGUI sets and cursors specified with a simple XML file
  • Configuration file for stages (AKA levels), implemented via INI-style file instead of XML (may use XML for this in the future)

Current planned features for Ainur Engine v0.1.0:

  1. Implement HDR and Motion Blur
  2. Fix Bloom weight
  3. Disable Bloom and use HDR
  4. Initial PostEffects infrastructure to handle compositors
  5. Water support with Hydrax
  6. Initial code for weather management
  7. Physics code to make the player walk (with three camera settings: first person, third person and free)
  8. MainMenu state implementation with Play Singleplayer, Options and Quit menu items
      Also, implementing this game state I will also implement a way to load/save graphics options
  9. Implement EditState to be used in the Stage editor instead of the PlayState which will be used for in-game preview
  10. Stage editor for terrains, grass, sky and water
  11. Loading IntroState images from XML

At the time of this writing, I already implement the first four points and I'm working on the 5th.

Thursday, January 1, 2009

Actual screenshots

Now I would like to add Hydrax water support but first it's better to post some screenshots.
screenshot_1 screenshot_2 screenshot_3 screenshot_4
screenshot_5 screenshot_6 screenshot_7 screenshot_8
screenshot_9  screenshot_10 screenshot_11 screenshot_12
screenshot_13 screenshot_14  screenshot_15 screenshot_16

World refactor and grass

The World class has been refactored: I separated sky and terrains (vegetation was already separated, but the class needs to be named VegetationSystem instead of PagedGeometrySystem). There are now SkySystem which uses Caelum and TerrainSystem (with the TerrainSystemHeightFunction namespace for the height function used by PagedGeometry) which uses ETM. The world was loaded from a XML file taken from the resources, but I've seen it's too slow to parse - so I used a INI-style file which I can read with Ogre::ConfigFile class. This file contains all the information about stage name, author(s), scene (camera position only at the moment), whether to load grass and terrain.