470 likes | 663 Views
SESSION CODE: WPH308. Building a High Performance 3D Games for Windows Phone. Adam Schaeffer Microsoft Corporation. Windows Phone 7 Hardware. Consistent sets of hardware capabilities defined by Microsoft. Resolution Touch Input CPU / GPU RAM Hardware keyboard is optional. The CPU.
E N D
SESSION CODE: WPH308 Building a High Performance 3D Games for Windows Phone Adam Schaeffer Microsoft Corporation
Windows Phone 7 Hardware Consistent sets of hardware capabilities defined by Microsoft • Resolution • Touch Input • CPU / GPU • RAM • Hardware keyboard is optional
The Evolution Of Programming High level abstraction Rely on compiler and runtime Low level control Developer productivity Straight to the metal Raw performance tuning
C++ Interview Question for (EntityList::iterator it = entities.begin(); it != entities.end(); it++) { ICollidable* col = dynamic_cast<ICollidable*>(*it); if (col) pendingCollisions.push_back(new CollisionInfo(col)); }
Why C# r0x0rz Powerful and expressive Type safety reduces hard-to-track-down bugs Reflection C# Initializer syntax Blazingly fast compiles Great tooling (IntelliSense) Similar enough to C that learning and porting are easy
.NET on Windows Usually within a few percent of native performance Awesome generational garbage collection Performance shootout: Raymond Chen vs. Rico Mariani http://blogs.msdn.com/ricom/archive/2005/05/10/416151.aspx
.NET on Xbox 360 Significant delta between managed and native • .NET Compact Framework • Simplistic mark-and-sweep garbage collection • Xbox is not a general purpose computer • Unforgiving in-order CPU architecture • Requires custom VMX instructions for optimal math perf • Security architecture poses challenges for jitted code 360
.NET on Windows Phone 7 In between Windows and Xbox 360 • .NET Compact Framework • Keep an eye on garbage collection! • ARMv7 CPU • More forgiving toward jitted code • ARM jitter is more mature than PPC
Ways To Call Code Instance method Virtual method Interface Delegate / event Reflection
Choose Your Own Address C++ allows independent choice of • Data type • The memory in which a type lives (placement new) • How a type instance is referenced (T, T*, T&, const T&) .NET types dictate their allocation and usage semantics • Value types • int, bool, struct, Vector3 • Reference types • class, array, string, delegate, boxed value types
A Popular Myth Oft-repeated wisdom That is subtly incorrect • Value types live on the stack • Value types live wherever they are declared • Reference types have two piecesMemory allocated from the heapA pointer to this heap memory • Reference types live on the heap
class vs. struct By default, prefer class over structure Use struct for things that are • Small (<= 16 bytes) • Short lived Pass large structures by reference • Matrix a, b, c; • c = Matrix.Multiply(a, b); // copies 192 bytes! • Matrix.Multiply(ref a, ref b, out c);
Memory Management • Garbage collection is not optional • Can’t have type safety without automatic memory management
Mark and Sweep Triggered per megabyte of allocation 1 Starts with root references (stack variables, statics) 2 Recursively follows all references to see what other objects can be reached 3 Anything we didn’t reach must be garbage 4 Compacts the heap, sliding live objects down to fill holes 5
Two Ways To Keep GC Happy Frameworks designed for performance Frameworks designed for performance Make it run Less Often Make it Finish Quickly • If you never allocate, GC will never run • Collection time is proportional to how many object references must be traversed • Use object pools • Simple heap = fast collection • Use value types and integer handles
GC.Collect Explicitly forces a garbage collection Don’t call every frame! Use wisely to give yourself more headroom After loading During pauses in gameplay
Avoiding Allocation Beware of boxing string vs. StringBuilder Use WeakReference to track GC frequency http://blogs.msdn.com/shawnhar/archive/2007/10/12/monitoring-the-garbage-collector.aspx • Use CLR Profiler on Windows • See MIX’10 talk: “Development and Debugging Tools for Windows Phone 7 Series” Use .NET Reflector to peek behind the curtain http://www.red-gate.com/products/reflector/
foreach is Syntactic Sugar foreach (var x in collection) DoStuff(x); becomes: var enumerator = collection.GetEnumerator(); while (enumerator.MoveNext()) DoStuff(enumerator.Current); Is the enumerator a value type? Array, List<T>, and most XNA types are fine Some collection types create garbage
Iterator Methods IEnumerable<Action> Think() { while (true) { Heading = ChooseRandomDirection(); while (ElapsedTime < 23) yield return Action.WalkForward; yield return Action.LookAround; if (Vector3.Distance(Position, Enemy.Position) < 42) { yield return Action.LoadWeapon; yield return Action.FireWeapon; } } }
Iterators Are Compiler Magic • case 3: • this.<>1__state = -1; • this.<>2__current = Action.FireWeapon; • this.<>1__state = 4; • return true; • case 4: • this.<>1__state = -1; • break; • default: • return false; • } • this.<>4__this.Heading = ChooseRandomDirection(); • while (this.<>4__this.ElapsedTime < 23f) • { • this.<>2__current = Action.WalkForward; • this.<>1__state = 1; • return true; • Label_0073: • this.<>1__state = -1; • } • this.<>2__current = Action.LookAround; • this.<>1__state = 2; • return true; • } [CompilerGenerated] private sealed class <Think>d__0 : IEnumerable<Action> { private int <>1__state; private Action <>2__current; private boolMoveNext() { switch (this.<>1__state) { case 0: this.<>1__state = -1; break; case 1: goto Label_0073; case 2: this.<>1__state = -1; if (Vector3.Distance(this.<>4__this.Position, ... break; this.<>2__current = Action.LoadWeapon; this.<>1__state = 3; return true;
Five Configurable Effects BasicEffect DualTextureEffect AlphaTestEffect SkinnedEffect EnvironmentMapEffect Plus hardware accelerated 2D sprite drawing
BasicEffect BasicEffect • 0-3 directional lights • Blinn-Phong shading • Optional texture • Optional fog • Optional vertex color
DualTextureEffect DualTextureEffect • For lightmaps, detail textures, decals • Blends two textures • Separate texture coordinates • Modulate 2X combine mode (A*B*2) • Good visuals at low pixel cost
AlphaTestEffect AlphaTestEffect • For billboards and imposters • Adds alpha test operations (pixel kill) • Standard blending is free with all effects • Only need alpha test if you want to disable depth/stencil writes
SkinnedEffect SkinnedEffect • For animated models and instancing • Game code animates bones on CPU • Vertex skinning performed by GPU • Up to 72 bones • One, two, or four weights per vertex
EnvironmentMapEffect EnvironmentMapEffect • Oooh, shiny! • Diffuse texture + cube environment map • Cheap way to fake many complex lights • Fresnel term simulates behavior when light reaches a surface and some reflects, some penetrates
A Balancing Act Framerate Number of Pixels Pixel Cost
Balancing Framerate Framerate • 30 hz refresh rate • No point updating faster than the display! Game.TargetElapsedTime = TimeSpan.FromSeconds(1f / 30);
A Balancing Act Pixel Cost • Prefer cheaper effects • Minimize overdraw • Many known algorithms: • Distance, frustum, BSP, sort front to back • Implement “overdraw x-ray mode” • Draw untextured with additive blending • Brighter areas indicate overdraw
A Balancing Act Number of Pixels • 800x480 is 25% more pixels than Xbox 1 • Great for text • Too many pixels for intensive games • 800x480 = 384,000 pixels • 600x360 = 216,000 pixels (56%) • Dedicated hardware scaler • Does not consume any GPU • Higher quality than bilinear upsampling
Summary Great performance comes from great knowledge Understand • Value types vs. reference types • Garbage collection • C# compiler magic (foreach, iterator methods, closures) • Cost of the different graphical effect options Actions • Use CLR Profiler and .NET Reflector • Render smaller than display resolution, rely on scaler
Related Windows Phone Content Monday WPH202 Deploying Windows Phone 7 with Exchange Server and SharePoint Server WPH301 WP7: Deploy Microsoft Forefront Unified Access Gateway for Access Control to SharePoint, Exchange and more. Tuesday WPH302 Overview of the Windows Phone 7 Application Platform WPH313 Windows Phone 7 Architecture Deep Dive WPH304 An In-Depth view at Building Applications for WP7 with Silverlight (Part 1) WPH305 An In-Depth view at Building Applications for WP7 with Silverlight (Part 2) WPH306 Developing Occasionally Connected Applications for Windows Phone 7
Related Windows Phone Content Wednesday WPH310 Designing and Developing for the Rich Mobile Web WPH311 Developing Mobile Code Today that will run on WP 7 Tomorrow WPH309 Silverlight performance on Windows Phone WPH307 Building Windows Phone Games with XNA WPH308 Building a High Performance 3D Game for Windows Phone Thursday WPH303 Understanding the Windows Phone 7 Development Tools WPH314 Learn Windows Phone 7 Development by Creating a Robotic T-Shirt Cannon WPH312 Understanding Marketplace and Making Money with WP7 Applications
Windows Phone Resources Questions? Demos? The Latest phones? Visit the Windows Phone Technical Learning Center for demos and more… • Business IT Resources www.windowsphone.com/business • Developer Resources developer.windowsphone.com • Experience Windows Phone 7 on-line and get a backstage pass www.windowsphone7.com
Win a Windows Phone Contest Hat Contest* How do you enter? Enter by visiting the Windows Phone booth, accepting a free Windows Phone branded hat, and wearing that hat during the Event. How am I selected? Each day of the event, a Windows Phone representative will randomly select up to 5 people who are observed wearing their Windows Phone branded hat Session Contest* During each Windows Phone session the moderator will post a question. The first person to correctly answer the question and called on by the moderator will potentially win Questions? Go to the WPH Information Counter at the TLC * Restrictions apply please see contest rules for eligibility and restrictions. Contest rules are displayed in the Technical Learning Center at the WPH info counter.
Related Windows Phone Content – Breakout Sessions Mon &Tue Monday WPH301WP7: Deploy Microsoft Forefront Unified Access Gateway for Access Control to SharePoint, Exchange and more. WPH202 Deploying Windows Phone 7 with Exchange Server and SharePoint Server Tuesday WPH203 Overview of the Windows Phone 7 Application Platform WPH313 Windows Phone 7 Architecture Deep Dive WPH304 An In-Depth view at Building Applications for WP7 with Silverlight (Part 1) WPH305 An In-Depth view at Building Applications for WP7 with Silverlight (Part 2) WPH306 Developing Occasionally Connected Applications for Windows Phone 7
Related Windows Phone Content – Breakout Sessions Wed &Thu Wednesday WPH310 Designing and Developing for the Rich Mobile Web WPH311 Developing Mobile Code Today that will run on WP 7 Tomorrow WPH309 Silverlight performance on Windows Phone WPH307 Building Windows Phone Games with XNA WPH308 Building a High Performance 3D Game for Windows Phone Thursday WPH303 Understanding the Windows Phone 7 Development Tools WPH314 Learn Windows Phone 7 Development by Creating a Robotic T-Shirt Cannon WPH312 Understanding Marketplace and Making Money with WP7 Applications
Related Windows Phone Content – Interactive Session & HOL Windows Phone Interactive Sessions Windows Phone 7 Demo Only! Microsoft’s Next Generation Mobile Enterprise Application Platform (MEAP) Windows Phone 7 Application Performance Prepare for Windows Phone 7 Development! Coding practices you should start using now in Windows Mobile Windows Phone Hands On Labs Hello Windows Phone - Building Your first Windows Phone Application Microsoft Silverlight for Windows Phone Microsoft XNA Framework 4.0 for Windows Phones Using Push Notifications and Windows Communication Foundation (WCF) Services
Required Slide Resources Learning • Sessions On-Demand & Community • Microsoft Certification & Training Resources www.microsoft.com/teched www.microsoft.com/learning • Resources for IT Professionals • Resources for Developers • http://microsoft.com/technet • http://microsoft.com/msdn
Required Slide Complete an evaluation on CommNet and enter to win!
Sign up for Tech·Ed 2011 and save $500 starting June 8 – June 31st http://northamerica.msteched.com/registration You can also register at the North America 2011 kiosk located at registrationJoin us in Atlanta next year
© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.