glsl shader slides

Post on 12-Feb-2022

16 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

Announcements

• Homework 2 Due

• Project 3 Released

• Project 3 Vote

• Midterm Exam Next Week!

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

OpenGL Pipeline! !"#$"%&&%'()*!+,)(+-)

! .)"/)0*,"#1)22#"2

! 3"%$&)-/*,"#1)22#"2

Simplified OpenGL Pipeline

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Vertex Data

Framebuffer

More Detail

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Posit

ions

Framebuffer

Nor

mals

Color

s

Eye Positions

Eye Normals

Colors

Position

Normal

Color

(Interpolated)

Programmability

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Posit

ions

Framebuffer

Nor

mals

Color

s

Eye Positions

Eye Normals

Colors

Position

Normal

Color

(Interpolated)Programmable Programmable

Variable Types• const - The declaration is of a compile time constant

• attribute - Global variables that may change per vertex, that are passed from the OpenGL application to vertex shaders. This qualifier can only be used in vertex shaders. For the shader this is a read-only variable.

• varying - used for interpolated data between a vertex shader and a fragment shader. Available for writing in the vertex shader, and read-only in a fragment shader.

• uniform - Global variables that may change per primitive (may not be set inside glBegin,/glEnd), that are passed from the OpenGL application to the shaders. This qualifier can be used in both vertex and fragment shaders. For the shaders this is a read-only variable.

Attribute Variables

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Posit

ions

Framebuffer

Nor

mals

Color

sAttr

ibute

sEye Positions

Eye Normals

Colors

Position

Normal

Color

(Interpolated)Programmable Programmable

Varying Variables

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Posit

ions

Framebuffer

Nor

mals

Color

sAttr

ibute

sEye Positions

Eye Normals

Colors

Varying

Position

Normal

Color

Varying

(Interpolated)Programmable Programmable

Uniform Variables

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Posit

ions

Framebuffer

Nor

mals

Color

sAttr

ibute

s

Eye Normals

Colors

Varying

Position

Normal

Color

Varying

(Interpolated)Programmable Programmable

Uniform

Eye Positions

Why So Fast?

VertexOperation

Rasterization(Interpolation)

FragmentOperation

Posit

ions

Framebuffer

Nor

mals

Color

sAttr

ibute

s

Eye Normals

Colors

Varying

Position

Normal

Color

Varying

(Interpolated)Programmable Programmable

Uniform

Eye Positions

~4 Vertex Shaders

~16 Fragment Shaders

Types and Functions!"#$%&#'()"'*%#+',(

-./012()345/1647(89:;(<;;=(!"#$$!"#%&'()!*+,-#.$!"#/$!"#$0$(>?5/60(@?A./164.A()345/1647(89:B(<;;=(1))-$$"--.$1234$0$1))-$$"56.$1234$0$1234$$37,"-.$234/$234$0$1234$$37,"-.$&234/$&234$0$1234$$37,"-.$1234/$1234$0$1234$$8%3"#3%9:"5.$234/$234$0$1234$$8%3"#3%9:"5.$&234/$&234$0$1234$$8%3"#3%9:"5;7,"-.$234/$234$0$1234$$8%3"#3%9:"5;7,"-.$&234/$&234$0$1234$$-3<<9:"5.$234/$234$0$1234$$-3<<9:"5.$&234/$&234$0$1234$$-3<<9:"5;7,"-.$234/$234$0$1234$$-3<<9:"5;7,"-.$&234/$&234$0$1234$$5)#.$1234$0$1234$$5)#;7,"-.$234/$234$0$1234$$5)#;7,"-.$&234/$&234$0$1234$$5)#;7,"-.$1234/$1234$0$$

C?DE(234$=$234>$?$234@$?$234A$!"#$=$!"#>$?$!"#@$?$!"#A$&234$=$&234>$?$&234@$?$&234A$1234$=$1234>$?$1234@$?$1234A$83596*3$=$B-)"#$?$234>$?$234@$?$234A$

F?6G?/015()345/1647(89:H(<;H=(234A$$ B#%"5<B)%!.0$$$$$$$$$$$!"#$"%&'()*$234@$$ 4%)<<.$234@/$234@$0$B-)"#$$ C&<#"543.$83596*3/$83596*3$0$B-)"#$$$ C)#.$83596*3/$83596*3$0$83596*3$$ B"43B)%D"%C.$83596*3$!/$83596*3&+/$83596*3$($0$B-)"#$$$ -358#:.$83596*3$0$83596*3$$ 5)%!"-&E3.$83596*3$0$83596*3$$ %3B-34#.$83596*3&+/$83596*3$($0$83596*3$$ %3B%"4#.$83596*3&+/$83596*3$(/$B-)"#$"$,$0$

I4JA?(.4K(%01J646G?/0D()345/1647(89:L(<;L=(83596*3$$<&5.$83596*3$0$83596*3$$4)<.$83596*3$0$83596*3$$#"5.$83596*3$0$$83596*3$$"<&5.$83596*3$0$83596*3$$"4)<.$83596*3$0$83596*3$$"#"5.$83596*3/$83596*3$0$83596*3$$"#"5.$83596*3$0$$83596*3$$%"C&"5<.$83596*3$0 83596*3$$C38%33<.$83596*3$0$$

*6GG64()345/1647(89:M(<;N=(83596*3$$"1<.$83596*3$0$83596*3$$43&-.$83596*3$0$83596*3$$4-"!*.$83596*3/$83596*3/$83596*3$0$83596*3$$4-"!*.$83596*3/$B-)"#/$B-)"#$0$83596*3$$B-))%.$83596*3$0$83596*3$$B%"4#.$83596*3$0$83596*3$$!"'.$83596*3/$83596*3$0$83596*3$$!"'.$83596*3/$B-)"#$0$83596*3$$!&5.$83596*3/$83596*3$0$83596*3$$!&5.$83596*3/$B-)"#$0$83596*3$$!&'.$83596*3/$83596*3/$83596*3$0$83596*3$$!&'.$83596*3/$83596*3/$B-)"#$0$83596*3$$!)C.$83596*3/$83596*3$0$83596*3$$!)C.$83596*3/$B-)"#$0$83596*3$$<&85.$83596*3$0$83596*3$$<!))#:<#3*.$83596*3/$83596*3/$83596*3$0$83596*3$$<!))#:<#3*.$B-)"#/$B-)"#/$83596*3$0$83596*3$$<#3*.$83596*3/$83596*3$0$83596*3$$<#3*.$B-)"#/$83596*3$0$$

O2<64?4/1.A()345/1647(89:N(<;N=(83596*3$$*)D.$83596*3/$83596*3$0$83596*3$$3'*.$83596*3$0$83596*3$$-)8.$83596*3$0$83596*3$$3'*>.$83596*3$0$83596*3$$-)8>.$83596*3$0$83596*3$$<7%#.$83596*3$0$83596*3$$&523%<3<7%#.$83596*3$0$

)0.JG?4/(P065?7714J()345/1647(89:9(<;9=($&-#,./"0$&'()*$83596*3$$CFC'.$83596*3$0$83596*3$$CFC6.$83596*3$0$83596*3$$BD&C#:.$83596*3$0

%?2/30?($66Q3<()345/1647(89:R(<;B=$$$'1$230,4&52,6&$"#/&26&-#,./"0$&'()*&234A$$#3'#,%3GH.$<"!*-3%GH/$B-)"#$I/B-)"#$52,6J$0$234A$$#3'#,%3GHK%)L.$<"!*-3%GH/$234>$I/B-)"#$52,6J$0$234A$$#3'#,%3GHK%)L.$<"!*-3%GH/$234A$I/B-)"#$52,6J$0$$234A$$#3'#,%3>H.$<"!*-3%>H/$234>$I/B-)"#$52,6J$0$234A$$#3'#,%3>HK%)L.$<"!*-3%>H/$234@$I/B-)"#$52,6J$0$234A$$#3'#,%3>HK%)L.$<"!*-3%>H/$234A$I/B-)"#$52,6J$0$$234A$$#3'#,%3@H.$<"!*-3%@H/$234@$I/B-)"#$52,6J$0$234A$$#3'#,%3@HK%)L.$<"!*-3%@H/$234A$I/B-)"#$52,6J$0$$234A$$#3'#,%3(,13.$<"!*-3%(,13/$234@$I/B-)"#$52,6J$0$$234A$$<:"C)DGH.$<"!*-3%GHM:"C)D/$234@$I/B-)"#$52,6J$0$234A$$<:"C)D>H.$<"!*-3%>HM:"C)D/$234@$I/B-)"#$52,6J$0$234A$$<:"C)DGHK%)L.$<"!*-3%GHM:"C)D/$234A$I/B-)"#$52,6J$0$234A$$<:"C)D>HK%)L.$<"!*-3%>HM:"C)D/$234A$I/B-)"#$52,6J$0$

%?2/30?($66Q3<()345/1647(S1/T($+U(89:R(<;B=$$!"#$"%&'()*7&"068#"&9):;<=:!>?@>=:@>=@A?>:+;<9>:A(+@B&C&D$234A$$#3'#,%3GHN)C.$<"!*-3%GH/$B-)"#/$B-)"#&43E$0$234A$$#3'#,%3GHK%)LN)C.$<"!*-3%GH/$234>/$B-)"#&43E$0$234A$$#3'#,%3GHK%)LN)C.$<"!*-3%GH/$234A/$B-)"#&43E$0$$234A$$#3'#,%3>HN)C.$<"!*-3%>H/$234>/$B-)"#&43E$0$234A$$#3'#,%3>HK%)LN)C.$<"!*-3%>H/$234@/$B-)"#&43E$0$234A$$#3'#,%3>HK%)LN)C.$<"!*-3%>H/$234A/$B-)"#&43E$0$234A$$#3'#,%3@HK%)LN)C.$<"!*-3%@H/$234A/$B-)"#&43E$0$$234A$$#3'#,%3(,13N)C.$<"!*-3%(,13/$234@/$B-)"#$43E&0$$234A$$<:"C)DGHN)C.$<"!*-3%GHM:"C)D/$234@/$B-)"#&43E&0$234A$$<:"C)D>HN)C.$<"!*-3%>HM:"C)D/$234@/$B-)"#&43E$0$234A$$<:"C)DGHK%)LN)C.$<"!*-3%GHM:"C)D/$234A/$B-)"#&43E$0$234A$$<:"C)D>HK%)LN)C.$<"!*-3%>HM:"C)D/$234A/$B-)"#&43E&0

'617?()345/1647(89:V(<BW=(B-)"#$$5)&<3G.$83596*3$0$234>$$5)&<3>.$83596*3$0$234@$$5)&<3@.$83596*3$0$234A$$5)&<3A.$83596*3$0$

+<?4F$X(,T.K14J($.4J3.J?(8F$,$=(Y315Q(@?Z?0?45?(F31K?$

$H3<4%&13<$ONMN$23%<&)5$GPGQ/$"<$&54-,C3C$&5$R*35ON$2>PQ/$"5C$<*34&B&3C$16$S9:3$R*35ONT$M:"C&58$N"58,"83S/$23%<&)5$GPGQPUVP$$M34#&)5$"5C$*"83$5,!13%<$%3B3%$#)$#:"#$23%<&)5$)B$#:3$<*34P$

P@OP@+*O,,+@(8M:M(<V=$W$WC3B&53$W,5C3B$W&B$W&BC3B$W&B5C3B$W3-<3$W3-&B$W35C&B$W3%%)%$W*%"8!"$W-&53$

$XXNYZ;XX$XXFYN;XX$XX[;\MYRZXX$

(F$,$([?07164(K?5A.0./164(.4K(?2/?471647(<06/656AE(W23%<&)5$$$$$$$$$C3B",-#$&<$SW23%<&)5$GGQS$.@P@$*GG0$W3'#35<&)5$]0,/"$?$"--^$_$]%37,&%3$?$35"1-3$?$D"%5$?$C&<"1-3^$$$$$$$$$C3B",-#$&<$SW3'#35<&)5$"--$_$C&<"1-3S$.@P@$*GG0$

UI%I(%\PO,(8H:L(<LB=$$

B-)"#/$234>/$234@/$234A$$&5#/$&234>/$&234@/$&234A$$1))-/$1234>/$1234@/$1234A$$!"#>/$!"#@/$!"#A$$2)&C$$<"!*-3%GH/$<"!*-3%>H/$<"!*-3%@H$$<"!*-3%(,13$$<"!*-3%GHM:"C)D/$<"!*-3%>HM:"C)D$

UI%I(%\PO(Y"I$#)#O@,(8H:M(<NN=(($

JA6].A([.01.]A?(K?5A.0./1647E(,5&B)%!$ &5*,#$#)$[3%#3'$"5C$F%"8!35#$<:"C3%$B%)!$R*35ON$)%$

"**-&4"#&)5$.\;`HaRZNb0$"##%&1,#3$ &5*,#$*3%a23%#3'$#)$[3%#3'$<:"C3%$B%)!$R*35ON$)%$

"**-&4"#&)5$.\;`HaRZNb0$2"%6&58$ ),#*,#$B%)!$[3%#3'$<:"C3%$.\;`Hcd\Y9;0/$&5#3%*)-"#3C/$

#:35$&5*,#$#)$F%"8!35#$<:"C3%$.\;`HaRZNb0$4)5<#$ 4)!*&-3a#&!3$4)5<#"5#$.\;`HaRZNb0$$Z345/164(<.0.G?/?07E(&5$$ 2"-,3$&5&#&"-&E3C$)5$35#%6/$5)#$4)*&3C$)5$%3#,%5$.C3B",-#0$),#$$ 4)*&3C$),#$)5$%3#,%5/$1,#$5)#$&5&#&"-&E3C$&5),#$$ 2"-,3$&5&#&"-&E3C$)5$35#%6/$"5C$4)*&3C$),#$)5$%3#,%5$4)5<#$$ 4)5<#"5#$B,54#&)5$&5*,#$

>O*%+@(*+-P+'O'%,(8;:;(<(MW=$$

F3/130"0$&0,/"6&/,G&03$&5"&/2%"E&,F#366&6"$6&&$$$$$$$$'/$6/$E/$D$$$$$$$$$%/$8/$1/$"$$$$$$$$$</$#/$*/$7$

Type Properties

• Matrix / vector / integer / floating point types.

• Strict casting requirements.

• Const / attribute / varying / uniform variables.

Control Loops in GLSL

for (int i=0 ; i<10 ; i++) {statements;

}

if (condition) {statements;

} else {statements;

}

while (condition) {statements;

}

Beware:If Statement

Implementation

Builtins!"#$"%&'()*"#&!)#+),-"'&

.#)/0"1$&'()*"#&!)#+),-"'&!

!'234567&89:29:&!6;56<73=&>?@A&2BCD&!"##$%%&'(!"#$%!!&'()*+&,-'-*.!"#$%!!&'()*+&/+0+1&'(2+3/*+45677#*89.!7'-+0!!&'()*+&/#:0;.!!!!!!!!)*+,-./&01+2"03442567!

'234567&+E29:&!6;56<73=&>?@A&2BCD&!"##$%%&'8!"#$%!!&'()*+&,--*<.!!!!!!!!!!!!!!!!9:;$1!#4425:<"=$%!=--'!!&'()*->0)+$?>&.!

,F+-$G+1&F1+.8#0=&>?@H&2BHD&&"##$%%&'8!!6>?7-*@!@+0%!!&'(2-<#'A?#42+0*?3.!6>?7-*@!@+0%!!&'(2-<#'A?#4B*-C#$0?->2+0*?3.!6>?7-*@!@+0%!!&'(B*-C#$0?->2+0*?3.!6>?7-*@!@+0%!!&'(D#306*#2+0*?31&'(2+3D#306*#,--*<89.!!6>?7-*@!@+0%!!&'(2-<#'A?#42+0*?3E>"#*8#.!6>?7-*@!@+0%!!&'(2-<#'A?#4B*-C#$0?->2+0*?3E>"#*8#.!6>?7-*@!@+0%!!&'(B*-C#$0?->2+0*?3E>"#*8#.!6>?7-*@!@+0%!!&'(D#306*#2+0*?3E>"#*8#1&'(2+3D#306*#,--*<89.!!6>?7-*@!@+0%!!&'(2-<#'A?#42+0*?3D*+>8:-8#.!6>?7-*@!@+0%!!&'(2-<#'A?#4B*-C#$0?->2+0*?3D*+>8:-8#.!6>?7-*@!@+0%!!&'(B*-C#$0?->2+0*?3D*+>8:-8#.!6>?7-*@!@+0%!!&'(D#306*#2+0*?3D*+>8:-8#1&'(2+3D#306*#,--*<89.!!6>?7-*@!@+0%!!&'(2-<#'A?#42+0*?3E>"#*8#D*+>8:-8#.!6>?7-*@!@+0%!!&'(2-<#'A?#4B*-C#$0?->2+0*?3E>"#*8#D*+>8:-8#.!6>?7-*@!@+0%!!&'(B*-C#$0?->2+0*?3E>"#*8#D*+>8:-8#.!6>?7-*@!@+0%!!&'(D#306*#2+0*?3E>"#*8#D*+>8:-8#1&'(2+3D#306*#,--*<89.!!6>?7-*@!@+0F!!&'(G-*@+'2+0*?3.!6>?7-*@!7'-+0!!!&'(G-*@+'H$+'#.!!80*6$0!&'(/#:0;I+>&#B+*+@#0#*8!J!!!!!7'-+0!>#+*.!!!!!7'-+0!7+*.!!!!!7'-+0!<?77.!K.!6>?7-*@!&'(/#:0;I+>&#B+*+@#0#*8!&'(/#:0;I+>&#.!!80*6$0!!&'()-&B+*+@#0#*8!J!!!!!"#$%!!$-'-*.!!!!!7'-+0!!<#>8?0L.!!!!!7'-+0!!80+*0.!!!!!7'-+0!!#><.!!!!!7'-+0!!8$+'#.!K.!6>?7-*@!&'()-&B+*+@#0#*8!&'()-&.!!80*6$0!&'(M?&;0H-6*$#B+*+@#0#*8!J!!!!!"#$%!!+@=?#>0.!!!!!"#$%!!<?7768#.!!!!!"#$%!!8:#$6'+*.!!!!!"#$%!!:-8?0?->.!!!!!"#$%!!;+'7A#$0-*.!!!!!"#$F!!8:-0/?*#$0?->.!!!!!7'-+0!!8:-0N3:->#>0.!!!!!7'-+0!!8:-0,60-77.!!!!!7'-+0!!8:-0,-8,60-77.!!!!!7'-+0!!$->80+>0O00#>6+0?->.!!!!!7'-+0!!'?>#+*O00#>6+0?->.!!!!!7'-+0!!P6+<*+0?$O00#>6+0?->.!K.!6>?7-*@!&'(M?&;0H-6*$#B+*+@#0#*8!&'(M?&;0H-6*$#1&'(2+3M?&;089.

!80*6$0!!&'(M?&;02-<#'B+*+@#0#*8!J!!!!!"#$%!!+@=?#>0.!K.!6>?7-*@!&'(M?&;02-<#'B+*+@#0#*8!&'(M?&;02-<#'.!!80*6$0!!&'(M?&;02-<#'B*-<6$08!J!!!!!"#$%!!8$#>#,-'-*.!K.!6>?7-*@!&'(M?&;02-<#'B*-<6$08!!&'()*->0M?&;02-<#'B*-<6$0.!6>?7-*@!&'(M?&;02-<#'B*-<6$08!!&'(5+$QM?&;02-<#'B*-<6$0.!!80*6$0!!&'(M?&;0B*-<6$08!J!!!!!"#$%!!+@=?#>0.!!!!!"#$%!!<?7768#.!!!!!"#$%!!8:#$6'+*.!K.!6>?7-*@!&'(M?&;0B*-<6$08!&'()*->0M?&;0B*-<6$01&'(2+3M?&;089.!6>?7-*@!&'(M?&;0B*-<6$08!&'(5+$QM?&;0B*-<6$01&'(2+3M?&;089.!!80*6$0!&'(2+0#*?+'B+*+@#0#*8!J!!!!!"#$%!!#@?88?->.!!!!!"#$%!!+@=?#>0.!!!!!"#$%!!<?7768#.!!!!!"#$%!!8:#$6'+*.!!!!!7'-+0!!8;?>?>#88.!K.!6>?7-*@!&'(2+0#*?+'B+*+@#0#*8!&'()*->02+0#*?+'.!6>?7-*@!&'(2+0#*?+'B+*+@#0#*8!&'(5+$Q2+0#*?+'.!!80*6$0!&'(B-?>0B+*+@#0#*8!J!!!!!7'-+0!!8?R#.!!!!!7'-+0!!8?R#2?>.!!!!!7'-+0!!8?R#2+3.!!!!!7'-+0!!7+<#D;*#8;-'<H?R#.!!!!!7'-+0!!<?80+>$#,->80+>0O00#>6+0?->.!!!!!7'-+0!!<?80+>$#M?>#+*O00#>6+0?->.!!!!!7'-+0!!<?80+>$#S6+<*+0?$O00#>6+0?->.!K.!6>?7-*@!&'(B-?>0B+*+@#0#*8!&'(B-?>0.!!6>?7-*@!"#$%!!&'(D#306*#N>",-'-*1&'(2+3D#306*#T>?089.!!UVW!!6>?7-*@!"#$%!!&'(,'?:B'+>#1&'(2+3,'?:B'+>#89.!!6>?7-*@!"#$%!!&'(NL#B'+>#H1&'(2+3D#306*#,--*<89.!6>?7-*@!"#$%!!&'(NL#B'+>#D1&'(2+3D#306*#,--*<89.!6>?7-*@!"#$%!!&'(NL#B'+>#I1&'(2+3D#306*#,--*<89.!6>?7-*@!"#$%!!&'(NL#B'+>#S1&'(2+3D#306*#,--*<89.!!6>?7-*@!"#$%!!&'(X=C#$0B'+>#H1&'(2+3D#306*#,--*<89.!6>?7-*@!"#$%!!&'(X=C#$0B'+>#D1&'(2+3D#306*#,--*<89.!6>?7-*@!"#$%!!&'(X=C#$0B'+>#I1&'(2+3D#306*#,--*<89.!6>?7-*@!"#$%!!&'(X=C#$0B'+>#S1&'(2+3D#306*#,--*<89.

!

'234567&89:29:&!6;56<73=&>?@I&2BAD&&"##$%%&'(!"#$%!!&'(B-8?0?->.!!!!!!!!!%>"5$2!?@%=!A2:=$!

7'-+0!!&'(B-?>0H?R#.!!!!!!!$<"B1$!C.DE*'/*FDG'8C',HDG8IJ/DKIL*!"#$%!!&'(,'?:A#*0#3. !6;J5EK&89:29:=&>?@L&2BMD&!"##$%%&'(!"+*L?>&!"#$%!!&'()*->0,-'-*.!"+*L?>&!"#$%!!&'(5+$Q,-'-*.!!$<"B1$!C.DE*'/*FDG'8C',HD/(8DKI)*!"+*L?>&!"#$%!!&'()*->0H#$-><+*L,-'-*.!"+*L?>&!"#$%!!&'(5+$QH#$-><+*L,-'-*.!"+*L?>&!"#$%!!&'(D#3,--*<1!9.!!!!!!!!H,F&01DH";/$;=@2$34425%!"+*L?>&!7'-+0!!&'()-&)*+&,--*<.

)::;5<9:3&+E29:=&>?@C&2BBD&!"##$%%&'8!+00*?=60#!"#$%!!&'(A#*0#3.!+00*?=60#!"#$F!!&'(G-*@+'.!+00*?=60#!"#$%!!&'(,-'-*.!+00*?=60#!"#$%!!&'(H#$-><+*L,-'-*.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<Y.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<V.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<Z.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<F.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<%.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<[.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<\.!+00*?=60#!"#$%!!&'(26'0?D#3,--*<].!+00*?=60#!7'-+0!!&'()-&,--*<.!

!6;J5EK&+E29:=&>?@L&2BMD&!"##$%%&'8!"+*L?>&!"#$%!!&'(,-'-*.!"+*L?>&!"#$%!!&'(H#$-><+*L,-'-*.!"+*L?>&!"#$%!!&'(D#3,--*<1!9.!!!!!!!!H,F&01DH";/$;=@2$34425%!"+*L?>&!7'-+0!!&'()-&)*+&,--*<.

823E'43E3/;62N&O;3=3:&FE5PQ;R=&&!"#$%#&'(#)*+#?>0!!!! -8&()*+@#G6@=#*.!7'-+0!! -8&()*+@#D?@#.!7'-+0!! -8&(/#'0+)*+@#D?@#.!@+0%!!! -8&(A?#42+0*?3.!@+0%!!! -8&(A?#42+0*?3E>"#*8#.!!

,F+-$G+1&S81'$)1$'&>?@B&2BBD&&$->80!?>0!&'(2+3A#*0#3T>?7-*@,-@:->#>08.!!$->80!?>0!&'(2+3)*+&@#>0T>?7-*@,-@:->#>08.!$->80!?>0!&'(2+3A#*0#3O00*?=8.!!$->80!?>0!&'(2+3A+*L?>&)'-+08.!!$->80!?>0!&'(2+3/*+45677#*8.!!$->80!?>0!&'(2+3D#306*#,--*<8.!!$->80!?>0!&'(2+3D#306*#T>?08.!$->80!?>0!&'(2+3D#306*#E@+&#T>?08.!!$->80!?>0!&'(2+3A#*0#3D#306*#E@+&#T>?08.!$->80!?>0!&'(2+3,-@=?>#<D#306*#E@+&#T>?08.!$->80!?>0!&'(2+3M?&;08.!$->80!?>0!&'(2+3,'?:B'+>#8.!!

.5E3&2;5E:&T&U5=4765R3;&,-:L*?&;0!ZYY[!2?Q#!^#?='#>!!;00:_``@#4a$3`!B'#+8#!8#><!7##<=+$Q`$-**#$0?->8`$-@@#>08!0-!&'8'b@#4a$3!X:#>cM!?8!+!*#&?80#*#<!0*+<#@+*Q!-7!H?'?$->!c*+:;?$8!E>$a!N3$#:0!+8!>-0#<!=#'-4d!?7!<?8$*#:+>$?#8!=#04##>!0;?8!&6?<#!+><!0;#!cMHM!8:#$?7?$+0?->d!=#'?#"#!0;#!8:#$e!I#"?8#<!ZYY[fVVfZ\!!1Q:3=!Va!,-**#$08!+!0L:-!?>!0;#!X:#>cM!ZaY!8:#$?7?$+0?->a!

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

Soft Shadows

• Why? How?

Hard Shadows

43Computer Graphics 15-462

!"#$%&'!"#$%&'(%))*+(&",+,(%-.,)/'(#+,("0$$,1(2+%3(#(405"/('%*+),

%30/(#16(01/,1'0/6()%1/+0-*/0%1(2+%3("0$$,1(405"/('%*+),'

7%+8015(%*/(&"#/(0/("0$$,1(0'('03946(#(:0'0-040/6(9+%-4,3

)#1(/",(405"/('%*+),(',,(/",(%-.,)/;

*',(/",(<=-*22,+('"#$%&(#45%+0/"3>

+*1(/",(#45%+0/"3(2+%3(/",(405"/('%*+),?'(:0,&9%01/

'#:,(/",(<=-*22,+(#'(/",('"#$%&(-*22,+

+*1(/",(+,#4(<=-*22,+(#45%+0/"3@(/+#1'2%+3015(,#)"(9%01/(01/%(/",(405"/('%*+),?'()%%+$01#/,'(#1$()%39#+015(/",(<(:#4*,(#5#01'/(/",('"#$%&(-*22,+

How does the z-buffer work?How can we use the z-buffer to compute shadows?

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

GPU Shading

• Announcements

• GPU Shading Overview

• Example 1: Shadow Maps

• Example 2: Algebraic Surfaces

Happy GPU Coding!

top related