here is my proposal for GSoC project:
Motivation
Current terrain component introduced in Ogre3D 1.7 uses chunked level of detail(LOD) together with geomorphing to achieve continuous LOD for terrain(heightmap) rendering. This terrain component performs very well on smaller sets of height data which is it's purpose however problems with limited size of memory come with larger sets of data. Paging of data is common solution for memory issues of this kind and paging component already exists in Ogre3D however it's performance is very poor when used together with terrain component and is not ready to be used in a real project. The current paging strategy which is used for paging terrain tiles in/out is also not optimal in some cases.
Project
There are basically two problems using terrain paging in Ogre3D. Poor performance of terrain paging and simple paging strategy used to select tiles for swapping in/out.
Poor terrain paging performance causes visible tearing/delay when it comes to load another page tile for rendering. This project will address this issue by modifying the way terrain component handles data. That involves:
- separate load of specific terrain data belonging to specific LOD instead of only possibility to load whole terrain data at once so more distant terrain tiles could be loaded only in low LOD
- load of terrain data in background or at users own decision
- notification system for various terrain component events like progress of data loading/preparation so user knows what about the progress
There will be introduced new demo to demonstrate above functionality:
- import and prepare terrain data
- load/unload specific terrain LOD
- use of/react on terrain load events
- switch between different LOD strategies
Bonding period (27 Apr – 24 May):
- Play and experiment with Ogre3D terrain and paging components and with its demo and test applications to further improve knowledge about it. Examine threading Ogre3D threading model and other needed core functionality as well.
- Actively interact with my mentor and Ogre3D community to discuss final details of my intended implementation. After this I will be absolutely sure about every bit of my future work.
First work to do is to implement separate LOD load mechanism for terrain component, notification system for it and test it. I divided whole project into stages so progress can be easily followed. Each stage also involves testing of added functionality.
- Stage 1 (25 May – 14 Jun): Separate LOD loading for terrain component. Modification of terrain component’s code to allow separate loading of height data.
- Stage 2 (15 Jun – 21 Jun): Implement loading and preparation methods as background tasks.
- Stage 3 (22 Jun – 30 Jun): User notification system for background tasks. Make this system configurable by user.
- Stage 4 (1 Jul – 12 Jul): Make demo using new load mechanism. Option to display various debug statistics as well.
At this point separate LOD loading should be fully working and integrated in Ogre3D. There should be test/demo showing it’s functionality as well.
After mid-term (17 Jul – 16 Aug 2011):
In this phase implementation of new paging strategy takes place as well as creation of new terrain features showcase demo and its documentation.
- Stage 5 (17 Jul – 30 Jul): Implement new paging strategy to replace current paging strategy (Grid2DPageStrategy).
- Stage 6 (31 Jul – 10 Aug): Put together final application to show and demonstrate new features.
- Stage 7 (11 Aug – 16 Aug): Final tests, bug fixes and documentation.
Suggested ‘pencils down’ (16 Aug):
All the project’s targets will be fulfilled now and there will be application demonstrating them in a practical way.
Why I’m the one for the project
I’ve been interested in Computer Graphics for a few years now. I have studied CG at Masaryk University in Brno, Czech Republic. I have used Ogre3D in my little pet projects and I’m familiar with it’s design and concepts. I have experience with heightmap terrain rendering as I did that as part of my thesis and worked on game engine which involved heightmap rendering as well. I also have a sound knowledge of C++ coding and project development as I was working as a developer in software company. Now I’ve decided to continue university and so I have whole summer for this GSoC project. I would like to give something useful back to community as well.