1 / 39

ΧΝΑ in a nutshell Τι κάνει ένας XNA Developer σε ένα μεγάλο studio ανάπτυξης παιχνιδιών;

Άγγελος Μπιμπούδης, Φοιτητής/Ερευνητής στο Τμήμα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστημίου Αθηνών, Microsoft Student Partner. ΧΝΑ in a nutshell Τι κάνει ένας XNA Developer σε ένα μεγάλο studio ανάπτυξης παιχνιδιών;. Πώς φτάσαμε στο XNA. Assembly Direct3D <= 7.x

bell-webb
Download Presentation

ΧΝΑ in a nutshell Τι κάνει ένας XNA Developer σε ένα μεγάλο studio ανάπτυξης παιχνιδιών;

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ΆγγελοςΜπιμπούδης, Φοιτητής/Ερευνητής στο Τμήμα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστημίου Αθηνών, Microsoft Student Partner ΧΝΑ in a nutshell Τι κάνει ένας XNA Developer σε ένα μεγάλο studio ανάπτυξης παιχνιδιών;

  2. Πώς φτάσαμε στο XNA • Assembly • Direct3D <= 7.x • Προγραμματισμός σε C • Ανεπαρκή εργαλεία • Code porting δύσκολο • Αποκλειστικά fixed function pipeline • Direct3D 8,9 • Προγραμματισμός σε C++ • Βελτιωμένο Hardware Abstraction Layer • Για πρώτη φορά εμφανίζονται programmable pipelines, ενισχύοντας τον προγραμματισμό των 3D γραφικών • Managed Direct3D (MDX) • Πρώτη προσπάθεια να γίνονται κλήσεις DirectX, από .ΝΕΤ βιβλιοθήκες • Προγραμματισμός και σε Visual Basic • Απλοποίηση κώδικα • Αρχίζει και γίνεται προσιτό σε ευρύτερο πλήθος προγραμματιστών • ΧΝΑ

  3. FFP vs Pixel Shaders • Fixed Function Pipeline • Programmable Pipeline

  4. Initializing DirectX – Step 1 // Step 1: Δημιουργία του IDirect3D9 object. md3dObject = Direct3DCreate9(D3D_SDK_VERSION); if( !md3dObject ) { MessageBox(0, "Direct3DCreate9 FAILED", 0, 0); PostQuitMessage(0); }

  5. Initializing DirectX – Step 2 // Step 2: Έλεγχοι για υποστήριξη διάφορων συσκευών D3DDISPLAYMODE mode; md3dObject->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &mode); HR(md3dObject->CheckDeviceType(D3DADAPTER_DEFAULT, mDevType, mode.Format, mode.Format, true)); HR(md3dObject->CheckDeviceType(D3DADAPTER_DEFAULT, mDevType, D3DFMT_X8R8G8B8, D3DFMT_X8R8G8B8, false));

  6. Initializing DirectX – Step 3 // Step 3: Έλεγχος για την υποστήριξη επεξεργαστή κορυφών. D3DCAPS9 caps; HR(md3dObject->GetDeviceCaps(D3DADAPTER_DEFAULT, mDevType, &caps)); DWORD devBehaviorFlags = 0; if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) devBehaviorFlags |= mRequestedVP; else devBehaviorFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING; // If pure device and HW T&L supported if( caps.DevCaps & D3DDEVCAPS_PUREDEVICE && devBehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING) devBehaviorFlags |= D3DCREATE_PUREDEVICE;

  7. Initializing DirectX – Step 4 // Step 4: Fill out the D3DPRESENT_PARAMETERS structure. md3dPP.BackBufferWidth = 0; md3dPP.BackBufferHeight = 0; md3dPP.BackBufferFormat = D3DFMT_UNKNOWN; md3dPP.BackBufferCount = 1; md3dPP.MultiSampleType = D3DMULTISAMPLE_NONE; md3dPP.MultiSampleQuality = 0; md3dPP.SwapEffect = D3DSWAPEFFECT_DISCARD; md3dPP.hDeviceWindow = mhMainWnd; md3dPP.Windowed = true; md3dPP.EnableAutoDepthStencil = true; md3dPP.AutoDepthStencilFormat = D3DFMT_D24S8; md3dPP.Flags = 0; md3dPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; md3dPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

  8. Initializing DirectX – Step 5 // Step 5: Δημιουργία κυρίως object HR(md3dObject->CreateDevice( D3DADAPTER_DEFAULT, // primary adapter mDevType, // device type mhMainWnd, // window associated with device devBehaviorFlags, // vertex processing &md3dPP, // present parameters &gd3dDevice)); // return created device }

  9. XNA Equivalent _

  10. Toggling FullScreen // Switch to fullscreen mode. if( enable ) { // Are we already in fullscreen mode? if( !md3dPP.Windowed ) return; int width = GetSystemMetrics(SM_CXSCREEN); int height = GetSystemMetrics(SM_CYSCREEN); md3dPP.BackBufferFormat = D3DFMT_X8R8G8B8; md3dPP.BackBufferWidth = width; md3dPP.BackBufferHeight = height; md3dPP.Windowed = false; // Change the window style to a more fullscreen friendly style. SetWindowLongPtr(mhMainWnd, GWL_STYLE, WS_POPUP); // If we call SetWindowLongPtr, MSDN states that we need to call // SetWindowPos for the change to take effect. In addition, we // need to call this function anyway to update the window dimensions. SetWindowPos(mhMainWnd, HWND_TOP, 0, 0, width, height, SWP_NOZORDER | SWP_SHOWWINDOW); } // Switch to windowed mode. else { // Are we already in windowed mode? if( md3dPP.Windowed ) return; RECT R = {0, 0, 800, 600}; AdjustWindowRect(&R, WS_OVERLAPPEDWINDOW, false); md3dPP.BackBufferFormat = D3DFMT_UNKNOWN; md3dPP.BackBufferWidth = 800; md3dPP.BackBufferHeight = 600; md3dPP.Windowed = true; // Change the window style to a more windowed friendly style. SetWindowLongPtr(mhMainWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW); // If we call SetWindowLongPtr, MSDN states that we need to call // SetWindowPos for the change to take effect. In addition, we // need to call this function anyway to update the window dimensions. SetWindowPos(mhMainWnd, HWND_TOP, 100, 100, R.right, R.bottom, SWP_NOZORDER | SWP_SHOWWINDOW); } // Reset the device with the changes. onLostDevice(); HR(gd3dDevice->Reset(&md3dPP)); onResetDevice();

  11. Full Screen – XNA Equivalent graphics.IsFullScreen = true/false

  12. Το ΧΝΑ (XNA’s Not Acronymed) είναι το καινούριο framework της Microsoft, αποτελούμενο από εργαλείακαι βιβλιοθήκες, βασισμένα στο .NET Framework 2.0 και στο DirectX9.0. Aφορά τον προγραμματισμό, την σχεδίαση και την διαχείριση περιβάλλοντος, παιχνιδιών για Windows και XBOX 360. Αποτελείται, από το ΧΝΑ Framework και το XNA Game Studio Express τα οποία διανέμονται δωρεάν. Γλώσσα προγραμματισμού: C# (garbage collection, hardware abstraction, thread management, security model) Δεκέμβριος 2006 -> Version 1.0 Απρίλιος 2007-> Version 1.0R Δεκέμβριος 2007 -> Version 2.0 Μάιος 2008 -> Version 3.0 (CTP, αναμένεται τέλος έτους) Microsoft’s XNA Framework

  13. Λιγότερος και απλούστερος κώδικας, εστιάζοντας στην ιδέακαι όχι στην πλατφόρμα ανάπτυξης. Ευκολία στον προγραμματισμόπαιχνιδιών γιαακόμα μεγαλύτερο κοινό: ερασιτέχνες, σπουδαστές και επαγγελματίες Άνετο debugging, crash-free παιχνίδια Ανάπτυξη των δικών μας παιχνιδιών για Windows και ΧΒΟΧ 360 XNA FrameworkΣτόχοι

  14. XNA Development Tools Platform XNA Game Studio Express Επέκταση του Visual Studio C# Express για υποστήριξη του XNA Framework Επιπλέον, προσθέτει υποστήριξη για δημιουργία και διαχείριση περιεχομένου (μοντέλα, ήχος, κτλ) XNA Framework XNA Game Studio Express XNA Framework .NET game framework Άμεση μεταφορά σε XBOX 360

  15. XNA Framework Layers Content Code Components Storage Math Audio Graphics Input Direct3D Starter Kits Content Pipeline XACT XINPUT XContent Application Model Legend Πηγές XNA Προγραμματιστής Games Extended Framework Core Framework Platform

  16. ExtendedFramework

  17. Application Model Έμφαση στην λογική του παιχνιδιού • Εστιάζουμε στο παιχνίδι και όχι στην πλατφόρμα • Τρόπος σχεδίασης game loop • Διαχείριση παραθύρου • Προγραμματιστικοί κανόνες για την πλατφόρμα • Γράφουμε κατευθείαν κώδικα για την λογική του παιχνιδιού • Game • Είναι η βασική κλάση που αρχικοποιεί την μονάδα γραφικών, την λογική του παιχνιδιού, τον κώδικα που ασχολείται με το rendering • Πέντε οι βασικές μέθοδοι

  18. Κορμός Προγράμματος public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; ContentManager content; public Game1() { graphics = new GraphicsDeviceManager( this ); content = new ContentManager( Services ); } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { } protected override void UnloadContent() { } protected override void Update( GameTime gameTime { } protected override void Draw( GameTime gameTime ) { } }

  19. Application Model Δημιουργία components και προσθήκηλειτουργικότητας με αντικειμενοστραφή λογική • Game Component • Βασικός τύπος για όλα τα XNA components • Game.GameComponents • Διαχειρίζονται από την managed πλατφόρμα του framework • Προσθέτουν λειτουργικότητα • Game Logic • Rendering Code • Frame rate • Menus

  20. Content Pipeline Σύστημα επεξεργασίας content pipeline διαχειριζόμενο από το περιβάλλον του VS C# Express • To XNA παρέχει απλό και κατανοητό τρόπο για να προσθέσουμε όλα τα σχεδιαστικά στοιχεία στο παιχνίδι μας ότι format και αν έχουν. • Το σύστημα ροής περιεχομένων είναι σχεδιασμένο έτσι ώστε να επιτρέπει στους προγραμματιστές να: • Χρησιμοποιούν ότι εργαλεία (digital content creation tools) σχεδίασης θέλουν • Ξεδιπλώνουν όλο το περιεχόμενο που έχουν ετοιμάσει δένοντάς το με την μηχανή γραφικών • Έρχονται κοντά προγραμματιστής και σχεδιαστής από θέμα ευκολίας επίβλεψης και παραμετροποίησης περιεχομένου • Βασική κλάση το ContentManager • Standar class • Custom Importer method & Processor method

  21. CoreFramework

  22. Graphics Παρέχονται χαμηλού επιπέδου κλήσεις συστήματος για την κάρτα γραφικών • Δομημένο με βάση το Direct3D 9 • Καλοσχεδιασμένες μέθοδοι ακολουθώντας την λογική σχεδίασης .ΝΕΤ εφαρμογών • Διαχειρίζονται • Meshes • Texture • Effects • Shaders …

  23. Sound Άνεση στην διαχείριση ήχων • Διαχείριση αρχείων XACT • Προσθήκη ήχων • Ρύθμιση παραμέτρων • Δημιουργία συλλογών από ήχους • Εύκολο integration για τους προγραμματιστές • Ανάκτηση με λογικά ονόματα • Looping, streaming, και memory management • Buffer Management υψηλού επιπέδου

  24. Input Υποστήριξη διαχείρισης εισόδων παικτών • Έτοιμο προγραμματιστικό μοντέλο • ΔΕΝ χρειάζεται αρχικοποίηση • ΔΕΝ χρειάζεται διαχείριση καταστάσεων • Παρέχονται • Υποστήριξη για XBOX χειριστήρια • Πληκτρολόγιο • Ποντίκι (αν πρόκειται για παιχνίδι Windows)

  25. Storage Παρέχεται εύκολο APΙ για λειτουργίες, ανάγνωσης εγγραφής στο σύστημα αρχείων της εκάστοτε πλατφόρμας • Το StorageContainer αποτελεί για τον προγραμματιστή ένα εικονικό σύστημα αρχείων • To XNA είναι αρμόδιο για το που και με ποιον τρόπο θα αποθηκεύσει δεδομένα • Υποστήριξη όλων των ειδών αποθήκευσης για XBOX • Όλες οι λειτουργίες βασίζονται στο System.IO namespace οπότε είναι κάτι πραγματικά εύκολο για τους προγραμματιστές.

  26. Mathematics Εξειδικευμένη βιβλιοθήκη μαθηματικών λειτουργιών • Διανύσματα, πίνακες, μετασχηματισμοί, προβολές, σφαίρες, ακτίνες, καμπύλες, γεωμετρία χώρου • Εύκολη προσαρμογή μαθηματικών μοντέλων στην game engine που σχεδιάζουμε • Παρέχεται βοήθεια για κινήσεις δομικών στοιχείων παιχνιδιών

  27. XNA Namespaces • Microsoft.Xna.Framework • Microsoft.Xna.Framework.Audio • Microsoft.Xna.Framework.Content • Microsoft.Xna.Framework.Design • Microsoft.Xna.Framework.GamerServices • Microsoft.Xna.Framework.Graphics • Microsoft.Xna.Framework.Graphics.PackedVector • Microsoft.Xna.Framework.Input • Microsoft.Xna.Framework.Net • Microsoft.Xna.Framework.Storage

  28. ΧΝΑ & ΧΒΟΧ 360 • Υπέρτατη προγραμματιστική εμπειρία • 95% του API είναι κοινό μεταξύ Windows και XBOX 360 • Προδιαγεγραμμένες οδηγίες που ακολουθούμε ώστε το 100% των παιχνιδιών μας να τρέχει χωρίς αλλαγές σε ΧΒΟΧ 360 • Δεν χρησιμοποιούμε Windows-Specific κλάσεις από Framework API (Form, Control, EventArgs) • Δεν χρησιμοποιούμε XNA Framework API που αναφέρεται ως Windows-Only στο documentation (Texture2D.FromFile(), Mouse.GetState() ) • Κώδικας, textures, media κτλ δεν πρέπει να ξεπερνούν τα 2GB. • Ονόματα αρχείων (conventions για μέγεθος ονομάτων, κτλ) • Threading

  29. Unmanaged Code Native binaries, που εκτελούνται από την CPU Managed Code Ο compiler παράγει ενδιάμεσο κώδικα (IL) O Just-In-Time compiler μεταφράζει τον IL σε native κώδικα (σε run time) Οφέλη Διαχείριση μνήμης Ανεξαρτησία πλατφόρμας Ασφάλεια Native vs. managed

  30. Απαιτητική η διαδικασία επεξεργασίας γραφικών, όμως… Το βάρος πέφτει αποκλειστικά στην GPU Μελετάμε τα system calls Managed βιβλιοθήκες που χρησιμοποιούν την native υλοποίηση του DirectX Overhead αμελητέο και πολλές φορές μηδενικό Optimized έκδοση του .NETcf Performance Monitoring Tools XNA Performance

  31. Profiling on Xbox 360XNA Framework Remote Performance Monitor for Xbox 360 • Βασικές πληροφορίες για GC • Επίγνωση για προβλήματα GC • System calls διερευνώνται και αναφέρονται προσεκτικά • Δυστυχώς όχι καλή υποστήριξη για υπολογιστικά bottlenecks

  32. Profiling on Xbox 360

  33. Profiling on WindowsCLR Profiler for the .NET Framework 2.0

  34. Τελικά τι έκανε ο XNA developer; • Οι old-school gd’sτον υποδέχτηκαν γεμάτο καχυποψία • Ο XNA developer δεν πτοήθηκε, γιατί δεν ξέρει κάτι διαφορετικό από εκείνους. Χρησιμοποιούσε ένα έξυπνο εργαλείο που τον μύησε στο game design. • Στα project-ακια του έπαιξε με shaders, χρησιμοποίησε AI, physics, κτλ • Προκάλεσε σύγχυση και άφησε το video να παίζει… viewer discretion advised :P

  35. XNA in action

  36. Χρήσιμα links για XNA • Downloads • Microsoft Visual C# Express • XNA Game Studio Express • DirectX SDK - (August 2007)(κυρίως για documentation) • Πηγές • Forums • forums.microsoft.com/msdn • XNA Developer Center • msdn.com/xna

  37. Χρήσιμα links για XNA • XNA team blog • blogs.msdn.com/xna • XNA Creators Club Online • creators.xna.com • Community sites • XNAResources.com • XNADevelopment.com • Performance από .NETcf team (link1link2) • Διαθέσιμες οι παρουσιάσεις για XNA από GDC 2008 • Θα βρείτε την παρουσίαση στο studentguru.gr • Ελληνικό blog του XNA (δηλώστε συμμετοχή)http://www.studentguru.gr/blogs/xna/default.aspx • To blog μου: Delicate Sound of Developmenthttp://www.studentguru.gr/blogs/grnemo

  38. ΧΝΑ & ΧΒΟΧ 360 • XBOX Live Silver/Gold Subscription • XNA Creators Club Academic Subscription (δωρεάν συνδρομή ενός χρόνουμέσω ELMS)

  39. Q&A Ευχαριστώ, Happy Joyful Game Designers 

More Related