I would like to expand upon efforts done by tuan kuranes (see: http://www.ogre3d.org/forums/viewtopic.php?f=1&t=38383) to implement Coherent Hierarchical Culling and CHC++ techniques into the Ogre engine for GSoC 2012. A description of CHC++ can be found: http://www.cg.tuwien.ac.at/research/pub ... -draft.pdf
Occlusion culling is a useful technique for avoiding the processing of nodes that will be entirely covered up by other opaque nodes in the final scene. With the advent of hardware occlusion queries, and the exploitation of temporal coherence (as in CHC), run-time determination of visibility is becoming feasible. CHC++ expands upon CHC in such a way that introduces a number of significant improvements. These are described in the introduction of the linked article, so I won't describe them here.
How will this project benefit OGRE users?
CHC++ drastically improves upon the time it takes to render scenes that have moderate to high depth complexity. In heavily occluded scenes it excels, but unlike CHC, CHC++ doesn't heavily impact those scenes that don't. Therefore many users will benefit from this application because it can increase the efficiency of their scene renderings.
Is this project within the core scope of OGRE?
With the addition of a few more classes (many well on their way already thanks to the work done by tuan), CHC++ can be implemented into the Ogre engine. It is also possible that later work may be done with further abstraction to make it possible for Occlusion Culling to work with any SceneManager.
This project should be within scope of the time allotted by GSoC. As I have already stated, the foundation for such algorithms already exists thanks to previous contributors. It is just a matter of updating existing code and implementing CHC++ techniques.
Schedule
April 24th – May 21st
- Get to know my mentor
- Get deeply familiar with tuan's CHC and SpatialTree code
- Week 1 (May 21)
- fix demo
- Week 2 (May 28)
- work on the invisible and visible queues and the query queue
- Week 3 (June 4)
- finish up the queues
- Week 4 (June 11)
- begin making necessary changes to integrate the various new queues
- Week 5 (June 18)
- work on multiqueries to reduce number of queries
- Week 6 (June 25)
- continue work on multiqueries
- implement estimations for coherence of visibility
- Week 7 (July 2)
- finish multiqueries and estimations if not already finished
- work on "temporal jittering" for testing of previously visible nodes
- Week 8 (July 9)
- finish work on the pieces
- finish up 'working' CHC++
- Week 9-15 (July 16)
- work on optimizing CHC++ code
- work on documentation
I think that thoroughly documenting mine as well as the existing code is an important and helpful step for further work on this code, and I would like to be able to spend some time toward the end on doing this.
My last day of finals is on friday May 12th, but I may be taking some summer classes. Summer classes tend to be much less demanding than traditional classes, not to mention I will only be taking one or two. This should not require much of my time, which will allow me to focus almost entirely on this project this summer with little distractions. There should be no scheduling issues.
Why You're The Person For This Project
I'm a 21 year old full-time student pursuing a bachelor's degree in computer science from the United States. I'm an enthusiastic problem solver and I love to code. Although much of my programming has been done in Java, I've also been coding in C++ for about 4 years. I've done some graphics programming with OpenGL (see below) and have recently been getting into GLSL. Although my experience or portfolio may not be massive, I love to learn and I pick things up quickly.
http://fritzendugan.com/ctc_competition/index.html -- A (somewhat basic) 3d game engine I created from scratch and worked on for about two weeks. It uses LWJGL for OpenGL bindings and some Slick2D-Util stuff for sound. Some of the more interesting things I was working on were a skeletal animation system and texture-packing/atlasing.
http://www.fritzendugan.com/ -- A holding place for many of the projects I've worked on. Although much of the work is incomplete, I think it reflects many of my interests.
Why OGRE?
I have always been interested in 3d graphics since I first played StarFox 64 on the Nintendo 64. Since then I've taken every opportunity I've gotten to learn and experiment with 3d graphics. Ogre seems very powerful and yet focused in scope--two characteristics I value in an engine. I think contributing to such a project would be an incredible opportunity. Also I've recently begun working with the NeoAxis open-source game engine which uses Ogre for 3d rendering, so this would be a good opportunity to learn about some of the back-end.
Anything Else
Ogre appears to have a very friendly community and I've already gotten lots of help from the forums and the irc channel. I would be somewhat honored to take part in such a community.
Thanks for reading this proposal. Any comments or guidance would be greatly appreciated.