Realtime shadows

Thu 19 February 2009

Her vil vi skrive litt om de forskjellige typer skygger vi kan ta i bruk. Hvilken fordeler og ulemper de forskjellige typene har samt linke til implementasjoner av de forskjellige typene. Artikkelen er opprinnelig skrevet i forbindelse med et utviklingsprosjekt på

Planar projected shadows (J.Blinn 1988)

Bruker 2 render pass for å projisere en mesh til bakken / plan. Geometrien blir projisert ifra lyskildens plassering / retning og rendret i en mørk farge for å gi inntrykk av å være skygge.

plane_projected_shadow plane_projected_shadow2

Pro

- Enkel å implementere. Det vi trenger å gjøre er å finne en transformasjon som projiserer geometrien til et flatt plan / bakken.

Con

- Begrenset til et flatt plan.

- Falske skygger. Det vil si at objekter som skulle vært eksludert fortsatt vil avgi skygge. F.eks vil objekter inne i et hus kaste skygge utenfor huset, i tillegg til skyggen av selve huset. Dette kan løses ved å transformere fra 3D -> 3D istedetfor 3D -> 2D, falske skygger vil da havne utenfor det aktive frustrum.

- Ingen mulighet for selv-skygging.

Projected shadows

Mye det samme som planar projected shadows, men i denne varianten blir det opprettet en tekstur fra lysets synsvinkel. Man rendrer til en tekstur istedetfor å rendre en flat projisert mesh. Siden vi nå projiserer teksturen kan vi rendre skygger på objekter som befinner i skyggen.

Shadow mapping / Z-buffer (L.Williams 1978)

Vi generer først en depth-buffer / Z-buffer from lysets synsvinkel. Denne bufferen brukes sammenlignes så med bufferen generert fra kamerats synsvinkel for å finne ut om en pixel ligger i skygge eller ikke.

Shadow mapping er mye brukt, f.eks i Pixar's Renderman, Luxo Jr., Toy Story med flere.

shadow_map_landing_1 shadow_map_7fin

Pro

- Vi trenger ingen kjennskap til geometrien i scenen. Dette fordi algoritmen jobber i imagespace, og tar for seg scenen etter at den er rastifisert.

- Bruker kun en tekstur, samt vi unngår å bruke stencil buffer.

- Algoritmen er rask, og for statiske lyskilder kan shadowmap'en genereres på forhånd og brukes som oppslagstabell.

Con

- Undersampling vil gi antialiasing artifakter. Flere punkter i shadowmap'et mapes til et punkt i framebuffer.

- Geometri må rendres en gang pr. lyskilde for å generere spotlight skygger, og kanskje flere ganger for omnidirectional pointlight skygger.

Shadow volumes (Crow 1977)

... To be continued ...

Comments