Advanced VSD


VSD means Visible Surface Determination
the main goal is to detect visible part of a scene in order to avoid drawing unecessary (invisible) parts of the scene.
Commonly used VSD system often use space partionning algorithm, such as BSP, Octree.

Two majors drawbacks:
  • The process of computing the space partionning can takes some time to complete
  • 3d data have to be static. You can't move nor modify object after space partitionning is completed.


  • My aim was to implement a solution that does not includes thoses drawbacks.Something fully dynamic, which allows you to move, add and delete 3d datas on the fly.

    After some research on the web, I found the Timo Aila thesis (Surrender umbra : A visibility determination framework for dynamic environments) in which he explains how he made the synthesis of existing algorithms to create his own.
    I used his thesis as a guideline when developping my own algorithm, and I have to say that I am pretty pleased with the results. The current implantation achieves high level of performance without any kind of pre-processing step.


    Example 1

    Here is the test scene, seen from the top. It features several interconnected rooms, and each room contains one sphere in each corner. Statistics of the scene :
  • Room: 24 vertices, 36 triangles
  • Hall: 8 vertices et 10 triangles
  • Spheres 492 vertices et 980 triangles


  • all of this give us a total of 37K vertices and 74K triangles

    Here is the test scene as seen from the camera.


    Results:

    Machine tests was an AMD Duron 1.3Ghz, geforce 2MX400 64Mb. Resolutions was set to 800x300x32
    With a simple culling algorithm rejecting object outside the frustrum, the demo run at 60fps with 45 meshs drawn, (37k triangles)
    With the new algorithm the demo run at 80fps with 12 meshs draw, (7k triangles).
    If the visibility computation is hand-computed, the demo then run at 85fps with 12meshs drawn.


    Example 2

    Here is the test scene seen from the top. The scene is globaly the same the the first example, it just a more systemic approch:
    100k vertices and 180k triangles (Spheres features 650 vertices and 1300 triangles)
    Here are the test scene seen from the camera.


    Results:

    On the same test machine
    *Simple culling algorithm : 60fps, 120 meshs drawn
    *New Algorithm : 90fps, 17meshs drawn


    Nithril

    home     about     engine     contact     link