Automation of Imposter Creation Proposal [SUBMITTED]

Threads related to Google Summer of Code
Post Reply
alizz
Gnoblar
Posts: 5
Joined: Mon May 08, 2006 12:52 am
Location: Hong Kong
Contact:

Automation of Imposter Creation Proposal [SUBMITTED]

Post by alizz » Mon May 08, 2006 1:14 am

I have already submitted this, but I didn't realize I will not be able to edit it afterwards...so if I make a lot of changes, I will submit a second proposal with the changes.

Here's my proposal. Any constructive criticisms/corrections will be greatly appreciated!

UPDATED: added a time line and rewrote the methodology part.
I submitted this (again) on Google's SoC page. You'll see 2 proposals, and the one with the word "UPDATED" is the newest one.

============
Name: Alice Ching
Email: silly@alizz.net

Proposal:
To automate the process of creating imposters, which can reduce rendering complexity. Detection of change in camera angles and/or multiple cameras will be included so the scene will look natural, and the imposters will look as if they were 3D rendered. Ideally, by the end of the summer a developer will be able to simply enable imposterization on objects of their choosing and OGRE will do everything else.


Why?
When rendering large scenes with a lot of far away objects, the objects are sometimes rendered as billboards in order to reduce running time. However, every time the camera angle is updated, or when switching between multiple cameras, the billboards will need to be updated accordingly in order to look "right".
This process can be largely automated, so people can focus on increasing the complexity of a scene without bothering with the details of creating sprites and updating them. Some of this has already been implemented for OGRE; for example, OGRE has functions for creating billboards from objects, but these functions have not been automated and do not take into account the changes in camera angle or distance.


Why me?
I am graduating with a BSc in computer science from Carnegie Mellon University, and will go on to Cornell University for a masters degree in computer science. I have been very interested in computer graphics and would like to get involved in an open source project. I have done some game programming as well as 3D animations (in Maya) , and would like to help develop a user-friendly 3D engine that is suitable for all those tasks.
I heard about OGRE from a friend that has worked on it, and it seems to be very interesting and it has a lot of potential. I would like to get myself familiar with it so I could do more work with it in the future. Although I do not have any prior experience with OGRE, I am a fast learner and generally have no difficulty working with new code bases.
I also worked for a company which makes software to generate real-time 3D terrain, so I am fairly familiar with real-time 3D visualization.

Code samples/projects I have done: http://www.alizz.net/projects/
Resume: http://www.alizz.net/projects/resume.pdf


Methodology:
A lot of the initial work will be research on existing imposter code in OGRE and research of other imposter implementations. Certain implementations might be easier to automate than the others and I will have to understand the logic behind the code before diving into it.
I imagine that this will be an extended functionality or even a wrapper of the billboard/imposter classes. Since those are written in C++, I think it will be best if I also implemented the automation in C++.
I aim to make the code easy to use - just like automation of anything should be. A lot of thought, research and caution will be made when I design the class.


Time Line:
now ~ May 22nd
read up on materials and do as much research as I can (since it's final exam + commencement period)

May 22nd ~ June 5th (2 weeks)
do more research on the different kinds of imposters
fully understand the current implementation of imposters in OGRE and how it interacts with the rest of OGRE
understand where in OGRE automation needs to happen - and start implementing it

June 5th ~ July 22nd
continue working on the implementation
have a usable implementation by the end of the period

July 22nd ~ August 21st
most debugging and testing if the code fits in with the rest of OGRE
if possible, test the code on multiple platforms

Apart from these big milestones, I will also set up weekly milestones once the project get started, and will evaluate my progress every end of week in order to set the next milestones.
I will keep track of my progress and post it to the forums.

Conclusion:
I am very excited about this project and would really like to spend the summer working on something I like. I have looked at OGRE before but unfortunately did not have the time to help with it, and I feel like this would be a good opportunity for me if I want to help develop it in the long run.
============
Last edited by alizz on Mon May 08, 2006 11:46 pm, edited 2 times in total.
0 x

alizz
Gnoblar
Posts: 5
Joined: Mon May 08, 2006 12:52 am
Location: Hong Kong
Contact:

Post by alizz » Mon May 08, 2006 1:54 am

Some links that I have already looked at:

http://www.gamasutra.com/features/20060 ... s_01.shtml

http://isg.cs.tcd.ie/dobbyns/Papers/I3D ... ostors.pdf

These are more links to help me understand the different kinds of imposters there are...

Also, here's the current work that has been done on imposters for OGRE that I will building off of:
http://www.ogre3d.org/phpBB2/viewtopic.php?t=16423
0 x

User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19265
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
x 2
Contact:

Post by sinbad » Mon May 08, 2006 2:06 pm

Ok, good start on the research - a little more detail on the proposed approach would have been better in the application but at least you're picking the right articles to read.
0 x

alizz
Gnoblar
Posts: 5
Joined: Mon May 08, 2006 12:52 am
Location: Hong Kong
Contact:

Post by alizz » Tue May 16, 2006 5:16 am

I am working on an implementation part. I am still reading the code and attempting to understand how it exactly works, so if there are errors in my understanding, please tell me :)

Any constructive criticism would be greatly appreciated.

UPDATED: May 21
Implemention:
1) Imposter part:
- handle multiple camera, and other camera issues
- add detection of roll and yaw for cameras
- make one imposter set for each camera, and use imposter manager to automatically handle the sets (possibly an subclass or something similar dedicated to the imposter sets of all cameras)
- tweakable controls for the user
- scene node hierarchy impostering

2) Automation part:
Integrate this with the current LOD system, which may include the following:
- add a function to load a bunch of 3D geometries, and convert them to an imposter set (if the texture memory is overloaded, split it up into multiple imposter sets).
- add a class (possibly a manager or a listener) that will actively monitor a scene when it's loaded, and automatically turn faraway things into imposters using the prior function
- additional functions: allow an input of a list of objects that the programmer doesn't want to be imposterized

3) Other:
There are other things that Tuan Kuranes mentioned in the imposter thread. If more time is left in the project, I plan to add more features to the imposter classes based on Tuan's todo list. This includes:
- transition from imposter to mesh
- impostoring optimization based on distance (far away things can use texture with less details, etc.)
- optimization: when updating imposters, try to do the most updates in the minimum amount of time
- multi-texture and max render texture size/unit support
Last edited by alizz on Mon May 22, 2006 1:04 am, edited 1 time in total.
0 x

User avatar
tuan kuranes
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 2653
Joined: Wed Sep 24, 2003 8:07 am
Location: Haute Garonne, France
Contact:

Post by tuan kuranes » Tue May 16, 2006 9:28 am

- handle multiple camera, and other camera issues
- add detection of roll and yaw for cameras
- make one imposter set for each camera, and use imposter manager to automatically handle the sets (possibly an subclass or something similar dedicated to the imposter sets of all cameras)
-More advanced controls on distances and camera angles ( What's the smallest camera angle change that would require an imposter update?)
Those are indeed must have and basis of the work :
- Complete cameras handling
- Correct and tweakable impostoring (user specifiable Lod or screen based impostor texture size ratio)
- Scene node hierarchy impostoring.
add a function to load a bunch of 3D geometries, and convert them to an imposter set (if the texture memory is overloaded, split it up into multiple imposter sets).
- add a class (possibly a manager or a listener) that will actively monitor a scene when it's loaded, and automatically turn faraway things into imposters using the prior function
- allow an input of a list of objects that the programmer doesn't want to be imposterized
- at which distance should imposters be used?
Best would be to Integrate it with Current Lod system (flag in mesh Lod values about when it changes from Mesh Lod to Impostor) ? Otherwise it would end in 2 Lod system doing exact same thing, checking distance against camera, and square it for each mesh... costly.

Most important "Other" would be :

- Transition from impostor to mesh (fade in/fade out)
- Same mesh impostoring optimisation (vegetation rendering uses exact same impostor, wihtout consideration of real orientation of tree upon a certain distance) ?
- "CPU/GPU Load Handling" Imposter Regeneration, trying to make most update in the minimal amount of RTT at a time, in a priority queue sorted on distance to camera.
- Use max render texture size and max texture unit (and make billoardset supports multitexture?)

Bonus would be :

- User provided material impostor support (in case of "Same mesh impostoring")
- Normal mapped impostor (depth map capture=> normal map+shader or/and billboard being depth sprite)
- Update the RTT once instead of per Texture Space, but that means one camera and viewport by TextureSpace.
0 x

alizz
Gnoblar
Posts: 5
Joined: Mon May 08, 2006 12:52 am
Location: Hong Kong
Contact:

Post by alizz » Mon May 22, 2006 1:03 am

Sorry I didn't get to this until the last minute...commencement has been fun but very time consuming and exhausting.

I updated my proposal on the SOC page, and I also updated the above post accordingly. If you have any last minute comments, feel free to tell me!
0 x

Post Reply