Sear Tasks List
Below are a list of tasks for contributing to Sear. Contact Simon if anyone is interested in attempting one of these tasks.
Graphical User Interface
The GUI is nice and functional, but there is lots of scope for improvement. Knowledge of Guichan will be required. Possible areas of improvement are;
- Login and character creation need cancel buttons to go back to the previous option.
- A more graphical inventory would be useful. (perhaps preview of items)
- Improve the interaction between entities. E.g. when giving items away, allow selection after the give button is pressed.
- Improved transitions between connect and login dialogs. Currently some errors can lead to no dialog at all.
- Improved libwfut GUI dialog.
Sear currently has some basic weather support. It has some basic rain and the fog distance changes. Such effects need to be cheap to compute and render as they look nice rather than do anything too important. Possible areas of work are;
- Directional rain. The rain doesn't know if you are looking sideways, upsidedown etc, it always has vertical rain drops.
- Dynamic clouds. Clouds are currently just two texture layers moving at a different speed. Much better clouds that react to the sun and weather would be much better.
- Better water rendering. Water (lakes and rivers) are currently rendered as a flat plane that moves up and down according to a sine function. Theres lots of scope for snazzy effects here. Munin also had some ideas of procedurally generated rivers and lakes which would be nice to take a look at.
The rendering core is constantly (but slowly) being improved, but there is still scope for speeding up and improving this process; Some ides to look at are;
- Better data structures for efficient handling of the data.
- Better sorting of meshes to minimize OpenGL state and texture changes
- Reducing the number of calculation required each frame. In some cases things may only need calculating once every two or three frames.
These techniques would be nice to have as they will greatly improve visual quality at the cost of requiring more powerful hardware. However we may be able to apply these techniques so certain objects with only a small hit to rendering performance. Static meshes would allow for much of the required calculation to be done once and only minimal extra computation per frame (or every few frames). Dynamic meshes may be much more computationally expensive and there may need to be ways to turn off these features for less powerful machines.
- Per-pixel lighting. Things will look nicer, but this could also hammer the frame-rate.
- Bump Mapping. Often can be combined with per-pixel lighting techniques. Requires some media that has bump maps available.
- Shadow Volumes. Easier for static meshes, dynamic meshes (those changing each frame) will require special care to avoid killing the frame rate.
- Multi-texturing/texture splatting(?) can improve visual quality by combining a base low quality texture with a smaller detail texture that can repeat.
Other odd ideas for sear.
- The cal3d models are one of the biggest bottlenecks in sear. Lots of characters with new meshes each frame. Investigate whether any changes in cal3d or opengl APIs allow the reuse of the meshes across all instances of a model. The main problem is each mesh in a model can change shape as the skeleton moves. A vertex program may help.
- Special effects: Smoke, lightning, fireballs etc. A particle system is usually good for these things and one exists in Sear for small fires. This could be generalised to something more.
- Adding arbitrary models to the world. Currently every model in the world is attached to an entity. In some cases adding a model that is not attached to an entity is desirable (see the above note on special effects).
- Better Entity<->Model mapping. Currently Each entity is mapped to a fixed set of models. This is quite limiting and a better approach is to be able to query the entity properties to select meshes, submeshes and textures for that entity. Some initial support for this works for cal3d submeshes and textures, but is basic. Erik has been doing lots of good work on this in Ember.
- Sound/Music: SDL_mixer is currently used (but disabled). Some basic commands can be used to trigger a sound effect or music track, but only for a limited set of triggers. Suitable music and sound effects need to be found and added to sear. Better triggers need to be defined. Something like OpenAL should be integrated for properly positioned sound effects.
- Handling indoor/bounded spaces. Sear currently works well for outdoor scences. Indoors it is not so good. We have camera problems where we look at the roof etc. It would be good (but quite complex too) to build something like a portal engine to handle indoor/bounded areas efficiently and use the current rendering engine for outdoor scenes; and to combine both of them e,g, when looking through a doorway or window.
- Support for platforms. We currently have some bad hacks to make objects sit on the jetty plane. Typically we just follow the terrain height. We need some method of being able to walk on objects, e.g. bridges, stairs and platforms. This will involve some work on the server side to add this support there.
- Multi-Thread support. A very complex task due to the interconnected-ness of all the components, but this could see some real performance gains on multi-core machines. E.g. We could be processing the mesh updates for the next frame in one thread while rendering the current frame in another and process network updates in yet another thread. This would involve a big restructure of the internal data structures to handle this.
- Entity Stacking. The server has had entity stacking for a while. The sear inventory currently fakes this by counting similar items. Support would need to be added to eris.