Sprite Graphics CS 4730 Computer Game Design Slide - - PowerPoint PPT Presentation

sprite graphics
SMART_READER_LITE
LIVE PREVIEW

Sprite Graphics CS 4730 Computer Game Design Slide - - PowerPoint PPT Presentation

Sprite Graphics CS 4730 Computer Game Design Slide material courtesy Walker White (Cornell) CS 4730 First, a history lesson We start


slide-1
SLIDE 1

CS ¡4730 ¡

Sprite ¡Graphics ¡

CS ¡4730 ¡– ¡Computer ¡Game ¡Design ¡ ¡ ¡ Slide ¡material ¡courtesy ¡Walker ¡White ¡(Cornell) ¡

slide-2
SLIDE 2

CS ¡4730 ¡

First, ¡a ¡history ¡lesson… ¡

  • We ¡start ¡with ¡the ¡CRT ¡(cathode ¡ray ¡tube) ¡

– Made ¡up ¡of ¡pixels ¡(picture ¡elements) ¡ – A ¡300x200 ¡screen ¡would ¡have ¡200 ¡scan ¡lines ¡of ¡300 ¡ pixels ¡each ¡ – Each ¡line ¡would ¡get ¡drawn, ¡starMng ¡from ¡the ¡top ¡ and ¡working ¡it’s ¡way ¡down ¡ – This ¡is ¡one ¡reason ¡graphics ¡coordinates ¡start ¡with ¡ the ¡upper ¡leO ¡

2

slide-3
SLIDE 3

CS ¡4730 ¡

History ¡

  • AOer ¡drawing ¡all ¡the ¡scan ¡lines ¡(aka ¡one ¡

frame), ¡the ¡ray ¡gun ¡had ¡to ¡line ¡back ¡up ¡at ¡the ¡ top ¡

  • This ¡delay ¡is ¡called ¡VBLANK ¡

– It’s ¡what ¡makes ¡a ¡PAL ¡TV ¡different ¡than ¡an ¡NTSC, ¡

  • etc. ¡
  • Early ¡game ¡systems ¡didn’t ¡have ¡enough ¡

memory ¡to ¡store ¡one ¡screen’s ¡worth ¡of ¡pixels ¡ at ¡one ¡Mme! ¡

3

slide-4
SLIDE 4

CS ¡4730 ¡

SynctasMc ¡

  • If ¡a ¡game ¡(old ¡or ¡modern) ¡updates ¡the ¡frame ¡

buffer ¡when ¡the ¡scan ¡lines ¡are ¡in ¡the ¡middle ¡of ¡ being ¡drawn, ¡tearing ¡occurs ¡

  • One ¡opMon ¡is ¡to ¡lock ¡the ¡update() ¡method ¡to ¡

VBLANK ¡(not ¡the ¡best ¡opMon) ¡

  • Another ¡is ¡to ¡have ¡more ¡than ¡one ¡buffer ¡and ¡

swap ¡the ¡two ¡during ¡VBLANK ¡

  • This ¡swapping ¡is ¡called ¡VSYNC ¡
  • Good ¡frame ¡rates ¡lock ¡to ¡VSYNC ¡

4

slide-5
SLIDE 5

CS ¡4730 ¡

Pre^y, ¡Pre^y ¡Pictures ¡

  • “Though ¡sMll ¡rooted ¡in ¡the ¡work ¡of ¡the ¡first ¡two ¡

games, ¡X ¡improves ¡on ¡the ¡visuals ¡even ¡more ¡ and ¡features ¡impressive ¡graphical ¡effects.” ¡ ¡

  • “And ¡despite ¡all ¡of ¡their ¡saccharin-­‑sweet ¡

cuteness, ¡the ¡graphics ¡are ¡magnificent. ¡X's ¡ dream ¡of ¡producing ¡an ¡interacMve ¡cartoon ¡has ¡ been ¡fully ¡realized ¡-­‑-­‑ ¡the ¡animaMon ¡is ¡lavish, ¡ the ¡textures ¡rich, ¡and ¡even ¡the ¡most ¡ superfluous ¡touches ¡have ¡been ¡completely ¡ executed.” ¡

5

slide-6
SLIDE 6

CS ¡4730 ¡

Pre^y, ¡Pre^y ¡Pictures ¡

  • Castlevania ¡3 ¡(NES) ¡
  • Super ¡Mario ¡64 ¡(N64) ¡
  • So… ¡it’s ¡all ¡relaMve, ¡huh? ¡

6

slide-7
SLIDE 7

CS ¡4730 ¡

Graphics ¡vs. ¡Visual ¡Design ¡

  • SomeMmes ¡(most ¡Mmes) ¡you ¡don’t ¡have ¡to ¡

have ¡AMAZING ¡graphics ¡

  • You ¡need ¡to ¡have ¡the ¡RIGHT ¡graphics ¡
  • Tetris ¡wouldn’t ¡be ¡“be^er” ¡with ¡sweet ¡bump ¡

mapping ¡

  • Just ¡because ¡we’re ¡using ¡2D, ¡that ¡doesn’t ¡mean

¡ you’re ¡being ¡held ¡back ¡

7

slide-8
SLIDE 8

CS ¡4730 ¡

Graphics ¡vs. ¡Visual ¡Design ¡

8

slide-9
SLIDE 9

CS ¡4730 ¡

Graphics ¡vs. ¡Visual ¡Design ¡

9

slide-10
SLIDE 10

CS ¡4730 ¡

Graphics ¡vs. ¡Visual ¡Design ¡

10

slide-11
SLIDE 11

CS ¡4730 ¡

Graphics ¡vs. ¡Visual ¡Design ¡

11

slide-12
SLIDE 12

CS ¡4730 ¡

The ¡SpriteBatch ¡

  • The ¡SpriteBatch ¡is ¡exactly ¡what ¡it ¡sounds ¡like: ¡

– A ¡way ¡to ¡draw ¡a ¡bunch ¡of ¡Sprites ¡all ¡at ¡once ¡(aka ¡ “in ¡a ¡batch”) ¡ – SpriteBatch ¡composites ¡Sprites ¡on ¡top ¡of ¡each ¡

  • ther, ¡like ¡cels ¡of ¡animaMon ¡
  • With ¡each ¡frame, ¡we ¡need ¡to ¡clear ¡the ¡screen, ¡

stack ¡the ¡sprites, ¡then ¡draw ¡them ¡all ¡to ¡the ¡ screen ¡(and ¡update ¡the ¡system ¡that ¡we ¡have ¡ drawn) ¡

12

slide-13
SLIDE 13

CS ¡4730 ¡

The ¡SpriteBatch ¡

Texture2D background = Content.Load<Texture2D>("stars"); Texture2D shuttle = Content.Load<Texture2D>("shuttle"); Texture2D earth = Content.Load<Texture2D>("earth"); protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White); spriteBatch.Draw(earth, new Vector2(400, 240), Color.White); spriteBatch.Draw(shuttle, new Vector2(450, 240), Color.White); spriteBatch.End(); base.Draw(gameTime); }

13

slide-14
SLIDE 14

CS ¡4730 ¡

The ¡SpriteBatch ¡

  • What ¡this ¡gives ¡us ¡is ¡the ¡library ¡methods ¡we ¡

need ¡to ¡know ¡whether ¡we ¡HAVE ¡to ¡draw ¡each ¡ pixel ¡

  • If ¡two ¡images ¡overlap, ¡which ¡color ¡do ¡you ¡

make ¡the ¡pixel? ¡ ¡This ¡is ¡handled ¡for ¡us! ¡

14

slide-15
SLIDE 15

CS ¡4730 ¡

Sprite ¡Coordinates ¡

  • Sprites ¡are ¡an ¡abstracMon ¡of ¡all ¡graphical ¡

content ¡

  • Three ¡kinds ¡of ¡coordinates: ¡world, ¡screen, ¡and ¡
  • bject ¡
  • We ¡can ¡manipulate ¡sprites ¡using ¡linear ¡algebra ¡

– Some ¡examples ¡include ¡translaMon, ¡scaling, ¡and ¡ rotaMon ¡

15

slide-16
SLIDE 16

CS ¡4730 ¡

Object ¡coordinates ¡

  • PosiMon ¡of ¡a ¡pixel ¡within ¡an ¡object ¡

16

slide-17
SLIDE 17

CS ¡4730 ¡

Screen ¡and ¡world ¡coordinates ¡

17

¡ ¡ ¡

slide-18
SLIDE 18

CS ¡4730 ¡

Drawing ¡Back ¡to ¡Front ¡

  • End() ¡is ¡easy ¡– ¡you ¡call ¡it ¡when ¡you’re ¡finished ¡

drawing ¡things! ¡

18

  • Draw() ¡is ¡a ¡touch ¡more ¡complex, ¡but ¡sMll ¡
  • simple. ¡Three ¡arguments: ¡

– The ¡image ¡to ¡draw ¡ – The ¡posiMon ¡at ¡which ¡to ¡draw ¡ – A ¡color ¡to ¡Mnt ¡it ¡(use ¡Color.White ¡most ¡of ¡the ¡Mme) ¡ e.g. ¡ ¡mySpriteBatch.Draw(background, Vector2.Zero, Color.White); ¡

slide-19
SLIDE 19

CS ¡4730 ¡

Back ¡to ¡front ¡(conMnued) ¡

  • The ¡Begin() ¡method ¡is ¡the ¡most ¡complex ¡
  • You ¡can ¡pass ¡it ¡a ¡variety ¡of ¡parameters ¡that ¡

control ¡how ¡everything ¡is ¡drawn ¡

  • Or ¡you ¡can ¡just ¡pass ¡it ¡nothing ¡(easiest ¡and ¡

therefore ¡most ¡recommended ¡choice) ¡

19

slide-20
SLIDE 20

CS ¡4730 ¡

2D ¡TransformaMons ¡

  • A ¡funcMon ¡T ¡: ¡ ¡

– Moves ¡one ¡set ¡of ¡points ¡to ¡another ¡set ¡of ¡points ¡ – Transforms ¡one ¡coordinate ¡system ¡to ¡another ¡ – The ¡new ¡coordinate ¡system ¡is ¡the ¡distorMon ¡

  • The ¡Idea: ¡Draw ¡then ¡“distort” ¡it ¡

– Examples: ¡Stretching, ¡rotaMng, ¡reflecMng ¡ – Allows ¡us ¡to ¡get ¡mulMple ¡images ¡for ¡free! ¡(i.e. ¡ character ¡facing ¡both ¡direcMons) ¡

20

slide-21
SLIDE 21

CS ¡4730 ¡

The ¡Drawing ¡Transform ¡

  • The ¡simplest ¡transformaMon ¡is ¡a ¡direct ¡

mapping ¡

– Assume ¡pixel ¡(a,b) ¡of ¡the ¡image ¡is ¡blue ¡ – Then ¡screen ¡pixel ¡T(a,b) ¡is ¡blue ¡

  • By ¡default, ¡the ¡object ¡space ¡= ¡screen ¡space ¡

– The ¡color ¡at ¡one ¡point ¡in ¡the ¡image ¡= ¡the ¡color ¡of ¡ the ¡screen’s ¡point ¡ – The ¡draw ¡is ¡the ¡actual ¡transformaMon ¡

21

slide-22
SLIDE 22

CS ¡4730 ¡

TranslaMon ¡TransformaMon ¡

  • T(v) ¡= ¡v ¡+ ¡u ¡

– Here, ¡we ¡shiO ¡an ¡object ¡in ¡the ¡direcMon ¡of ¡u ¡ – Distance ¡shiOed ¡is ¡the ¡magnitude ¡of ¡u ¡

  • This ¡is ¡what ¡is ¡used ¡to ¡place ¡objects ¡on ¡the ¡

screen ¡

  • By ¡default, ¡object ¡origin ¡is ¡screen ¡origin ¡
  • This ¡transformaMon ¡places ¡the ¡object ¡origin ¡at ¡

u ¡

22

slide-23
SLIDE 23

CS ¡4730 ¡

Composing ¡TransformaMons ¡

  • Assume ¡we ¡have ¡two ¡transformaMons, ¡T ¡and ¡S ¡

– Assume ¡pixel ¡(a,b) ¡is ¡blue ¡in ¡the ¡image ¡ – Transform ¡T ¡makes ¡T(a,b) ¡blue ¡ – Transform ¡ST ¡makes ¡S(T(a,b)) ¡blue ¡

  • Consider ¡what ¡you ¡want ¡the ¡image ¡to ¡do, ¡then ¡

break ¡it ¡down ¡into ¡a ¡set ¡of ¡transformaMons ¡

23

slide-24
SLIDE 24

CS ¡4730 ¡

Scrolling ¡

  • Place ¡object ¡in ¡the ¡World ¡at ¡p ¡= ¡(x,y) ¡

– i.e. ¡T(v) ¡= ¡v+p ¡

  • Suppose ¡the ¡screen ¡origin ¡is ¡at ¡q ¡= ¡(x’, ¡y’) ¡

– Then ¡the ¡object ¡on ¡the ¡screen ¡is ¡at ¡point ¡p-­‑q ¡ – S(v) ¡= ¡v-­‑q ¡transforms ¡World ¡coords ¡to ¡Screen ¡ – ST(v) ¡transforms ¡Object ¡to ¡the ¡Screen ¡

  • Thus ¡to ¡scroll: ¡

– To ¡move ¡the ¡object, ¡change ¡T, ¡but ¡not ¡S ¡ – To ¡scroll ¡the ¡screen, ¡change ¡S, ¡but ¡not ¡T ¡

24

slide-25
SLIDE 25

CS ¡4730 ¡

Parallax ¡Scrolling ¡

  • MulMple ¡layers ¡of ¡background, ¡scrolling ¡at ¡

different ¡speeds ¡to ¡give ¡the ¡illusion ¡of ¡depth ¡

25

slide-26
SLIDE 26

CS ¡4730 ¡

Scrolling ¡

  • What ¡about ¡objects ¡not ¡on ¡screen? ¡

– If ¡you ¡try ¡to ¡draw ¡them, ¡that’s ¡fine ¡ – The ¡graphics ¡card ¡will ¡just ¡ignore ¡them ¡

  • But ¡what ¡does ¡that ¡do ¡to ¡your ¡game ¡loop? ¡

– Keeping ¡up ¡with ¡all ¡those ¡objects… ¡ – UpdaMng ¡all ¡those ¡locaMons… ¡

26

slide-27
SLIDE 27

CS ¡4730 ¡

Beware ¡Some ¡Transforms! ¡

  • Scaling ¡can ¡be ¡tough ¡
  • If ¡you ¡up-­‑scale ¡an ¡image, ¡you ¡are ¡increasing ¡the

¡ number ¡of ¡pixels, ¡but ¡not ¡the ¡amount ¡of ¡ informaMon ¡

  • This ¡leads ¡to ¡“jaggies” ¡or ¡blocky ¡images ¡
  • Scaling ¡down ¡is ¡okay ¡(usually) ¡

27

slide-28
SLIDE 28

CS ¡4730 ¡

Beware ¡Transform ¡Order! ¡

Rotate ¡then ¡Translate ¡ ¡Translate ¡then ¡Rotate ¡

28

slide-29
SLIDE 29

CS ¡4730 ¡

AnimaMon ¡

  • Not ¡quite ¡as ¡simple ¡as ¡you ¡might ¡hope… ¡
  • Roll ¡your ¡own ¡AnimatedSprite ¡class ¡

– Here ¡you ¡would ¡load ¡the ¡sprite ¡sheet ¡and ¡keep ¡up ¡ with ¡which ¡frame ¡is ¡up ¡next ¡

  • Try ¡a ¡third-­‑party ¡tool ¡like ¡TexturePacker ¡

29

slide-30
SLIDE 30

CS ¡4730 ¡

Sprite ¡Sheets ¡

30

slide-31
SLIDE 31

CS ¡4730 ¡

What ¡makes ¡a ¡game ¡3D? ¡

  • For ¡the ¡most ¡part, ¡the ¡game ¡is ¡sMll ¡rendered ¡in ¡

2D ¡for ¡a ¡flat ¡monitor ¡screen… ¡

  • So ¡how ¡is ¡it ¡3D? ¡

31

slide-32
SLIDE 32

CS ¡4730 ¡

What ¡makes ¡a ¡game ¡3D? ¡

  • Two ¡main ¡aspects: ¡

– Assets ¡are ¡rendered ¡on ¡all ¡sides ¡ – User ¡has ¡some ¡extra ¡control ¡of ¡the ¡camera ¡to ¡move ¡ in ¡all ¡three ¡direcMons ¡

32

slide-33
SLIDE 33

CS ¡4730 ¡

The ¡Camera ¡

  • When ¡we ¡refer ¡to ¡the ¡camera ¡in ¡a ¡game, ¡we ¡

are ¡referring ¡to ¡the ¡angle ¡and ¡perspecMve ¡of ¡ the ¡player ¡

  • Represented ¡as ¡it’s ¡own ¡coordinate ¡system ¡
  • Moving ¡the ¡camera ¡is ¡another ¡coordinate ¡

transformaMon! ¡

33

slide-34
SLIDE 34

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

  • Orthographic ¡

– perpendicular ¡to ¡the ¡plane ¡of ¡the ¡game ¡ – Z-­‑axis? ¡Top-­‑down ¡perspecMve. ¡ – Y-­‑axis? ¡Side ¡scroller. ¡

  • Handy ¡for ¡arMsts! ¡

– Art ¡is ¡done ¡as ¡Mles ¡and ¡easy ¡to ¡manage ¡

  • Forces ¡2D ¡gameplay ¡only ¡

34

slide-35
SLIDE 35

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

  • Axonometric ¡

– “off ¡axis” ¡view ¡ – Allows ¡for ¡some ¡3D ¡gameplay ¡ – Isometric ¡is ¡most ¡common ¡form ¡

  • All ¡axes ¡are ¡equal ¡

– Can ¡have ¡other ¡forms ¡by ¡shortening/lengthening ¡ some ¡axes ¡for ¡arMsMc ¡reasons ¡

35

slide-36
SLIDE 36

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

36

slide-37
SLIDE 37

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

37

slide-38
SLIDE 38

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

38

slide-39
SLIDE 39

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

39

slide-40
SLIDE 40

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

40

slide-41
SLIDE 41

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

41

slide-42
SLIDE 42

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

42

slide-43
SLIDE 43

CS ¡4730 ¡

Some ¡Types ¡of ¡Cameras ¡

43