Friday, March 30, 2007

36RSO Project progress 2

Last 2 weeks
  • revised existing shading
  • studied appropriate shading methods for geometry clipmaps
  • implemented shading using normal maps computed on GPU (user can change normal map resolution)
  • implemented 'on-the-fly' shading on GPU (2 possible ways of normal computation)

Next 2 weeks
  • implement supersampled normals using both ways of shading
  • try to make on-the-fly shading more effective
  • study possible ways of synthesizing terrain on GPU
  • modify existing clipmap code to enable reading height values from synthesized source, not only heightmap

TerraD3D Shading 1 (v1.04)

Implemented two different ways of shading - using normal maps and on-the-fly.

Normal maps define one normal per vertex and are computed during clipmap update. Asirvatham and Hoppe use double resolution normal maps but these form undesirable blocks. Normal maps are computed in vertex shader and rendered to a texture, during rendering the pixel shader simply samples the texture and computes a color. Normal maps require the same amount of video memory as height maps (4 times more for double resolution) but provide very fast way of shading.

The second way is to compute normals on-the-fly in vertex shader reading several height samples (currently 4) to obtain a normal, which is then sent through pipeline to pixel shader. No extra memory is needed but vertex texture lookup is still very expensive and framerate drops down to 50% compared to normal maps. It would be interesting to find out if only 2 extra texture lookups can produce similar shading quality.

Normal maps - close

On-the-Fly - close

Normal maps - far

On-the-Fly - far


Normal maps form block artifacts at close views, on-the-fly method provides best results with higher vertex density. Blending both methods could be the way to go (http://www.robertwrose.com/cg/terrain/rose-geoclipmaps.pdf).

TerraD3D v1.04 binary here (~4.5MB)
Shading techniques can be changed in console using clipmap.render_texhnique command with parameter render for normal maps and render1 or render2 for on-the-fly method. clipmap.normal_res_double turns on/off double resolution for normal maps.

Thursday, March 22, 2007

36RSO Project progress 1

Last 2 weeks
  • studied possible ways of mesh locality optimizations
  • implemented own way to generate triangle strips for regular grids (up to 400% higher framerate!)
  • compared with nVidia tristrip library (worse results due to the general use of this library)
Next 2 weeks
  • study of shading techniques for GPU clipmaps
  • revise existing shading and update to valid GPU per-pixel shading using normal maps
  • proper normal map update during clipmap shift on GPU
  • blend normals near boundary of clipmaps (same way as geometry blending)

36RSO Project assignment

GPU implementation of geometry clipmaps

Student: Václav Kyba kybav1@fel.cvut.cz
Supervisor: Jaroslav Křivánek xkrivanj@fel.cvut.cz

Extend existing geometry clipmap implementation done as a 36SEM project:

TerraD3D

  • school project for 36GS and 36SEM
  • C++ Win32 Direct3D application
  • terrain LOD algorithm based on geometric clipmaps, mainly on their GPU version
  • very effective and promising algorithm for today's graphics hardware
  • main aspects described in paper (czech) and presentation (czech)
  • binary v1.03 here (~4.5MB)


Buggy 2

  • school project for 36ZPG course
  • rewritten from scratch but never finished
  • quadtree for terrain frustum culling
  • logging and simple UI
  • source + binary here (~9.2MB)



Buggy

  • school project for 36V2B course
  • C++ Win32 OpenGL application
  • naive algorithm for terrain rendering from height-map
  • simple physics, frustum culling and collision detection
  • particle system for weather - rain, snow
  • source + binary here (~1.1MB)