spelutveckling med .net

69
Spelutveckling Spelutveckling med .NET med .NET Johan Lindfors

Upload: alta

Post on 08-Feb-2016

52 views

Category:

Documents


1 download

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 Presentation

TRANSCRIPT

Page 1: Spelutveckling med .NET

Spelutveckling Spelutveckling med .NETmed .NET

Johan Lindfors

Page 2: Spelutveckling med .NET

AgendaAgenda Introduktion till DirectX och Direct3D

◦Komponenter◦Grafik

DirectX SDK och Visual Studio◦Visual Studio 2005 Express?

XNA◦XNA Framework◦XNA GameStudio Express

Page 3: Spelutveckling med .NET

Vad är DirectX?◦En grupp av tekniker som erbjuder

multimedafunktioner till Windows-applikationer

◦En samling komponenter◦API oberoende av hårdvara

Page 4: Spelutveckling med .NET

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

Page 5: Spelutveckling med .NET

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

Page 6: Spelutveckling med .NET

“Managed DirectX” “High Level Shader Language” API för animationer Förbättrat 2D stöd

◦Interoperabilitet med GDI En massa annat

Page 7: Spelutveckling med .NET

Komponenter◦DirectX grafik

2D – DirectDraw 3D – Direct3D

◦DirectSound◦DirectInput◦DirectPlay◦AudioVideoPlayback

Enklare hantering av ljud och video Alla funktioner och “features”

Page 8: Spelutveckling med .NET

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

Page 9: Spelutveckling med .NET

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

Page 10: Spelutveckling med .NET

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

Page 11: Spelutveckling med .NET

””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

Page 12: Spelutveckling med .NET

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

Page 13: Spelutveckling med .NET

Vilken är den optimala loopen?

Page 14: Spelutveckling med .NET

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

Page 15: Spelutveckling med .NET

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”

Page 16: Spelutveckling med .NET

Skapa en device och rensa ytan

Page 17: Spelutveckling med .NET

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

Page 18: Spelutveckling med .NET

Rita något på skärmen

Page 19: Spelutveckling med .NET

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

Page 20: Spelutveckling med .NET

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

Page 21: Spelutveckling med .NET

Använda Vertex- och Index-bufferts

Page 22: Spelutveckling med .NET

“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

Page 23: Spelutveckling med .NET

“World Transform”◦Positionerar en modell i förhållande till andra

Förflyttning◦Matrix.Translation(…)

Rotation◦Matrix.RotationX(…)◦Matrix.RotationYawPitchRoll(…)

Skalning◦Matrix.Scaling(…)

TransformationerTransformationer

Page 24: Spelutveckling med .NET

Skapa en kamera

Page 25: Spelutveckling med .NET

(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

Page 26: Spelutveckling med .NET

Använda texturer

Page 27: Spelutveckling med .NET

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

Page 28: Spelutveckling med .NET

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

Page 29: Spelutveckling med .NET

Varde ljus!

Page 30: Spelutveckling med .NET

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

Page 31: Spelutveckling med .NET

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

Page 32: Spelutveckling med .NET

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

Page 33: Spelutveckling med .NET

Avancerade objekt

Page 34: Spelutveckling med .NET

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

Page 35: Spelutveckling med .NET

Animationer

Page 36: Spelutveckling med .NET

Text ”Fog” 2D och 3D tillsammans ”Skybox” ”AlphaBlending” Generera terränger Rita i fullskärm Flera skärmar samtidigt (backspegel)

Andra sakerAndra saker

Page 37: Spelutveckling med .NET

Andra saker…

Page 38: Spelutveckling med .NET

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”

Page 39: Spelutveckling med .NET

””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

Page 40: Spelutveckling med .NET

””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

Page 41: Spelutveckling med .NET

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

Page 42: Spelutveckling med .NET

Effekter och HLSL

Page 43: Spelutveckling med .NET

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

Page 44: Spelutveckling med .NET

Hantera inmatning

Page 45: Spelutveckling med .NET

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

Page 46: Spelutveckling med .NET

Ljud och musik

Page 47: Spelutveckling med .NET

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

Page 48: Spelutveckling med .NET

Hur används Sample Framework?

Page 49: Spelutveckling med .NET

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

Page 50: Spelutveckling med .NET

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

Page 51: Spelutveckling med .NET

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

Page 52: Spelutveckling med .NET

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”

Page 53: Spelutveckling med .NET

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”

Page 54: Spelutveckling med .NET

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

Page 55: Spelutveckling med .NET

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

Page 56: Spelutveckling med .NET

Effekter i MDX 2.0Effekter i MDX 2.0

Page 57: Spelutveckling med .NET

……och lite tilloch lite till

Page 58: Spelutveckling med .NET

Effekter i XNA FrameworkEffekter i XNA Framework

Page 59: Spelutveckling med .NET

Effekter i XNA FrameworkEffekter i XNA Framework

Page 60: Spelutveckling med .NET

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

Page 61: Spelutveckling med .NET

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

Page 62: Spelutveckling med .NET

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)

Page 63: Spelutveckling med .NET

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

Page 64: Spelutveckling med .NET

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

Page 65: Spelutveckling med .NET

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

Page 66: Spelutveckling med .NET

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

Page 67: Spelutveckling med .NET

Tips på böckerTips på böcker Managed DirectX Shaders Modellering Tips och tricks

Page 68: Spelutveckling med .NET

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

Page 69: Spelutveckling med .NET

[email protected]/johanl