Code: Select all
Proposal
Abstract
Procedural generation is a concrete way of creating visual complexity without exponential increase in effort from the artist. I aim to facilitate the use and creation of procedural content for users of Ogre. This would be done through alpha maps, which allow representation of 3d data as a simple image.
There are three components to the project:
A scriptable library for image generation. There would be a strong focus on the reuse of exsisting open source libraries for matrix operations/image manipulation.
A plug-in for Ogre to manage the visual complexity of the generated content.
A framework for experimentation with the scripts.
Goals/implementation
1. Make a uniform interface for generating and manipulating images. This is the real generation part of the project. Design would be contract-based, to make the system extensible. The shared datastructure would probably be the images in memory, to allow flexibility of the system (mixing different libraries).
2. Script the library. The exact language of the scripting has to be discussed with the community. I was thinking in the lines of material script.
3. Implement a procedural resource manager as a plug in. Minimal functionality:
* Interpretation of the scripts
* Detect the need of which level of detail is needed on particular content.
* Provide the TextureManager with the generated textures
* Provide the MaterialManager with updated material definitions
* Add meshes (from a factory) to the scenemanager from a ditribution map.
4. Make a demo, using PLSM for terrain, textures for alpha splatting/terrain textures/skyplane, procedural distribution of Mesh Trees (if performance allows).
5. Either refactor the demo so it can be used to experiment with the scripts (documentation through demo), or use an existing framework (I was thinking about CEGUI mesh viewer for materials, and GOOF for terrain).
6. Make some small command line utilities to check the script, and generate complexity statistics. For debugging purposes, it should also be able to save intermediate images , or step through the whole procedure
Battle plan
April -June
* Make a design document, as a platform for discussion
* Discuss and research the actual scripting language.
* Find out more about point 5, and discuss
* Make a proof of concept of procedural terrain using PLSM
* Go hunt for open source image manipulation libraries, and find out what's already been done in the community. Performance is an important factor.
week 1-2
Implement the library for image/alpha map manipulation.
Deliverable: procedural textures made through the interface, and applied to some common ogrehead.
week 3
Implement scripting.
Deliverable:: scriptable ogrehead.
week 4-8
Implement the resource manager. Scheduling would be done on a basis of priorities for performance reason. A cool idea would be to generate lower definition content. The real physical resource we're managing, of course, is CPU (and, to a lesser extent, memory).
Deliverable: ogrehead with dynamic generated detail.
week 9
Buffer. P
week 10
Make the demo. By then, I hope to know if this would be used as a framework for artists, or if I can plug in to an existing editor.
Deliverable: a distributable demo
week 11
Implement the command line utilities, and buffer if an existing editor can be used.
Deliverable: the utilities.
Else, more time for demo.
week 12
Documentation (Doxygen on everything and the demo, and a tutorial) , and deployment.
Deliverable: a document about the project in GSoC context, a list possible ways to extend the plug-in for the future.
Value of the project
The real lasting value of Ogre would be the Procedural Resource Manager, and the scriptable library. Once we have that, we have a codebase that can be reused for a long time (it scales well with technology), and can be expanded upon.These two would be implemented as an Ogre plug-in project. I'm not giving myself a lot of time for making the demo, but this is because I would already have a lot of demo code from testing the plug-in. Content of the demo would either be programmer art, or some things my friends come up with (this would give me some immediate feedback on the usability of the scripts).