lunduniversity.lu.se

Computer Graphics - LUGG

Computer Science | Faculty of Engineering, LTH

Denna sida på svenska This page in English This page in English

Shadow Rendering

Shadow Rendering Home Page

Our goal:
Efficient, high-quality shadow rendering using software, existing graphics hardware, or new non-existing hardware. Everything should be able to cast shadows onto everything. Our research is concerned with both hard shadows and soft shadows. Another way to (more elegantly) put it, is due to Gollum in the movie "The Two Towers":

Soft and quick as shadows, we must be.


Publications:
Samuli Laine, Timo Aila, Ulf Assarsson, Jaakko Lehtinen and Tomas Akenine-Möller, "Soft Shadow Volumes for Ray Tracing", ACM SIGGRAPH 2005.
Timo Aila, and Tomas Akenine-Möller, ``A Hierarchical Shadow Volume Algorithm'', to appear in Graphics Hardware 2004, August 2004.
Ulf Assarsson and Tomas Akenine-Möller, ``Occlusion Culling and Z-fail for Soft Shadow Volume Algorithms'', The Visual Computer, Volume 20, Numbers 8-9, November 2004. A draft is available in the link above.
[This paper was previously called ``Interactive Rendering of Soft Shadows using an Optimized and Generalized Penumbra Wedge Algorithm'']
Tomas Akenine-Möller and Ulf Assarsson, ``On the Degree of Vertices in a Shadow Volume Silhouette'', journal of graphics tools, vol. 8, no. 4, pp. 21-24, 2003.
Abstract: In shadow volume rendering, the shadow volume silhouette edges are used to create primitives that model the shadow volume. A common misconception is that the vertices on such silhouettes can only be connected to two silhouette edges, i.e., have degree two. Furthermore, some believe that such a vertex can have any degree. In this short note, we present a geometric proof that shows that the degree of a silhouette vertex must be even, and not necessarily two.
Ulf Assarsson, A Real-Time Soft Shadow Volume Algorithm, PhD thesis, Department of Computer Engineering, Chalmers University of Technology, ISBN 91-7291-333-9, October 2003. The thesis consists of an introduction, and the five papers listed above. Ulf defended his thesis on 2003-10-10, and the opponent was Fredo Durand. Downloads: Lo-res version (29 MB) and Hi-res version (96 MB).
Ulf Assarsson, and Tomas Akenine-Möller ``A Geometry-based Soft Shadow Volume Algorithm using Graphics Hardware,'' ACM Transactions on Graphics (Proceedings of ACM SIGGRAPH), vol. 22, no. 3, pp. 511-520, July 2003. PowerPoint slides without movie clips. Movie clips: Clip 1 (89 MB), Clip 2 (35 MB), Clip 3 (18 MB), Clip 4 (61 MB), Clip 5 (16MB) (same as Clip 1 in next paper), Clip 6 (86MB) (same as Clip 5 but larger).
Ulf Assarsson, Michael Dougherty, Michael Mounier, and Tomas Akenine-Möller, ``An Optimized Soft Shadow Volume Algorithm with Real-Time Performance'', Graphics Hardware 2003, pp. 33-40, p. 131, July 2003. PowerPoint slides without movie clips. Movie clips: Clip 1 (16MB) Clip 2 (86MB) (same as clip 1, but larger).
Tomas Akenine-Möller and Ulf Assarsson, ``Approximate Soft Shadows on Arbitrary Surfaces using Penumbra Wedges,'' 13th Eurographics Workshop on Rendering 2002, pp. 309-318, June 2002. PowerPoint slides without movie clips.
Note: in this paper we had not realized that each silhouette vertex must be connected to an even number of silhouette edges. Since this is so (we prove this in our "On the Degree of Vertices in a Shadow Volume Silhouette" paper below), we can split each silhouette into one or more several single closed loops, and thus our algorithm can handle many more surfaces that we state in the paper.


Source code:
  • The OpenGL version of our soft shadow algorithm
    • This entire framework was developed by Ulf Borgenstam (d00boul@dtek.chalmers.se) and Jonas Svensson (d00sms@dtek.chalmers.se)!
    • The software framework requires ODE compiled with single precision.
    • If you use this software/source code in part or whole, please do mention the following information somewhere: "The glSoftShadow software, developed by Ulf Borgenstam and Jonas Svensson, has been used in this project XXX".
    • NEW 2004-02-06: Version 3.1 of the source code now supports both ATI and NVIDIA in a single framework. Download binaries and full source code.
    • ATI version v2.0: Binaries and full source code.
      Works with Radeon 9700 and up (someone tried it on a Radeon 9500 in www.opengl.org and that worked too, so chances are that it works on a 9600 as well). We have not tested on any Radeon Mobility, but it might just work on a Mobility 9600.
    • NVIDIA version v2.0: Binaries and full source code.
      Should work with any GeForce FX card.
    • At this time, the ATI version is significantly faster than the NVIDIA version.
  • Full source code of soft shadow volume algorithm in DirectX, coded by Michael Dougherty and Michael Mounier.
  • Pixel shader for textured rectangular light sources.
  • Pixel shader for non-textured rectangular light sources.
  • Pixel shader for non-textured spherical light sources.
Gallery: (click for large versions)

Screen shots from the OpenGL frame work coded by Jonas Svensson and Ulf Borgenstam. Note that soft shadows are addictive -- it is hard to get back to standard shadow volumes... Source code is available above.


The two leftmost images are from our Graphics Hardware paper (publication 4 above). Notice the frame rates (upper left corners). Those uses spherical (left) and square (to the right) light sources. The third image (from left) compares our algorithm to a soft shadow generated using the average of 512 point samples. The rightmost image is just another example rendered with our algorithm.


Images from our SIGGRAPH paper (publication 3 above). Left to right: 1) a fire texture is acting as an area light source and casting a colored soft shadow onto the fractal landscape, 2) 3x3x3 spheres casting soft shadows, and 3) a 4D coverage texture (shown in 2D) for the fire texture used in the left image, 4) from my (Tomas') in-kitchen experiments with real soft shadows.


These images shows increasing light source size (rendered with algorithm presented in the first publication above).


Some more examples rendered with the algorithm from the first paper above.