XNA 4.0 Wprowadzenie do grafiki 3D

Preview:

DESCRIPTION

Jacek Matulewski (e-mail: jacek@fizyka.umk.pl ) 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

XNA 4.0Wprowadzenie do grafiki 3D

Jacek Matulewski (e-mail: jacek@fizyka.umk.pl)ZMK, Instytut Fizyki, WFAiIS, UMK

Wersja: 26 marca 2011

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

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)

Historia grafiki

1992, id Software

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)

Tron (1982) – Disney

Historia grafiki

Luxo, Jr (1986) – Pixar

Toy Story (1996) – Pixar

Shrek (2001) Dreamworks

Grafika w nowej perspektywie

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

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)

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

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?

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

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

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)

EnvironmentMapEffect

• Tekstura kubiczna

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

EnvironmentMapEffect

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

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;

Nowe efekty w XNA 4.0

Demo

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

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();

Konwersja z XNA 3.x do 4.0

Demo

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)

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

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

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)

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

Model oświetlenia Phonga

Demo

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)

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!

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!

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)

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)

Pytania

Pytania

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

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.

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.

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.

Dziękuję!