About Myself:
        Vacation plans:
                * I am planing to do some work at my university (I have to hand
'work experience' paperwork this year) - about 12h/week
                * One or two rock festivals - Friday-Monday.
                * One-two week holidays in the mountains - after SoC :)
        Programing projects I have done so far:
                * Imposters (this is reason I feel I may be right person to do 
this :) )
                        with friend,
                        C++, OpenGL, with static lighting, rendered with FBO 
and on
                        BackBuffer, included export plugin for Blender.
                * OpenGL puzzles
                        C++, pieces had bezier edges (smooth), randomized 
pieces,
                        triangulated using GLUT and rendered in 3d.
                * Many microprocessor projects (that's my hobby), for example:
                        * simple line following robot
                        * industrial sensor for tobacco company project
                                (winner of company's contest, now in 
implementation stage; my part done)
                        * ultrasound distance meter
                * Some web apps:
                        * Web chat - with very low latency and connection rate
                                Apache Tomcat (Java) + GWT (Java)
                        * Route planning using city public transport
                                http://findtheway.pl/
                                Python (preprocessing), C++ (server), 
GWT(Java)/JavaScript (client)
                * Many small programs in python/c/c++ (my favorite languages), 
for example:
                        * last.fm recorder (python)
                        * VHDL device simulator (useful on one of classes I 
attended)
                                (c/vhdl/python)
                * Many more ;)
        
        What OS projects I worked on?
                * Patch for perl last.fm ripper (I do not remember name)
                  accepted by gentoo, no reply from author.
                * I have written Linux driver for my laptop's IrDA, and have 
sent it
                  on irda-users (I have got only three e-mails regarding it, so 
I guess
                  nobody uses IrDA nowadays)

        Other projects I am applying to for GSoC:
                none
        
        Experience with C++ or Python:
                I am experienced C++ and Python programmer - see project list.
        
        My experience with computer graphics:
                I have written many programs using OpenGL, fragment and 
geometry shaders too.
                I used DirectX last time when newest version was 7 - played a 
lot with
                Direct3D RM (higher level) and IM (lower level) graphics, 
DirectDraw and
                DirectShow (had to write own software for tv card); after that 
I did
                not write many (if any) programs for windows.
                I from ready made engines I only used (very little) blender 
game engine.


Crystal Space questions:
        When did I first hear about CS?
                About year ago, did not investigate - I was just looking at Open
Source 3d engines.
        
        Have I worked with CS before?
                No.

My project:
        I would like to implement imposters for CS.

        That would include getting basic rendering to work (removing '#if 0' in 
1.2
        csMeshFactoryWrapper::SetImposterActive did not make it 'just work TM').
        I was told by res it is not working in 1.4 either.

        After that I would develop a measure useful in assessing imposter's 
accuracy.
        I would like to include factors such as:
                * time after rendering/TTL
                        life saver - all errors would eventually be fixed by 
rerendering ;)
                * change of view (basic when just 'viewing scene')
                * global parameters change (lighting etc)
                * material change
                * shadows - that I would touch last
                        (I would have to get familiar with shadows in CS first)
        
        Also important issue is limiting texture memory use - this can be 
achieved
        by putting limit on imposter textures (in allocation).
        Imposters can be invalidated and their texture fragments reclaimed:
                * Time To Live based reclaim - too old (by some engine 'time')
                  imposters are considered unusable and freed
                * Damage - some events cause imposters to get a bit 'off'
                  (eg lighting change), some cumulative measure should be
                  implemented in order to invalidate imposters.

        Imposters would be per-object-instance basis created - that is for one
        imposter set for each object occurrence in scene. When rendering from
        given view closest imposter would be found (possibly using kd-tree by
        spatial "nearest to" query) and used.

        Imposter set here is structure bound to object allowing to find imposter
        for given view easily.

        Allocating imposters would be done by using blocks of textures - 
rectangular
        fragments of textures thus optimizing texture switches in rendering 
phase
        (target switches were very costly when I have implemented it).
        If it did not break CS layering I would like to try using extensions 
such as
        NV_fence to get more parallelism on GPU.
        
        Imposters would be rendered using object-space coordinates computed 
during
        prerendering phase.
        Rendering problems:
                * Edges:
                        * use GL_NEAREST and 1-bit transparency
                        or
                        * use alpha transparency
                                requires separate blending functions
                                for color and alpha
                * Objects which screen-space BBox-es intersect can be in strange
                  relationships for example at some given screen point there 
could
                  be A-B-A combination of objects -this can not be rendered 
correctly
                  without using Z-buffer
                        * ignore such problems - should not be noticeable with
                          small imposters (this is the case here I believe)
                        or more correct but slower
                        * render imposters with Z-buffer values and use them 
during
                          rendering (requires fragment shader) and/or check for
                          intersecting BBox-es and avoid imposters in such 
situations
        
        My proposed rendering phase is as follows:
                * normal rendering, memorizing candidates for imposters
                * prerendering phase (time limited in order to keep FPS high)
                        * imposters are assigned texture fragments and sorted 
by used texture
                        * for each imposter texture
                                * Zbuffer (and other used) is cleared
                                * imposters are rendered (cleaning their imp 
texture fragments)
                                * blocking till operation finishes or pushing 
fence (NV_fence)
                * normal rendering, using previously rendered imposters where 
applicable
                        * if fences are in use there is need to wait on given 
imposter's fence
                          before rendering imposter.
        
Deliverables:
        * working imposters (to make 'apricot' people happy :) )
        * documentation describing inner workings of imposters
          This point is quite important because imposters still are not so 
widely
          understood. Leaving documents allowing other people to comprehend and
          improve code is very important in Open Source projects.
        * doxygen public api documentation - allowing to just use imposters 
without
          getting too deep into code. It is also essential to highlight 
pitfalls and
          implementation limitations (if any ;) )

Schedule:
        GSoC: May 23 - start of 'implementation phase'

        Jun 15 - working imposter allocation, rendering, TTL reclaim
                Includes writing test app for it or adapting imptest

        Jul 6 - imposters-set implemented
                Basic structure storing information about given object's 
imposters
                and their state. Separated in order to underline importance of 
having
                it early designed and implemented - all following code works 
mostly
                by modifying it.

        Jul 20 - attached 'damage' properties
                This goal allows to quantify changes in scene.
                Separate goal because there are many places I have to find and 
somehow
                attach to imposters.
                Also sending damage to imposters have to be done carefully - we 
do
                not want to visit all imposters on any lighting change.

        Aug 1 - Reclaiming damaged imposters, documentation of internals
                Internals are finalized now - should be documented in order to 
give
                other programmers easier way in to the beautiful world of 
imposters.

        Aug 7 - End user documentation, code documentation and cleaned up code.
                End user documentation consist mainly of some common use cases 
and
                pitfalls, API is to be documented too.

Why I believe I am right person to do this?
        I have written with friend quite simple imposter engine before:
                * I was designing it and wrote math, rendering on backbuffer,
                  imposter rendering math, imposter texture allocator,
                  imposter accuracy measure and kd-tree based best imposter
                  choice (based only on viewing direction - worked pretty well 
;) )
                  blender scene export plugin
                * Friend wrote import and FBO/RenderToTexture support and had 
very
                  interesting idea of combining per-pixel-lighting and 
imposters -
                  unfortunately difficult to implement, so we did not do it.
                  I am also discarding this idea here because of it's level of
                  complication and required additional processing.
                source code:
                        svn: http://jachor.ath.cx/svn/gkiw/trunk/krata/
                        user: guest
                        pass: guest
                documentation - polish, sorry:
                        http://jachor.ath.cx/krata-docs/
                screenshot:
                        http://jachor.ath.cx/krata-screen.png
                        Black spot in the middle is due to 'execute command' 
window.
                        These trees are substituted by imposters - tree with
                        red rectangle means imposter.
                        Due to way the tree model was created imposters differ
                        from real objects - I have left somewhere transparency 
in model.
        I have got experience in all involved fields.
        I am familiar with algorithms (I take part in many algorithm
contests, esp ACM-style)
        and willing to use them! (to keep rendering time low)

-----
Every input greatly appreciated - please ask if I made something unclear.
Thanks for res for initial coments!

------------------------------------
Jan Lamecki
student of Poznan University of Technology, CS, 3rd year
location: Poznan, Poland

------------------------------------------------------------------------------
_______________________________________________
Crystal-main mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/crystal-main
Unsubscribe: 
mailto:[email protected]?subject=unsubscribe

Reply via email to