Summer of Code - General Info
The general information for GSoC and CS is now found at SoC
Summer of Code - Project ideas
As CrystalSpace is a 3D engine, there should be plenty of opportunities for interesting projects. If the intended end result is nice and shiny, it's probably a project candidate ;). So feel free to submit your own ideas, or discuss them some of the administrators/mentors if you want some more guidance. At this point no specific project has been assigned to any specific mentor, so if you cannot find "the" mentor for your questions, try to talk to Jorrit, Frank (res2k) or Marten (thebolt) and they will help you out.
Below you will find our proposals for things to do within the Crystal Space project.
Lighter2 improvements
Crystal Space new(er) lightmap calculation 'lighter2' has over the last years been improved to a state where it can replace the older lightmapping system and generate nice-looking static lighting. However to fully compete in quality with commercial alternatives it does need a set of improvements.
At this moment the most interesting parts in 'lighter2' to look at is:
- More memory efficient data representations. At the moment the data needed for computing the lighting takes massive amount of memory (multi-GB on big levels) and the techniques needed to handle it (explicit swapping, compression etc) slows the process down. A student with strong interest in data structures should be able to find a more memory efficient data representation.
- Multi-threading / multi-computer usage for calculations. To speed up the execution of lightmapping, which is an inherently parallel process, we would like 'lighter2' to be able to utilize more than one processor; both via multithreading (taking advantage of multicore) and across multiple processors. A SoC project here could include either or both parts.
- Using OpenCL (ideally) or CUDA, implement support for GPGPU computation in lighter2. This would *require* you to have a graphics card which supports GPGPU (Nvidia 8+ generation or AMD/ATI equiv).
- Implementation of spot-, directional- and area lights. Crystal Space traditionally only supported point lights and that is what 'lighter2' supports as well. Full implementation and support for other forms of light sources would be desirable for both quality and computation-time reduction.
'Lighter2' subproject is not realtime per see and can offer other interesting areas to look at for a student that is more interested in offline rendering than realtime rendering.
Visibility culling improvements
Visibility culling is the act of deciding which objects to actually render and which to ignore because they are either outside the view or they are occluded. Crystal Space at the moment implements two visibility cullers:
- Frustivs - Only does visibility culling to the view frustum (removes things outside the view).
- Dynavis - A partial implementation of original dPVS (earlier by Hybrid, now known as Umbra) which also does software occlusion culling.
Both these cullers gets the job done, but they are not the most efficient pieces of code around. Also since the introduction of dPVS in 2000 the way graphics cards work have changed and so has the requirements of the cullers. Also new cards have hardware features to allow for quick implementations of occlusion culling that Crystal Space at the moment does not take advantage of.
A SoC project in the area of visibility culling would be to develop a new, more "modern", culler ground up. Efficiency is a major concern as visibility culling is something that has to be done every frame. Thus we expect the student to look into the latest research in the area and then implement a new dynamic or dynamic/static culler utilizing frustum culling, occlusion culling either in hardware with software fallbacks and possibly precomputed visibility for static geometry.
There have been a lot published on culling, esp occlusion culling, in the last few years. Some examples GPU Gems 1, GPU Gems 2, CHC++ and loads of papers.
Environmental effects
One important part in rendering realistic environments is the rendering of environmental effects such as clouds, dust, rain, other atmospheric effects etc. Crystal Space today has a very advanced shader system, and with the new render manager almost finished good support for rendering to texture and post-processing effects which allows you to render these kinds of effects however at the moment it's all up to the user to implement this.
We would like to see at least an example implementation within Crystal Space itself to act as a starting point for those of our users that wish to utilize environmental effects. Inspiration for algorithms and/or effects can be found from Nvidia, ATI, GDC presentations and papers: paper1.
Advanced rendering techniques with shaders
This project would involve implementing one or more cutting edge rendering technique, utilising both CPU and GPU. Examples might be Relaxed Cone Step Mapping, Skin, Trees, Hair and Cloth.
More advanced lighting and shading
Crystal Space today mainly utilize direct and precomputed indirect lighting via the Blinn-Phong shading model. While being fairly efficient it does not always give the desired surface "feeling".
In this SoC project we would propose looking at alternative shading models such as Cook Torrance or Oren-Nayar and how to efficiently implement them for Crystal Space, both in the runtime part (shaders) and precomputation (lighter2). It would also be interesting to look at implementation of lighting algorithms, especially lighting approximations such as Screen Space Ambient Occlusion (SSAO).
Programmatic control of skeletal meshes
During last year Crystal Space has got a new mesh object and infrastructure for meshes animated by skeletal animation. The new system allows for both better overall control of the animation as well as possibility to control animations on a finer level. It is however lacking in one area and that is having skeletons interact with other parts of the system automatically.
The first interesting area here is the combination of skeletal animation and physics/collision detection. When a skeleton is animated there is currently no way to automatically get a physics object representation to update and thus an user must manually update the set of physics objects every frame. By providing a method to automatically update the transforms of physics objects as bones moves this would be simplified.
As interesting as animation->physics connection is, as interesting is the reverse physically controlled animation. Often referred to as "ragdoll physics" it allows characters to animate under influence of and as a result of the physics simulation. This allows for realistic interaction with the physical environment as a animated object/character can fall around, be moved as result of heavy objects etc.
Another type of programmatic interaction that could be involved is 'inverse kinematics'. Currently the skeleton system only provides 'forward kinematics' (you set the angle of each joint and it computes where the arm ends up) that can be controlled by pre-baked animations; however sometimes it is desirable to be able to set the end-point (hand) location and have the skeleton automatically update the rotations accordingly.
A SoC project in skeletal animation/meshes would in our view focus on one of these areas but also be general enough that it provides some infrastructure to implement the other parts.
Fill In Your Own Idea Here
There's some graphics effect CS doesn't do? You know of some paper and want to implement it in a real environment? You've noticed that some CS feature is not that elegant to use? Feel free to submit your own ideas!
Further Ideas
PreliminarySoCIdeas has a list of task that are valid for SoC, but need more detailed descriptions.
Ideas for projects related to CS
While not part of "core" Crystal Space the software projects mentioned here are part of the Crystal Space community and SoC projects for them could be handled under the "Crystal Space umbrella".
CrystalArchitect
CrystalArchitect is a CrystalSpace IDE. We are advancing well, but more hands are needed if we want to have fancy features soon !
Ideas are kept on an external wiki: http://wiki.kyanite-studios.org/doku.php?id=org:gsoc2009
