Game Development Reference
In-Depth Information
particular location. (Later, we see how those intuitive terms in quotes are
a bit too vague for rendering purposes.) Compared to a forward renderer,
a deferred renderer follows our two-step rendering algorithm a bit more lit-
erally. First we “render” the scene into the G-buffer, essentially performing
only visibility determination—fetching the material properties of the point
that is “seen” by each pixel but not yet performing lighting calculations.
The second pass actually performs the lighting calculations. Listing 10.3
explains deferred rendering in pseudocode.
/ /
C l e a r
t h e
geometry
and
depth
b u f f e r s
c l e a r G e o m e t r y B u f f e r ( ) ;
f i l l D e p t h B u f f e r ( i n f i n i t y ) ;
/ /
R a s t e r i z e
a l l
p r i m i t i v e s
i n t o
t h e G b u f f e r
f o r
( each
g e o m e t r i c
p r i m i t i v e )
{
f o r
( each
p i x e l
x , y
i n
t h e
p r o j e c t i o n
o f
t h e
p r i m i t i v e )
{
/ /
T e s t
t h e
depth
b u f f e r ,
t o
s e e
i f
a
c l o s e r
p i x e l
has
/ /
a l r e a d y
been
w r i t t e n .
f l o a t
primDepth
=
g e t D e p t h O f P r i m i t i v e A t P i x e l ( x , y ) ;
i f
( primDepth > r e a d D e p t h B u f f e r ( x , y ) )
{
/ /
P i x e l
o f
t h i s
p r i m i t i v e
i s
obscured ,
d i s c a r d
i t
c o n t i n u e ;
}
/ /
F e t c h
i n f o r m a t i o n
needed
f o r
s h a d i n g
i n
t h e
n e x t
p a s s .
M a t e r i a l I n f o m t l I n f o ;
V e c t o r 3 pos , n o r m a l ;
g e t P r i m i t i v e S h a d i n g I n f o ( m t l I n f o ,
pos ,
n o r m a l ) ;
/ /
Save
i t
o f f
i n t o
t h e G b u f f e r
and
depth
b u f f e r
w r i t e G e o m e t r y B u f f e r ( x , y ,
m t l I n f o ,
pos ,
n o r m a l ) ;
w r i t e D e p t h B u f f e r ( x , y ,
primDepth ) ;
}
}
/ / Now p e r f o r m
s h a d i n g
i n
a
2nd
pass ,
i n
s c r e e n
space
f o r
( each
x , y
s c r e e n
p i x e l )
{
i f
( r e a d D e p t h B u f f e r ( x , y )
==
i n f i n i t y )
{
/ /
No geometry
h e r e .
J u s t
w r i t e
a
background
c o l o r
w r i t e F r a m e B u f f e r ( x , y ,
b a c k g r o u n d C o l o r ) ;
}
{
e l s e
/ /
F e t c h
s h a d i n g
i n f o
back
from
t h e
geometry
b u f f e r
M a t e r i a l I n f o m t l I n f o ;
V e c t o r 3 pos , n o r m a l ;
r e a d G e o m e t r y B u f f e r ( x , y ,
m t l I n f o ,
pos ,
n o r m a l ) ;
/ /
Shade
t h e
p o i n t
C o l o r
c
=
s h a d e P o i n t ( pos ,
normal ,
m t l I n f o ) ;
/ /
P u t
i t
i n t o
t h e
f ra m e
b u f f e r
w r i t e F r a m e B u f f e r ( x , y ,
c ) ;
}
}
Listing 10.3
Pseudocode for deferred rendering using the depth buffer
Search WWH ::




Custom Search