Transcript Grafika 3D
Slide 1
Jacek Matulewski (e-mail: [email protected])
ZMK, Instytut Fizyki, WFAiIS, UMK
XNA 4.0
Wprowadzenie do grafiki 3D
Wersja: 26 marca 2011
Slide 2
Zapowiedź
• Sentymentalne wspomnienia
o historii grafiki 3D
• Kilka pojęć grafiki 3D:
werteks, model Phonga, efekty
• Wprowadzenie do XNA
• Co nowego w XNA 4.0?
• Pytania i nagrody
Slide 3
Historia grafiki
• 1960s – projektowanie komp. (Boeing, Peugot, Renault)
• 1970s – pojawiają się PC, pierwsze gry 2D, SIGGRAPH
• 1980s – Amiga, gry 2D stają się powszechne, SGI (GL),
Luxo Jr. (1986), Flight Simulator (1982-2006)
• 1990s – OpenGL (1992), Wolfenstein 3-D (1992),
Doom (1993), DirectX w Windows 95 (1994),
Voodoo (1996), Quake (1996), Unreal (1998),
Toy Story (1996) z Pixar (dawniej w IL&M)
• 2000s – Shrek (2001) i inne => śmierć kreskówki
DirectX 9.0c (2004) => gry 3D są powszechne
Managed DirectX (MDX, 2002), XNA (2006)
Slide 4
Historia grafiki
1992, id Software
Slide 5
Historia grafiki
Quake (1996)
Quake II (1997)
Quake III Arena (1999)
Quake 4 (2005)
Źródło: http://www.club3d.nl/index.php/thema/subject/index/6
Slide 6
Historia grafiki
Tron (1982) – Disney
Luxo, Jr (1986) – Pixar
Toy Story (1996) – Pixar
Shrek (2001)
Dreamworks
Slide 7
Grafika w nowej perspektywie
Slide 8
XNA
Idea 1: dostęp do Direct3D i DirectDraw z języków .NET
Idea 2: przenośność (PC z Windows, Xbox 360, WP7, Zune)
skupienie na grze, a nie na platformie sprzętowej
Idea 3: pełne wykorzystanie obecnych kart graficznych
(programowalne jednostki kart graficznych)
Slide 9
Architektura XNA
edytor, debuger,
IntelliSense (IDE)
Framework
Matrix, Vector3
klasy opakow. DX
GC, VC#
wątki (TPL), IO
DirectX
Gamepad
Źródło: Mitch Walker, prezentacja na Gamefest 2008
Slide 10
Prymitywy
Podstawowe pojęcia grafiki 3D:
• Prymityw – figura zbudowane z werteksów, dwustronna
zbiór wierzchołków
Prim..Type.TriangleList
PrimitiveType.PointList Pri..Type.TriangleStrip
PrimitiveType.LineList Prim..Type.TriangleFan
PrimitiveType.LineStrip
inna jest ilość werteksów używanych do narysowania linii i ciągu linii
Brakuje czworokątów (quad) i wielokątów – trzeba je samodzielnie budować z trójkątów
Slide 11
Potok
Aplikacja XNA
Strumień
werteksów
Shader werteksów
Współrzędne werteksów
w układzie ekranu
Kolor, normalne,
współrzędne tekstury
Rasteryzator
Interpolator
Geometry shader?
Shader pikseli
Strumień pikseli
Test bufora głębi
Bufor ramki
Monitor
Slide 12
Profile (XNA 4.0)
Zbiór cech charakteryzujących karty graficzne, ich
możliwości wyświetlania (nie ma już diagnostyki).
Upraszcza tworzenie projektów przenaszalnych
i na platformy o zunifikowanych specyfikacjach.
Profil
Reach
HiDef
Platformy
WP7, Xbox 360,
PC z DX9
Xbox 360,
PC z DX10
Vertex Shader
1.0, 1.1, 2.0
1.0, 1.1, 2.0, 3.0
Pixel Shader
2.0
2.0
Tekstury
2^n, 2048
dowolne, 4096
Index buffer
16 bit
16 bit i 32 bit
3.0
poza WP7
Slide 13
Efekt (klasa Effect i BasicEffect)
Klasa reprezentująca Pixel i Vertex Shadery w kodzie C#.
Dostęp do własności wyświetlania (GraphicDevice).
Bez przygotowywania własnych shaderów można
używać klasy BasicEffect (we wszystkich wersjach XNA):
• macierze świata i widoku: własności World i View
• macierz rzutowania: własność Projection
• domyślne oświetlenie: DirectionalLight0-2, światło tła
+ efekt mgła (nie można zmieniać położenia źródeł św.)
• teksturowanie: własność Texture
Slide 14
Nowe efekty w XNA 4.0
• DualTextureEffect – nałożenie dwóch tekstur
• EnvironmentMapEffect – mapowanie środowiskowe
na bazie kubicznej tekstury (użytej też do skyboxa).
Dodatkowo: jej kanał alpha to obraz świateł rozbłysku.
• AlphaTestEffect – kanał alfa używany jako
„zamiennik” testu głębokości (raczej w 2D).
Piksele nie są rysowane tam, gdzie A < ustalony próg
• SkinnedEffect –rigging i skinning modeli
• IEffectMatrices, IEffectLights (3), IEffectFog
Wszystkie efekty są konfigurowalne (jak BasicEffect)
Slide 15
EnvironmentMapEffect
• Tekstura kubiczna
http://blogs.msdn.com/b/shawnhar/archive/2010/08/09/environmentmapeffect.aspx
Slide 16
EnvironmentMapEffect
http://blogs.msdn.com/b/shawnhar/archive/2010/08/09/environmentmapeffect.aspx
Slide 17
DualTextureEffect
output.rgb = Texture1.rgb * Texture2.rgb * 2;
output.a = Texture1.a * Texture2.a;
http://blogs.msdn.com/b/shawnhar/archive/2010/08/04/dualtextureeffect.aspx
Slide 18
Nowe efekty w XNA 4.0
Demo
Slide 19
Wbudowane obiekty stanów
Wcześniej umieszczone w GraphicsDevice
(teraz nie można ich tam edytować)
Wbudowane stany:
• RasterizedState (por. nieistniejący już RenderState)
odpowiada za potok renderowania (m.in. CullMode).
• DepthStencilState – test głębokości i test szablonowy
• BlendState – blending, mieszanie kolorów (przezrocz.)
• SamplerState – reprezentuje próbnik (sampler) tekstury
Slide 20
Konwersja z XNA 3.x do 4.0
• Typowa postać metody Draw (XNA 3.0)
protected override void Draw(GameTime gameTime)
{
GraphicsDevice gd = graphics.GraphicsDevice;
gd.Clear(Color.Black);
gd.RenderState.CullMode=CullMode.None; gd.RasterizerState = RasterizerState.CullNone;
gd.SetVertexBuffer(buforWerteksowTrojkata);
gd.Vertices[0].SetSource(buforWerteksowTrojkata,0,VertexPositionColor.SizeInBytes);
gd.VertexDeclaration = new VertexDeclaration(gd, VertexPositionColor.VertexElements);
efekt.Begin();
foreach (EffectPass pass in efekt.CurrentTechnique.Passes)
{
pass.Begin(); pass.Apply();
gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
pass.End();
}
efekt.End();
base.Draw(gameTime);
}
Slide 21
Konwersja z XNA 3.x do 4.0
Demo
Slide 22
Transformacje
Podstawowe pojęcia grafiki 3D:
• Transformacje – określane we współrzędnych sceny 3D
translacja (Matrix.CreateTranslation, macierz 4x4!),
obrót (Matrix.CreateRotationXYZ, z osi obrotu i kąta,
yaw+pitch+roll, klasa Quaternion)
skalowanie (Matrix.CreateScale), pochylenie
złożenie – dowolna macierz 4x4 (Matrix.Multiply)
• Rozdzielenie macierzy świata i widoku (wygoda!)
• Transformacje są wykonywane „od końca”
(post-multiplication)
Slide 23
Transformacje
• We współrzędnych kartezjańskich (2D)
obrót i translacja mogą być zapisane:
o xy x 0 t x o xx x 0 o yx y 0 t x
o yy y 0 t y o yx x 0 o yy y 0 t y
x 0 o xx
x
ˆ
O T o
y
y0
yx
• We współrzędnych jednorodnych:
x
x 0 o xx
y H y 0 o yx
1
1 0
o xy
o yy
0
t x x 0 o xx x 0 o yx y 0 t x
t y y 0 o yx x 0 o yy y 0 t y
1 1
1
Wprowadzone w 1946 przez E. Maxwella (rzutowanie).
W 1965 L. Roberts użył ich do zunifikowania zapisu wszystkich transformacji:
obrotów, translacji, skalowanie i pochylania + rzutowania.
Slide 24
Światło (cieniowanie)
Fizyczny model oświetlenia – na efekt końcowy (tj. kolor
piksela) wpływają „własności emisyjne” źródła światła,
„własności absorpcyjne” materiału, który jest oświetlany
i własności ewentualnych ciał półprzezroczystych
+
+
=
Typy źródeł oświetlenia:
• Światło otoczenia (ambient) – światło
bez źródła
słoneczne
i kierunku
• –Rozproszone
rozświetla jednorodnie
(diffuse) – posiada
całą scenę,
wźródło,
białym
także
ale
pomieszczeniu
wewnątrz
jest jednorodne
figur)
• we
–Rozproszone
Rozbłysk
nie
wszystkich
daje (specular)
cieni
(diffuse)
kierunkach
na obiekcie
– –źródło
mleczna
(nie
i kierunek
ma
żarówka,
złudzenia
świeca
3D)
• reflektor,
Generalnie:
Rozbłyskefekt
(specular)
Jasność
„zajączka”
proporcjonalna
– reflektor,
– rozbłysku
odbicienaodgładkich
lustra pow.
do kosinusa kąta padania (normalna)
Dla każdego typu parametry materiału ustalane są osobno
Slide 25
Model oświetlenia Phonga
+
+
=
• Opracowany w 1975 przez Phong Bui-Tuonga
• Jest jedynie zgrubnym przybliżeniem praw optyki
• Zakłada trzy niezależne komponenty odbitego światła
• Światło rozproszone – prawo Lamberta (1760)
• Model cieniowania Phonga (coś innego niż model ośw.)
= interpolacja normalnych (uśrednianie normalnych)
Slide 26
Model oświetlenia Phonga
+
+
=
• W XNA i Direct3D model Phonga jest
uzupełniony o światło emisji (emission)
• Imitacja źródła światła
(jednak nie oświetla innych aktorów na scenie!)
• Realizowane podobnie jak światło otoczenia
Slide 27
Model oświetlenia Phonga
Demo
Slide 28
Czego potrzebujemy…
• Karta graficzna zgodna z DirectX 9.0/10.0 (Shader 2.0)
• Visual Studio 2010 lub Visual C# 2010 Express
• Platforma .NET 4.0 (instalowana razem z VS/VC#)
• Windows Phone 7 Developer Tools zawiera XNA 4.0
• XNA Game Studio 4.0
• NVidia FX Composer 2.5 – narzędzie bardzo pomocne
do programowania shaderów
Slide 29
Czego nie musimy…
• Znać algorytmów cieniowania (shading),
chyba, że programujemy procesory strumieniowe
• Zajmować się algorytmami kreślenia linii z pikseli
(programowaniem antyaliasingu, itp.)
• Algorytmy optymalnego rysowania trójkątów,
zapełniania wielokątów, rysowania krzywych
• Usuwać niewidocznych na scenie werteksów,
powierzchni przesłoniętych przez innych aktorów
To robią karty graficzne i biblioteka XNA!
Slide 30
Nie musimy także…
• Znać algebry wektorów i macierzy (Vector34, Matrix)
(w tym macierz translacji, obrotu, rzutowania itd.)
• Tworzyć pętli głównej, dbać o timery inicjujące
renderowanie sceny i „odświeżanie” logiki aplikacji
• Wiedzieć, czym są współrzędne jednorodne,
w których pracują karty graficzne
• Obsługiwać sterowników urządzeń wejścia
(sterowników gier) i wyjścia (karty dźwiękowej)
To robią biblioteki platformy XNA!
Slide 31
Co musimy zrobić sami…
• Cienie rzucane na podłoże i inne przedmioty
rzutowanie cieni, shadow mapping, volumetric shadows
• Fizyka: rozwiązywanie równań ruchu, detekcja kolizji
są biblioteki komercyjne i rozwiązania sprzętowe (GPU)
• Wszelkie odstępstwa od domyślnego oświetlenia
i teksturowania wymagają programowania shaderów
(w tym już zmiana pozycji źródeł światła)
• Programowanie logiki w C# 4.0
Zaplecze w XNA 4.0: .NET Framework 4.0 (TPL)
Slide 32
XNA 4.0 + .NET 4.0
• Ciekawe nowości w .NET 4.0:
– TPL (Parallel Extensions)
np. zrównoleglenie silnika fizyki
– MEF – zarządzanie wtyczkami (plugins)
– System.Numerics.Complex, BigInteger
– Lazy<>, argumenty domyślne
– Dynamic (DLR)
Slide 33
Pytania
Slide 34
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
Slide 35
Slide 36
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
2. Jakie nowe efekty pojawiły się w XNA 4.0?
Wymień przynajmniej trzy.
Slide 37
Slide 38
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
2. Jakie nowe efekty pojawiły się w XNA 4.0?
Wymień przynajmniej trzy.
3. Które transformacje 3D można
zapisać w macierzy 3x3?
Obrót, translacja, pochylenie, skalowanie,
rzutowanie ortogonalne, rzutowanie perspektywiczne.
Slide 39
Slide 40
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
2. Jakie nowe efekty pojawiły się w XNA 4.0?
Wymień przynajmniej trzy.
3. Które transformacje w 3D można
zapisać w macierzy 3x3?
Obrót, translacja, pochylenie, skalowanie,
rzutowanie ortogonalne, rzutowanie perspektywiczne.
4. Wymienić składniki we wzorze na kolor
obiektu w modelu oświetlenia Phonga.
Slide 41
Dziękuję!
Jacek Matulewski (e-mail: [email protected])
ZMK, Instytut Fizyki, WFAiIS, UMK
XNA 4.0
Wprowadzenie do grafiki 3D
Wersja: 26 marca 2011
Slide 2
Zapowiedź
• Sentymentalne wspomnienia
o historii grafiki 3D
• Kilka pojęć grafiki 3D:
werteks, model Phonga, efekty
• Wprowadzenie do XNA
• Co nowego w XNA 4.0?
• Pytania i nagrody
Slide 3
Historia grafiki
• 1960s – projektowanie komp. (Boeing, Peugot, Renault)
• 1970s – pojawiają się PC, pierwsze gry 2D, SIGGRAPH
• 1980s – Amiga, gry 2D stają się powszechne, SGI (GL),
Luxo Jr. (1986), Flight Simulator (1982-2006)
• 1990s – OpenGL (1992), Wolfenstein 3-D (1992),
Doom (1993), DirectX w Windows 95 (1994),
Voodoo (1996), Quake (1996), Unreal (1998),
Toy Story (1996) z Pixar (dawniej w IL&M)
• 2000s – Shrek (2001) i inne => śmierć kreskówki
DirectX 9.0c (2004) => gry 3D są powszechne
Managed DirectX (MDX, 2002), XNA (2006)
Slide 4
Historia grafiki
1992, id Software
Slide 5
Historia grafiki
Quake (1996)
Quake II (1997)
Quake III Arena (1999)
Quake 4 (2005)
Źródło: http://www.club3d.nl/index.php/thema/subject/index/6
Slide 6
Historia grafiki
Tron (1982) – Disney
Luxo, Jr (1986) – Pixar
Toy Story (1996) – Pixar
Shrek (2001)
Dreamworks
Slide 7
Grafika w nowej perspektywie
Slide 8
XNA
Idea 1: dostęp do Direct3D i DirectDraw z języków .NET
Idea 2: przenośność (PC z Windows, Xbox 360, WP7, Zune)
skupienie na grze, a nie na platformie sprzętowej
Idea 3: pełne wykorzystanie obecnych kart graficznych
(programowalne jednostki kart graficznych)
Slide 9
Architektura XNA
edytor, debuger,
IntelliSense (IDE)
Framework
Matrix, Vector3
klasy opakow. DX
GC, VC#
wątki (TPL), IO
DirectX
Gamepad
Źródło: Mitch Walker, prezentacja na Gamefest 2008
Slide 10
Prymitywy
Podstawowe pojęcia grafiki 3D:
• Prymityw – figura zbudowane z werteksów, dwustronna
zbiór wierzchołków
Prim..Type.TriangleList
PrimitiveType.PointList Pri..Type.TriangleStrip
PrimitiveType.LineList Prim..Type.TriangleFan
PrimitiveType.LineStrip
inna jest ilość werteksów używanych do narysowania linii i ciągu linii
Brakuje czworokątów (quad) i wielokątów – trzeba je samodzielnie budować z trójkątów
Slide 11
Potok
Aplikacja XNA
Strumień
werteksów
Shader werteksów
Współrzędne werteksów
w układzie ekranu
Kolor, normalne,
współrzędne tekstury
Rasteryzator
Interpolator
Geometry shader?
Shader pikseli
Strumień pikseli
Test bufora głębi
Bufor ramki
Monitor
Slide 12
Profile (XNA 4.0)
Zbiór cech charakteryzujących karty graficzne, ich
możliwości wyświetlania (nie ma już diagnostyki).
Upraszcza tworzenie projektów przenaszalnych
i na platformy o zunifikowanych specyfikacjach.
Profil
Reach
HiDef
Platformy
WP7, Xbox 360,
PC z DX9
Xbox 360,
PC z DX10
Vertex Shader
1.0, 1.1, 2.0
1.0, 1.1, 2.0, 3.0
Pixel Shader
2.0
2.0
Tekstury
2^n, 2048
dowolne, 4096
Index buffer
16 bit
16 bit i 32 bit
3.0
poza WP7
Slide 13
Efekt (klasa Effect i BasicEffect)
Klasa reprezentująca Pixel i Vertex Shadery w kodzie C#.
Dostęp do własności wyświetlania (GraphicDevice).
Bez przygotowywania własnych shaderów można
używać klasy BasicEffect (we wszystkich wersjach XNA):
• macierze świata i widoku: własności World i View
• macierz rzutowania: własność Projection
• domyślne oświetlenie: DirectionalLight0-2, światło tła
+ efekt mgła (nie można zmieniać położenia źródeł św.)
• teksturowanie: własność Texture
Slide 14
Nowe efekty w XNA 4.0
• DualTextureEffect – nałożenie dwóch tekstur
• EnvironmentMapEffect – mapowanie środowiskowe
na bazie kubicznej tekstury (użytej też do skyboxa).
Dodatkowo: jej kanał alpha to obraz świateł rozbłysku.
• AlphaTestEffect – kanał alfa używany jako
„zamiennik” testu głębokości (raczej w 2D).
Piksele nie są rysowane tam, gdzie A < ustalony próg
• SkinnedEffect –rigging i skinning modeli
• IEffectMatrices, IEffectLights (3), IEffectFog
Wszystkie efekty są konfigurowalne (jak BasicEffect)
Slide 15
EnvironmentMapEffect
• Tekstura kubiczna
http://blogs.msdn.com/b/shawnhar/archive/2010/08/09/environmentmapeffect.aspx
Slide 16
EnvironmentMapEffect
http://blogs.msdn.com/b/shawnhar/archive/2010/08/09/environmentmapeffect.aspx
Slide 17
DualTextureEffect
output.rgb = Texture1.rgb * Texture2.rgb * 2;
output.a = Texture1.a * Texture2.a;
http://blogs.msdn.com/b/shawnhar/archive/2010/08/04/dualtextureeffect.aspx
Slide 18
Nowe efekty w XNA 4.0
Demo
Slide 19
Wbudowane obiekty stanów
Wcześniej umieszczone w GraphicsDevice
(teraz nie można ich tam edytować)
Wbudowane stany:
• RasterizedState (por. nieistniejący już RenderState)
odpowiada za potok renderowania (m.in. CullMode).
• DepthStencilState – test głębokości i test szablonowy
• BlendState – blending, mieszanie kolorów (przezrocz.)
• SamplerState – reprezentuje próbnik (sampler) tekstury
Slide 20
Konwersja z XNA 3.x do 4.0
• Typowa postać metody Draw (XNA 3.0)
protected override void Draw(GameTime gameTime)
{
GraphicsDevice gd = graphics.GraphicsDevice;
gd.Clear(Color.Black);
gd.RenderState.CullMode=CullMode.None; gd.RasterizerState = RasterizerState.CullNone;
gd.SetVertexBuffer(buforWerteksowTrojkata);
gd.Vertices[0].SetSource(buforWerteksowTrojkata,0,VertexPositionColor.SizeInBytes);
gd.VertexDeclaration = new VertexDeclaration(gd, VertexPositionColor.VertexElements);
efekt.Begin();
foreach (EffectPass pass in efekt.CurrentTechnique.Passes)
{
pass.Begin(); pass.Apply();
gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
pass.End();
}
efekt.End();
base.Draw(gameTime);
}
Slide 21
Konwersja z XNA 3.x do 4.0
Demo
Slide 22
Transformacje
Podstawowe pojęcia grafiki 3D:
• Transformacje – określane we współrzędnych sceny 3D
translacja (Matrix.CreateTranslation, macierz 4x4!),
obrót (Matrix.CreateRotationXYZ, z osi obrotu i kąta,
yaw+pitch+roll, klasa Quaternion)
skalowanie (Matrix.CreateScale), pochylenie
złożenie – dowolna macierz 4x4 (Matrix.Multiply)
• Rozdzielenie macierzy świata i widoku (wygoda!)
• Transformacje są wykonywane „od końca”
(post-multiplication)
Slide 23
Transformacje
• We współrzędnych kartezjańskich (2D)
obrót i translacja mogą być zapisane:
o xy x 0 t x o xx x 0 o yx y 0 t x
o yy y 0 t y o yx x 0 o yy y 0 t y
x 0 o xx
x
ˆ
O T o
y
y0
yx
• We współrzędnych jednorodnych:
x
x 0 o xx
y H y 0 o yx
1
1 0
o xy
o yy
0
t x x 0 o xx x 0 o yx y 0 t x
t y y 0 o yx x 0 o yy y 0 t y
1 1
1
Wprowadzone w 1946 przez E. Maxwella (rzutowanie).
W 1965 L. Roberts użył ich do zunifikowania zapisu wszystkich transformacji:
obrotów, translacji, skalowanie i pochylania + rzutowania.
Slide 24
Światło (cieniowanie)
Fizyczny model oświetlenia – na efekt końcowy (tj. kolor
piksela) wpływają „własności emisyjne” źródła światła,
„własności absorpcyjne” materiału, który jest oświetlany
i własności ewentualnych ciał półprzezroczystych
+
+
=
Typy źródeł oświetlenia:
• Światło otoczenia (ambient) – światło
bez źródła
słoneczne
i kierunku
• –Rozproszone
rozświetla jednorodnie
(diffuse) – posiada
całą scenę,
wźródło,
białym
także
ale
pomieszczeniu
wewnątrz
jest jednorodne
figur)
• we
–Rozproszone
Rozbłysk
nie
wszystkich
daje (specular)
cieni
(diffuse)
kierunkach
na obiekcie
– –źródło
mleczna
(nie
i kierunek
ma
żarówka,
złudzenia
świeca
3D)
• reflektor,
Generalnie:
Rozbłyskefekt
(specular)
Jasność
„zajączka”
proporcjonalna
– reflektor,
– rozbłysku
odbicienaodgładkich
lustra pow.
do kosinusa kąta padania (normalna)
Dla każdego typu parametry materiału ustalane są osobno
Slide 25
Model oświetlenia Phonga
+
+
=
• Opracowany w 1975 przez Phong Bui-Tuonga
• Jest jedynie zgrubnym przybliżeniem praw optyki
• Zakłada trzy niezależne komponenty odbitego światła
• Światło rozproszone – prawo Lamberta (1760)
• Model cieniowania Phonga (coś innego niż model ośw.)
= interpolacja normalnych (uśrednianie normalnych)
Slide 26
Model oświetlenia Phonga
+
+
=
• W XNA i Direct3D model Phonga jest
uzupełniony o światło emisji (emission)
• Imitacja źródła światła
(jednak nie oświetla innych aktorów na scenie!)
• Realizowane podobnie jak światło otoczenia
Slide 27
Model oświetlenia Phonga
Demo
Slide 28
Czego potrzebujemy…
• Karta graficzna zgodna z DirectX 9.0/10.0 (Shader 2.0)
• Visual Studio 2010 lub Visual C# 2010 Express
• Platforma .NET 4.0 (instalowana razem z VS/VC#)
• Windows Phone 7 Developer Tools zawiera XNA 4.0
• XNA Game Studio 4.0
• NVidia FX Composer 2.5 – narzędzie bardzo pomocne
do programowania shaderów
Slide 29
Czego nie musimy…
• Znać algorytmów cieniowania (shading),
chyba, że programujemy procesory strumieniowe
• Zajmować się algorytmami kreślenia linii z pikseli
(programowaniem antyaliasingu, itp.)
• Algorytmy optymalnego rysowania trójkątów,
zapełniania wielokątów, rysowania krzywych
• Usuwać niewidocznych na scenie werteksów,
powierzchni przesłoniętych przez innych aktorów
To robią karty graficzne i biblioteka XNA!
Slide 30
Nie musimy także…
• Znać algebry wektorów i macierzy (Vector34, Matrix)
(w tym macierz translacji, obrotu, rzutowania itd.)
• Tworzyć pętli głównej, dbać o timery inicjujące
renderowanie sceny i „odświeżanie” logiki aplikacji
• Wiedzieć, czym są współrzędne jednorodne,
w których pracują karty graficzne
• Obsługiwać sterowników urządzeń wejścia
(sterowników gier) i wyjścia (karty dźwiękowej)
To robią biblioteki platformy XNA!
Slide 31
Co musimy zrobić sami…
• Cienie rzucane na podłoże i inne przedmioty
rzutowanie cieni, shadow mapping, volumetric shadows
• Fizyka: rozwiązywanie równań ruchu, detekcja kolizji
są biblioteki komercyjne i rozwiązania sprzętowe (GPU)
• Wszelkie odstępstwa od domyślnego oświetlenia
i teksturowania wymagają programowania shaderów
(w tym już zmiana pozycji źródeł światła)
• Programowanie logiki w C# 4.0
Zaplecze w XNA 4.0: .NET Framework 4.0 (TPL)
Slide 32
XNA 4.0 + .NET 4.0
• Ciekawe nowości w .NET 4.0:
– TPL (Parallel Extensions)
np. zrównoleglenie silnika fizyki
– MEF – zarządzanie wtyczkami (plugins)
– System.Numerics.Complex, BigInteger
– Lazy<>, argumenty domyślne
– Dynamic (DLR)
Slide 33
Pytania
Slide 34
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
Slide 35
Slide 36
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
2. Jakie nowe efekty pojawiły się w XNA 4.0?
Wymień przynajmniej trzy.
Slide 37
Slide 38
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
2. Jakie nowe efekty pojawiły się w XNA 4.0?
Wymień przynajmniej trzy.
3. Które transformacje 3D można
zapisać w macierzy 3x3?
Obrót, translacja, pochylenie, skalowanie,
rzutowanie ortogonalne, rzutowanie perspektywiczne.
Slide 39
Slide 40
Pytania
1. Jakie wersje pixel shaderów obsługują
profile Reach i HiDef?
2. Jakie nowe efekty pojawiły się w XNA 4.0?
Wymień przynajmniej trzy.
3. Które transformacje w 3D można
zapisać w macierzy 3x3?
Obrót, translacja, pochylenie, skalowanie,
rzutowanie ortogonalne, rzutowanie perspektywiczne.
4. Wymienić składniki we wzorze na kolor
obiektu w modelu oświetlenia Phonga.
Slide 41
Dziękuję!