Description
3D Engine for PC and XBOX. This project was financed by CNPq, the Brazilian National Council of Scientific and Technological Development (CNPq grant number: 504501/2004-6).
Video
(this video shows the terrain manager, which was implemented by me)
Screenshots
(scroll with your finger on mobile)
Skills
- C++
- DirectX
- HLSL
- Multi-threading prog.
- Code optimization
- LUA scripting
- 3D math
Environment
- Visual Studio
- XP methodology
Role
Game Programmer at Z80 Software, Campinas, Brazil (Part Time)
Team
5 programmers and 2 designers, most of them working on site daily.
Participation Period
March, 2005 to December, 2006
Project Status
Incomplete, being interrupted after the financing period specified by CNPq ended.
Tasks Performed For The Terrain Manager
(the main feature designed and implemented by me, over more than 1 year)
- Level of Detail management using the chunked LOD technique:
The chunked LOD technique [http://tulrich.com/geekstuff/chunklod.html] enables the rendering of huge terrains in the engine. It was implemented inside the engine using Direct3D and HLSL shaders, together with many internal optimizations and also some external optimization options, accessed through LUA functions, to enable the edition of the quadtree and also configure the memory management.
- Outdoor lighting computation under changing light conditions:
The lighting computation is based on the horizons technique [http://www.gamasutra.com/features/gdcarchive/2001/hoffman.doc], that supports terrain self-shadowing and skylight computation per vertex in real-time, resulting in a photorealistic rendering.
The most challenging task performed by me in the whole project was the creation of the technique used to make imperceptible the change in the shadows during the morphing between chunks of different levels, allowing the combination of the horizons and the chunked LOD techniques.
The computation of the horizons (pre-processing step) is very expansive, for huge terrains it can several days of continuous processing. The algorithm described in [http://www.cs.queensu.ca/~jstewart/papers/tvcg97.pdf], together with a specific B+ Tree inspired data structure that I have developed, spared days of processing.
- Automatic texture generation (supporting bump mapping) and editing tools:
The base for the automatic generation was the technique described in [http://www.flipcode.com/articles/article_generatingterrtex.shtml]. The paint brush and clone stamp tools were implemented to be applied in real-time on the terrain, during its rendering, allowing “undo” operations and saving the texture project as a light XML file.
Other tasks performed by me
- Integrated the CWXML library [http://www.cubewerx.com/main/cwxml/], an open-source high-performance XML/BXML parser, in the engine, implementing optimizations, bug fixes and expanding the binary formats support for the BXML files.
- Defined and applied XML schemas to configure and describe fonts and 2D overlays.
- Re-structured the texture manager to allow more flexibility and better filtering options.
- Implemented the texture pooling and texture atlas techniques to optimize the texture management.
- Implemented a “pong style” mini-game (multiplayer or AI), using LUA scripting, to perform tests on the event manager and overlay manager.
- Implemented a new 2D overlay manager, supporting extensive use of 2D sprites in the 3D scene, animated or not, and also the use of billboarding.
- Implemented the cursor manager.
- Implemented LUA/C++ interface (glue functions) for all the engine features implemented by me.