41
XNA 4.0 Wprowadzenie do grafiki 3D cek Matulewski (e-mail: [email protected] ) K, Instytut Fizyki, WFAiIS, UMK Wersja: 26 marca 2011

XNA 4.0 Wprowadzenie do grafiki 3D

  • Upload
    tana

  • View
    56

  • Download
    3

Embed Size (px)

DESCRIPTION

Jacek Matulewski (e-mail: [email protected] ) ZMK, Instytut Fizyki, WFAiIS, UMK. XNA 4.0 Wprowadzenie do grafiki 3D. Wersja: 26 marca 2011. Zapowiedź. Sentymentalne wspomnienia o historii grafiki 3D Kilka pojęć grafiki 3D: werteks, model Phonga, efekty Wprowadzenie do XNA - PowerPoint PPT Presentation

Citation preview

Page 1: XNA 4.0 Wprowadzenie do grafiki 3D

XNA 4.0Wprowadzenie do grafiki 3D

Jacek Matulewski (e-mail: [email protected])ZMK, Instytut Fizyki, WFAiIS, UMK

Wersja: 26 marca 2011

Page 2: XNA 4.0 Wprowadzenie do grafiki 3D

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

Page 3: XNA 4.0 Wprowadzenie do grafiki 3D

Historia grafiki

• 1970s – pojawiają się PC, pierwsze gry 2D, SIGGRAPH

• 1980s – Amiga, gry 2D stają się powszechne, SGI (GL), Luxo Jr. (1986), Flight Simulator (1982-2006)

• 1960s – projektowanie komp. (Boeing, Peugot, Renault)

• 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)

Page 4: XNA 4.0 Wprowadzenie do grafiki 3D

Historia grafiki

1992, id Software

Page 5: XNA 4.0 Wprowadzenie do grafiki 3D

Historia grafikiQuake (1996)

Źródło: http://www.club3d.nl/index.php/thema/subject/index/6

Quake II (1997)

Quake III Arena (1999)

Quake 4 (2005)

Page 6: XNA 4.0 Wprowadzenie do grafiki 3D

Tron (1982) – Disney

Historia grafiki

Luxo, Jr (1986) – Pixar

Toy Story (1996) – Pixar

Shrek (2001) Dreamworks

Page 7: XNA 4.0 Wprowadzenie do grafiki 3D

Grafika w nowej perspektywie

Page 8: XNA 4.0 Wprowadzenie do grafiki 3D

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

(programowalne jednostki kart graficznych)

Idea 3: pełne wykorzystanie obecnych kart graficznych

Page 9: XNA 4.0 Wprowadzenie do grafiki 3D

Architektura XNA

FrameworkFramework FrameworkFramework

Źródło: Mitch Walker, prezentacja na Gamefest 2008

DirectXGamepad

GC, VC# wątki (TPL), IO

Matrix, Vector3klasy opakow. DX

edytor, debuger,IntelliSense (IDE)

Page 10: XNA 4.0 Wprowadzenie do grafiki 3D

Podstawowe pojęcia grafiki 3D:

• Prymityw – figura zbudowane z werteksów, dwustronna

zbiór wierzchołków

Prymitywy

PrimitiveType.PointList PrimitiveType.LineList PrimitiveType.LineStrip

inna jest ilość werteksów używanych do narysowania linii i ciągu linii

Prim..Type.TriangleList Pri..Type.TriangleStrip Prim..Type.TriangleFan

Brakuje czworokątów (quad) i wielokątów – trzeba je samodzielnie budować z trójkątów

Page 11: XNA 4.0 Wprowadzenie do grafiki 3D

PotokAplikacja XNA

Rasteryzator Interpolator

Shader werteksów

Strumieńwerteksów

Współrzędne werteksów w układzie ekranu

Kolor, normalne,współrzędne tekstury

Shader pikseli

Test bufora głębi

Bufor ramki

Monitor

Strumień pikseli

Geometry shader?

Page 12: XNA 4.0 Wprowadzenie do grafiki 3D

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 przenaszalnychi 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 3.0

Tekstury 2^n, 2048 dowolne, 4096

Index buffer 16 bit 16 bit i 32 bit

poza WP7

Page 13: XNA 4.0 Wprowadzenie do grafiki 3D

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

Page 14: XNA 4.0 Wprowadzenie do grafiki 3D

Nowe efekty w XNA 4.0

• DualTextureEffect – nałożenie dwóch tekstur

• EnvironmentMapEffect – mapowanie środowiskowena 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)

Page 15: XNA 4.0 Wprowadzenie do grafiki 3D

EnvironmentMapEffect

• Tekstura kubiczna

http://blogs.msdn.com/b/shawnhar/archive/2010/08/09/environmentmapeffect.aspx

Page 16: XNA 4.0 Wprowadzenie do grafiki 3D

EnvironmentMapEffect

http://blogs.msdn.com/b/shawnhar/archive/2010/08/09/environmentmapeffect.aspx

Page 17: XNA 4.0 Wprowadzenie do grafiki 3D

DualTextureEffect

http://blogs.msdn.com/b/shawnhar/archive/2010/08/04/dualtextureeffect.aspx

output.rgb = Texture1.rgb * Texture2.rgb * 2;output.a = Texture1.a * Texture2.a;

Page 18: XNA 4.0 Wprowadzenie do grafiki 3D

Nowe efekty w XNA 4.0

Demo

Page 19: XNA 4.0 Wprowadzenie do grafiki 3D

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

Page 20: XNA 4.0 Wprowadzenie do grafiki 3D

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.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(); gd.DrawPrimitives(PrimitiveType.TriangleList, 0, 1); pass.End(); } efekt.End();

base.Draw(gameTime);}

gd.RasterizerState = RasterizerState.CullNone;

gd.SetVertexBuffer(buforWerteksowTrojkata);

pass.Apply();

Page 21: XNA 4.0 Wprowadzenie do grafiki 3D

Konwersja z XNA 3.x do 4.0

Demo

Page 22: XNA 4.0 Wprowadzenie do grafiki 3D

Transformacje

Podstawowe pojęcia grafiki 3D:

• Transformacje – określane we współrzędnych sceny 3Dtranslacja (Matrix.CreateTranslation, macierz 4x4!), obrót (Matrix.CreateRotationXYZ, z osi obrotu i kąta, yaw+pitch+roll, klasa Quaternion)skalowanie (Matrix.CreateScale), pochyleniezłożenie – dowolna macierz 4x4 (Matrix.Multiply)

• Rozdzielenie macierzy świata i widoku (wygoda!)

• Transformacje są wykonywane „od końca”(post-multiplication)

Page 23: XNA 4.0 Wprowadzenie do grafiki 3D

Transformacje

• We współrzędnych kartezjańskich (2D) obrót i translacja mogą być zapisane:

yyyyx

xyxxx

y

x

yyyx

xyxx

tyoxo

tyoxo

t

t

y

x

oo

ooT

y

xO

y

x

00

00

0

0

0

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.

• We współrzędnych jednorodnych:

111001100

00

0

0

0

0

yyyyx

xyxxx

yyyyx

xxyxx

tyoxo

tyoxo

y

x

too

too

y

x

Hy

x

Page 24: XNA 4.0 Wprowadzenie do grafiki 3D

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

Światło (cieniowanie)

Typy źródeł oświetlenia:• Światło otoczenia (ambient) – bez źródła i kierunku – rozświetla jednorodnie całą scenę, także wewnątrz figur) – nie daje cieni na obiekcie (nie ma złudzenia 3D)

Typy źródeł oświetlenia:• Światło otoczenia (ambient)• Rozproszone (diffuse) – posiada źródło, ale jest jednorodne we wszystkich kierunkach Generalnie: Jasność proporcjonalna do kosinusa kąta padania (normalna)

Typy źródeł oświetlenia:• Światło otoczenia (ambient)• Rozproszone (diffuse)• Rozbłysk (specular) – źródło i kierunek reflektor, efekt „zajączka” – rozbłysku na gładkich pow.

+ + =

Typy źródeł oświetlenia:• Światło otoczenia (ambient) – światło słoneczne w białym pomieszczeniu• Rozproszone (diffuse) – mleczna żarówka, świeca• Rozbłysk (specular) – reflektor, odbicie od lustra

Dla każdego typu parametry materiału ustalane są osobno

Page 25: XNA 4.0 Wprowadzenie do grafiki 3D

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)

Page 26: XNA 4.0 Wprowadzenie do grafiki 3D

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

Page 27: XNA 4.0 Wprowadzenie do grafiki 3D

Model oświetlenia Phonga

Demo

Page 28: XNA 4.0 Wprowadzenie do grafiki 3D

Czego potrzebujemy…

• 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 pomocnedo programowania shaderów

• Karta graficzna zgodna z DirectX 9.0/10.0 (Shader 2.0)

Page 29: XNA 4.0 Wprowadzenie do grafiki 3D

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!

Page 30: XNA 4.0 Wprowadzenie do grafiki 3D

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ącerenderowanie 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!

Page 31: XNA 4.0 Wprowadzenie do grafiki 3D

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

• Wszelkie odstępstwa od domyślnego oświetleniai teksturowania wymagają programowania shaderów(w tym już zmiana pozycji źródeł światła)

• Programowanie logiki w C# 4.0Zaplecze w XNA 4.0: .NET Framework 4.0 (TPL)

są biblioteki komercyjne i rozwiązania sprzętowe (GPU)

Page 32: XNA 4.0 Wprowadzenie do grafiki 3D

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)

Page 33: XNA 4.0 Wprowadzenie do grafiki 3D

Pytania

Page 34: XNA 4.0 Wprowadzenie do grafiki 3D

Pytania

1. Jakie wersje pixel shaderów obsługują profile Reach i HiDef?

Page 35: XNA 4.0 Wprowadzenie do grafiki 3D
Page 36: XNA 4.0 Wprowadzenie do grafiki 3D

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.

Page 37: XNA 4.0 Wprowadzenie do grafiki 3D
Page 38: XNA 4.0 Wprowadzenie do grafiki 3D

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.

Page 39: XNA 4.0 Wprowadzenie do grafiki 3D
Page 40: XNA 4.0 Wprowadzenie do grafiki 3D

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.

Page 41: XNA 4.0 Wprowadzenie do grafiki 3D

Dziękuję!