spelutveckling med .net
DESCRIPTION
Spelutveckling med .NET. Johan Lindfors. Agenda. Introduktion till DirectX och Direct3D Komponenter Grafik DirectX SDK och Visual Studio Visual Studio 2005 Express? XNA XNA Framework XNA GameStudio Express. Vad är DirectX? - PowerPoint PPT PresentationTRANSCRIPT
Spelutveckling Spelutveckling med .NETmed .NET
Johan Lindfors
AgendaAgenda Introduktion till DirectX och Direct3D
◦Komponenter◦Grafik
DirectX SDK och Visual Studio◦Visual Studio 2005 Express?
XNA◦XNA Framework◦XNA GameStudio Express
Vad är DirectX?◦En grupp av tekniker som erbjuder
multimedafunktioner till Windows-applikationer
◦En samling komponenter◦API oberoende av hårdvara
Grafik◦Direct3D – 3D grafik◦DirectDraw – 2D grafik
Ljud◦DirectSound
Inspelning och uppspelning Mixning i realtid “Surround” och positionering i 3D Filter och effekter (reverb, dist osv)
◦DirectMusic
DirectInput◦Hanterar inmatning med kontroller◦Tangentbord, joysticks, möss osv.◦Stöd för “Force Feedback”
DirectPlay◦Protokoll-oberoende nätverksmöjligheter◦Fungerar med NAT och brandväggar
DirectShow◦“Streaming media”◦Video
“Managed DirectX” “High Level Shader Language” API för animationer Förbättrat 2D stöd
◦Interoperabilitet med GDI En massa annat
Komponenter◦DirectX grafik
2D – DirectDraw 3D – Direct3D
◦DirectSound◦DirectInput◦DirectPlay◦AudioVideoPlayback
Enklare hantering av ljud och video Alla funktioner och “features”
Bättre prestanda◦Eliminerar flaskhalsar med COM
interoperabilitet◦Prestandan ligger i paritet med ren C++
Enklare utveckling◦Färre rader kod◦”Ingen” minneshantering◦Kraftfull debuggning med Visual Studio
Fördelar med MDXFördelar med MDX
Koordinatsystemet◦Vänsterhänt◦Högerhänt (OBS standard i XNA)
Nästan allting konstrueras av trianglar En modell (kallas för Mesh) är en
geometrisk struktur av trianglarY
Z
X
Grundläggande 3DGrundläggande 3D
Vektorer (Vector3)◦Används för att definera punkter, riktningar,
avstånd Matriser
◦Matrix = 4x4 matris◦Används för transformationer
Quaternion◦Används för rotationer
3D matematik3D matematik
””Rendering Pipeline”Rendering Pipeline” Applikation
◦Logik som är specifik för applikationen Geometri
◦Definerar hur “världen” ser ut◦Operationer på polygoner
Rasterisering◦Tilldelar färger till pixlar på skärmen◦Operationer på pixlar
Initialisera
Hanterainmatning
Uppdateravariabler
Uppdateraskärm
Städa upp
Starta Direct3D◦Initialisera objekt◦“RestoreDeviceObjects”
“Main Loop”◦Uppdatera◦Rita◦Repetera
Städa upp
Anatomin av en 3D-Anatomin av en 3D-applikationapplikation
Vilken är den optimala loopen?
Videominne◦Vertexdata, texturer, osv.
3D kort har mer och mer tagit över geometriska operationer
3D kort är mycket bättre på geometri än en vanlig CPU◦Specialiserade för vektor-matematik
Programmerbar “pipeline” ger nya möjligheter
3D kort3D kort
Exponerar funktionalitet från grafikkorten
Hanterar dubbel- och trippel-buffring ”Hardware”
◦Erbjuder bara existerande förmågor ”Reference”
◦Enbart implementera i mjukvara◦Erbjuder alla förmågor◦Betydligt lägre prestanda
Objektet ”device”Objektet ”device”
Skapa en device och rensa ytan
Enkla◦PointList◦LineList◦LineStrip
Lite mer avancerade◦TriangleList◦TriangleStrip◦TriangleFan
v1
v2
v3v4
v5
v6
v1
v2
v3
v4
v5
v1
v2
v3
v4
v5
Primitiva typerPrimitiva typer
Rita något på skärmen
En vertex är mer omfattande än en punkt Vanliga vertex-format (CustomVertex)
◦Transformed - X och Y för skärm◦TransformedColored - ovanstående och färg◦PositionOnly - X, Y och Z◦PositionColored - ovanstående och färg
Kan också innehålla◦Normal för exempelvis ljussättning◦Tu och Tv koordinater för texturer
Lagras ofta i en ”VertexBuffer”
Mer om vertexMer om vertex
Effektivare buffert av vertex◦Kan lagra vertex i GPU-minnet◦Kan kombineras med en uppsättning index
IndexBuffer◦Vektor med int eller short◦Kan snåla med minnet (med begränsningar)
VertexBufferVertexBuffer
Använda Vertex- och Index-bufferts
“View Transform”◦Positionerar kameran◦Kontrollerar kamerans riktning◦Beskriver vad som är uppåt
“Projection Transform”◦Kontrollerar kamerans lins◦Hur mycket och hur långt ska vi se
TransformationerTransformationer
“World Transform”◦Positionerar en modell i förhållande till andra
Förflyttning◦Matrix.Translation(…)
Rotation◦Matrix.RotationX(…)◦Matrix.RotationYawPitchRoll(…)
Skalning◦Matrix.Scaling(…)
TransformationerTransformationer
Skapa en kamera
(0,0)
(1,1)
(1,0) (1,0) (1,1)
(0,1)(0,0)
Texturer◦”Mappa” en bild mot en triangel◦En bild har bara 2 dimensioner◦Tu och Tv koordinater
Direct3D hanterar transformationer
TexturerTexturer
Använda texturer
Olika typer av ljus◦Ambient – Lika mycket ljus överallt◦Direction – solen◦Point – lampa◦Spot – ficklampa
Attribut på ljus◦Position, riktning, räckvidd och avmattning◦”Diffuse”, ”ambient”, ”Specular”
LjussättningLjussättning
Material och skuggorMaterial och skuggor Material reflekterar ljus
◦ ”Diffuse” reflektion◦ ”Ambient” reflektion◦ ”Specular” reflektion och styrka◦ ”Emission” – material verkar skina utan ljus
Skuggor◦ Flat – hela polygonen får samma nyans◦ Gouraud – interpolering mellan vertex
Normalen är viktig!!!
Varde ljus!
Modeller och objekt◦ Skapas sällan av programmerare
Flertal verktyg◦ 3D Studio Max, Maya, Softimage◦ Blender, Milkshape3D
Olika filformat◦ .X är vanligt för DirectX◦ Funktionalitet finns i D3DX
Mesh
Avancerade objektAvancerade objekt
MeshesMeshes Vad behövs för att rita en Mesh
◦ Ladda data Information om vertex och index Material och texturer
◦ Uppdatera postition◦ Rita
Anropa DrawSubset(…) för varje material
Djup med z-buffer◦ Sparar värde på djup för varje pixel◦ Jämförs för att hantera perspektiv
”Stencil buffer”◦ Kan användas för skuggor
Andra buffertsAndra bufferts
Avancerade objekt
Animerade meshes◦“Key Frame animation”◦“Skinned Meshes”
Animations-API för att förenkla◦Har stöd för interpolering mellan “frames”◦Blanda animationer
AnimationerAnimationer
Animationer
Text ”Fog” 2D och 3D tillsammans ”Skybox” ”AlphaBlending” Generera terränger Rita i fullskärm Flera skärmar samtidigt (backspegel)
Andra sakerAndra saker
Andra saker…
Introducerades i DirectX 8 Ger flexibilitet och prestanda Vertex Shader
◦ Jobbar med en vertex åt gången◦ Kan inte lägga till nya vertex
Pixel Shader◦ Jobbar med en pixel åt gången◦ Kan inte lägga till pixlar
””Programmable Pipeline”Programmable Pipeline”
””Vertex Shader”Vertex Shader” Kan skapa effekter som inte setts tidigare
◦ Simulering av kläder◦ Avancerad animation◦ Ansiktsrörelser och talsynkronisering◦ Linseffekter
Verktyg finns◦ Nvidia
Endast en vertex åt gången◦ Kan inte lägga till nya vertex
””Pixel Shader”Pixel Shader” Förändra det som slutligen ritas, per
pixel◦ Ljussättning◦ Skuggor◦ Serieboks utseende
Jobbar med en pixel åt gången◦ Kan inte lägga till nya pixlar
EffektfilerEffektfiler Uppdelade i tre delar Variabel deklarationer
◦ Texturer, matriser, parametrar Tekniker och passager
◦ Tekniker kan delas upp för hantering av olika typer av hårdvara
Funktioner◦ Kod som skrivs i exempelvis HLSL
Effekter och HLSL
DirectInput och numera även XInput Olika enheter
◦ Tangentbord◦ Möss◦ Gamepads och andra kontroller
Relativt enkel hantering◦ Initiera◦ Läs av◦ Agera
Hantera inmatningHantera inmatning
Hantera inmatning
DirectSound◦ Kan använd as för ljudeffekter och musik◦ Hårdvarukontrollerade bufferts
Flexibilitet◦ Positionera ljud i 3D-rymden◦ Lägg till effekter, reverb, eko osv…
Ljud och musikLjud och musik
Ljud och musik
Exempel Tutorials
◦ Bra att börja med◦ Men det finns bättre på nätet
Sample Framework◦ Ett ramverk som utgångspunkt
Verktyg
DirectX SDKDirectX SDK
Hur används Sample Framework?
PIX◦ Kan användas för att analysera applikationen
XACT◦ Verktyg för konstruktion av ljud och
sekvenser DXViewer
◦ Öppna och analysera .X-filer (även .FX) Texture tool
◦ För att skapa och editera texturer
Några verktyg i DirectX Några verktyg i DirectX SDKSDK
33ms… klockan tickar snabbt!◦Den mesta tiden spenderas ritandes◦Hitta ställan att förberäkna värden istället
för beräkningar varje “frame” Minneshantering
◦Trådhantering◦Boxing/unboxing◦Släpp objekt
Tänk på prestandanTänk på prestandan
XNA Game Studio ExpressXNA Game Studio Express Ge ”communityn” möjlighet att skapa
mjukvara för◦ Windows◦ Xbox 360
XNA Game Studio XNA Game Studio ExpressExpress
XNA FrameworkXNA Framework
Skikten i XNA Framework
Plattformen
“CoreFramework”
“ExtendedFramework”
Spel
XACT XINPUT XContentDirect3D
Graphics Audio Input Math Storage
“Application Model” “Content Pipeline”
Starter Kits Kod Innehåll Komponenter
Legend XNA erbjuder Du erbjuder “Community”
Kom snabbt upp ”på banan”◦ Första raden kod du skriver är för ditt spel!
Abstraktion av plattformen◦ Vilken är den bästa designen av loopen?◦ Hur skapar jag och hanterar mitt ”Window”?◦ Hur följer jag alla rekommendationer för
plattformen? Game
◦ Bastypen för alla dina spel◦ Händelser som “Load”, “Update” och “Draw”
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
““Application Model”Application Model”
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
““Application Model”Application Model” GameComponent
◦ Bastypen för alla XNA-komponenter◦ Författaren skriver ”Load”, ”Update” och
”Draw”◦ Kan hitta och interagera med andra
komponenter Game.GameComponents
◦ Hanteras vid exekvering av spelet◦ Fullt ”design-time”-stöd i IDE
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
Byggt på Direct3D 9 Uppdaterat API som följer riktlinjer
för .NET◦ Effects◦ Resources◦ Lock/Unlock◦ Vertex streams
Provided resources◦ Mesh ◦ Texture◦ Effects and shaders
GrafikGrafik
Effekter i MDX 2.0Effekter i MDX 2.0
……och lite tilloch lite till
Effekter i XNA FrameworkEffekter i XNA Framework
Effekter i XNA FrameworkEffekter i XNA Framework
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
Skillnader mot MDXSkillnader mot MDX “Programmable pipeline”
◦ Inget stöd för “fixed-function”◦ Inga ljus, material, transformationer, FVF
Inget stöd för D3DX mesh◦ “C ontent pipeline” hanterar import av .X-filer
Vi kommer att bidra med guide för migrering◦ MDX 1.1 till XNA◦ “Fixed function” till “programmable”-pipeline
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
LjudLjud Bygg dina ljudresurser med XACT
verktyget◦ Lägg till ljud◦ Justera egenskaper◦ Bygg “ljudbanker”
Enklare integration för utvecklare◦ Åtkomst till ljud via logiska namn◦ Loopar, strömmar och minneshantering◦ Ingen lågnivå-hantering av bufferts
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
InmatningInmatning ”Immediate mode” modell för
programmering◦ Ingen initiering◦ Ingen hantering av tillstånd
Erbjuder◦ Xbox 360 kontroller◦ Tangentbord◦ Möss (men bara för Windows)
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
LagringLagring “StorageContainer” agerar som ett
virtuellt filsystem◦ Filer lagras på korrekt plats på varje
plattform◦ Stöd för flera lagringsenheter och profiler
på Xbox 360
Strömbaserad integration med System.IO
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
Vector, Matrix, Quaternion, Plane, AABB, Sphere, Ray, Frustum, Curve
Högerhänt som grundinställning Enkelt integration Tester för snitt Hjälpklasser för förflyttning
MatematikMatematik
Projektmallar för Xbox 360 spel Installera på konsol med F5 “Remote debugging”
◦ “Breakpoints”◦ “Watches”◦ “Debug and Trace” till PC’n
Men inte…◦ “Edit and Continue”◦ Visualiserare för debuggning
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
Utveckling för Xbox 360Utveckling för Xbox 360
PlatformPlatform
CoreCoreFrameworkFramework
ExtendedExtendedFrameworkFramework
GamesGames
XACTXACT XINPUTXINPUT XContentXContentDirect3DDirect3D
GraphicsGraphics AudioAudio InputInput MathMath StorageStorage
Application ModelApplication Model Content PipelineContent Pipeline
Starter KitsStarter Kits CodeCode ConteContenntt
Comps
””Starter Kits”Starter Kits” Kompletta, fungerade spel
◦ Använd som utgångspunkt för dina egna spel◦ Åtkomst via ”New Project…”◦ Tryck på F5 och börja spela◦ Dokumentation och ”tutorials”
Tillgänglighet◦ 2 kommer att inkluderas i XNA Game Studio
Express◦ Nya ”kits” planeras att släppas regelbundet
efter lansering
Tips på böckerTips på böcker Managed DirectX Shaders Modellering Tips och tricks
Andra resurserAndra resurser Forum
◦ www.gamedev.se◦ www.gamedev.net◦ www.flipcode.net◦ www.psionic3d.co.uk
Microsoft◦ msdn.microsoft.com/
forums◦ msdn.microsoft.com/
directx◦ msdn.microsoft.com/xna
◦ www.devmaster.net◦ www.thezbuffer.net◦ www.animate.se
Nvidia◦ developer.nvidia.com
[email protected]/johanl