Power Render 6 took about 2 years to port from C to C++ and I'm happy with the foundation that was created. It is a solid rendering engine and there won't be any major changes to the core code. Power Render 7 aims to be a more complete game engine with better tools and some features that were never in the previous engines.
Here are some of the milestones that are expected:
1. Scene Graph
In previous versions you had to manage the world yourself. You could make an array of entities and organize everything in a way that was easiest for your game. The addition of a scene graph provides a common way to describe a scene that is suitable for hopefully all situations. It also provides a save/load game storage format. The scene graph allows for faster rendering by organizing the world in a hierarchy of bounding spheres. Group nodes can be hidden at a certain distance to speed up rendering of large scale scenes. I may be removing the idea of Game Entities (scriptable entities used by the high level engine) and integrate that extra functionality in the base classes of all renderable scene nodes.
2. Different Terrain Engine
The previous terrain engine was designed for arcade or RTS games, and simulated a spherical world that never ended. The new terrain will be more suitable for massive terrains used in games like Oblivion or MMORPG's. Terrain will be divided into zones, with each zone having a scene graph containing the objects on the terrain. Zones can be placed next to each other to form a world as large as you desire. Terrain splatting will likely be removed. I spent a lot of time developing this so it's sad to see it go, but for now each terrain will be using a large precomputed texture with a detail texture.
3. Integrated Physics
In PR6, the Newton physics engine was used. For PR7 I plan on switching to the PhysX engine. This will cause some challenges since Newton had more suitable ragdoll and terrain collision routines. Since the new terrain engine will not be using a wrapping world, PhysX may be able to provide all that is needed without additional work. I have already partially ported the engine to PhysX last year, but ragdolls support still needs to be added. PhysX will also provide hardware support for Ageia physics acceleration cards.
Physics will be more tightly integrated with the scene graph. A physics entity editor will be created for describing complex physics objects composed of primitives and joints. Once a physics entity is designed, instances of it can be drag and dropped into the world's scene graph. In the editor, the initial state of the scene will be stored. Physics can then be turned on and simulated. The original state can then be restored and adjusted, or the current state stored as the initial state. This allows you to let physics objects settle into a stable state before storing it as an initial scene to load later.
4. New Character Animation routines
Previous versions allowed playback of single animations (ie running, shooting) for a character. A new set of routines and tools is in development that allows for blending of animations (ie legs running while arms shooting). Higher level routines for controlling characters including pathnodes and lip syncing will be added (commands like, MoveToLocation, Speak, LookAt, or Follow). Characters are a big part of any game and these routines needs to be more flexible and user friendly.
Previous versions of the engine have not included networking but I would like to provide some examples using an existing networking library such as Raknet.
6. Other Ideas
These are ideas I've thought about but will wait until the rest of the engine is created
- 2D GUI elements could be turned into scene graph items, allowing the creation of menus inside the content previewer
- Drag and drop AI modules
- Cut scene editor