Animal Race
Interactive 3D-Animation is a main field of study at the University of Ulm.
Animal Race is the result of the Interactive 3D-Animation course from summer term 04 to summer term 05. The first half of the 1.5 years 4 hours a week were spent on learning the necessary techniques for game developement like modelling, animating, skinning, OpenGL usage and so on.
Then a phase of brainstorming and concepting followed: severeal interesting game ideas were developed and discussed. Finally we decided on a very simple game that could be finished in reasonable time. More complex ideas like an action-real-time-strategy game with insects or an soccer-like game would probably be more fun to play but also much more difficult to finish.
In spring 05 the active work on the project started. Officially at least 4 hours a week should be spent on this, but all of us put a lot more work into it. Some nearly spent their full time on it while others had to attend their chosen lectures and got into full work in summer break. The team of 14 students was split into artists and programmers. Both groups were about the same size, a few of us chose to help out in both groups.
While the programmers worked on the basics of the ONEngine, the artists started their work on the characters and random props.
So ... how to make an animated game character ?
The first step is a sketch. Then you use this sketch to get your digital 3D-model done. Add a skeleton, bind it and animate it. Paint a texture and talk to your programmers to get an appropriate material shader implemented. Export all data to the right file format.
Meanwhile ...
The programmers decided to use the G3D, ODE, AngelScript and Animadead libraries as the base for the ONEngine. G3D because it provides a nice set on basic functionality, ODE for free physics, AngelScript for game play scripting and Animadead for skeletal animation because of its small amount of source code. Animadead was very young and we ended up rewriting most routines but at least it was a starting point.
Apart from simple scene management functionality and the integration of the chosen libraries a basic GUI framework and an external level editor were planned. Unfortunately the team lacked an appointed software engineer to continously plan and control the structure of the engine and thus some tasks were solved in quite other ways than the more seasoned programmers had planned.
Engine (pdf)
EntityCore (pdf)
SceneCore (pdf)
Network (pdf)
When basic functionality was reached the modellers also had their first character ready and so first playable test games emerged.
At this point a project leader of sorts had emerged keeping track of the progress and assigning the most urgent tasks. Little time later it was necessary to appoint an artist taskmaster to organize this part of the work properly.
The artists continued to finish their characters, create props and level meshes and the programmers worked to get the level editor, networking and gui framework ready. The existing parts were augmented, changed and fixed again and again. After all... there were quite some rookie programmers among us and none of us had ever finished an complete game engine with networking, physics, scripting...
At the same time quite some modellers struggled with the quirks of the modelling tool (Maya5) and scaling. The lack of an easy means to test their models in-game further hampered their efforts.
Quite some time went in to the tweaking of the player character physics and steerage scripts. Sometimes it looked more like an car race
but finally we achieved decent player character steering.
By the next step the level editor was useable and the GUI framework was put into real use for the game menus.
More content-rich levels were built by the artists and our angelscripter developed the necessary gameplay scripts. Some artists got outside on a sunny day to create lightprobes for the skyboxes or recorded sound effects. Apart from the usual work with augmenting and fixing the programmers created more visual effects and got the networking right.
When not quite everything was running smoothly and the final deadline neared everybody put a lot of work (quite some night shifts) into the project during the final dash. Shaders were written, textures refined, network prediction improved, menu screens cleaned up, lighting and fog were fine tuned, scripts corrected, bugs fixed, and so on. The whole game got a more and more polished look while the code quality suffered ...
- Manuel Kugelmann - project leader of sorts ;)