Advanced Topics in GPU Tessellation: Algorithms and Lessons Learned Natalya Tatarchuk GGpraphics SW Architect Game Computing Applications, O-CTO AMD GPG Outline Benefits of tessellation Tessellation pipelines: Xbox 360 through ® 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Outline Benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D® 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions The Benefits of Tessellation Tessellation reduces memory footprint and bandwidth Only store low resolution mesh Always relevant, especially for consoles

Polygons Total Memory Low resolution 5160 VB/IB: 100K Froblin model 2K x 2K 16 bit displacement map: 10MB ZBrush High res >15M polygons ~270MB VB and 180MB IB storage Froblin model The Benefits of Tessellation Scalability Stable and predictable performance Performance Analysis: Terrain

Low Resolution with High Resolution, Tessellation No Tessellation

On-disk model 840 1,280,038 triangles count (pre-tessellation)

Original model 1210 fps (0.83 ms) rendering cost

Actual rendered 1,008,038 triangles 1,280,038 triangles model polygon count

VRAM Vertex buffer 70 KB 31 MB size

VRAM Index buffer 23 KB 14 MB size

Rendering time 821.41 fps (1.22 ms) 301 fps (3.32 ms)

Both use the same displacement Rendering with tessellation is > 6X map (2K x 2K) faster and provides memory savings and identical pixel over 44MB! Subtracting the cost of shading Tessellation Performance Analysis

Far Close- away up view view

Rendering Num faces: Mode ATI ATI ATI ATI N = 411 x N RadeonTM RadeonTM RadeonTM RadeonTM T L HD 4870 HD 2900 XT HD 4870 HD 2900 XT

Original low res 4,050 852 fps 359 fps850 fps275 mesh (NL) triangles

Continuously tessellated 1.6 M triangles 232 fps 143 fps213 fps101 mesh (NT)

Adaptively Dynamic, tessellated 1.6M > NA > 845 fps 356 fps574 fps207 mesh NA 4K triangles HigQgher Quality Animation and Simulations More complex computations Pass 1: Control at lower resolution cage animation Provide more animation data

per fewer vertices Animated object vertex buffer Higher fidelity physics (collisions, etc) Pass 2: Tessellate Separating control cage animated mesh animation pre tessellation gives higher overall performance 30% boost in the Froblins example The Benefits of Tessellation Provide data to GPU at coarse resolution Render at high resolution Displacement surfaces are first-class citizens

tessellate displace

Model concept courtesy of Valve Character LOD Management Character LOD Management

Combine tessellation, stream out and instancing features for level of detail management Direct3D® 10 / Direct3D® 10.1 / Direct3D® 11 Use tessellation to get maximum amount of details with stable performance Example: Render an army of instanced characters Get reallyyy close to any of them and see the details Regularly drawn Froblin No tessellation used High Detail Froblin with Tessellation and Displacement Mapping Froblin Close-up:

No tessellation Froblin With Tessellation and Displ acement Mapp ing Close-up Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3® D11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Direct3D 11 Direct3D 11 is a strict superset of Direct3D 10 & 10.1 Direct3D 11 adds support for features like multithreading, tessellation, and compute to Direct3D 10.1 The fastest way to move to Direct3D 11 is to start developing on Direct3D 10/10.1 today Direct3D 11 will be available on Vista and future Windows OS’s Direct3D 11 will run on downlevel hardware Multithreading! Direct3D 10.1, 10 and 9 hardware/drivers FllFull functi onalit y (for exampl e, tesse llti)llation) will require Direct3D 11 hardware Direct3D11 Pipeline

InputAssembler Direct3D 10.1 pipeline VertexSha der Plus Hull 3 new s ta ges for Tessellator Tessellation DomainShader Plus GeometryShader StreamOutput Compute Shader Rasterizer

PixelShader Compute Data Structure Shader OutputMerger Tessellation Process

Evaluate surface Tessellator positions

Add displacement SuperSuper--primprim Mesh Tessellated Mesh Tessellated and Displaced Mesh

Displacement Map Domain Parametrization Direct3D 11 Tessellation

InputAssembler

VtVertexShad er Control cage transformation and animation: Hull Shader -Morphing / Skinning / Transforms -The mesh can have any format: Tessellator patches or polygons DomainShader

GeometryShader

Rasterizer

PixelShader

OutputMerger Direct3D 11 Tessellation

InputAssembler Once per control primitive VertexSha der

Hull Shader Per-patch data and operations • Such as tessellation factors Tessellator • Access data for the entire primitive in original mesh DomainShader • BiBasis convers ion • Example: Approximating Catmull-Clark GeometryShader surfaces by transforming control cage into BBiezier patthches Rasterizer • Project patches into screenspace

PixelShader • No redundant per-patch data fetches OutputMerger Direct3D 11 Tessellation

InputAssembler

VertexSha der

Hull Shader Fixed function tessellation unit: -Generates uvs and connectivity Tessellator information for domain primitive type (lines, triangles and quads) DomainShader -Up to 64x pr im itive / dtdata amplification GeometryShader StreamOutput Rasterizer

PixelShader

OutputMerger Direct3D 11 Tessellation

InputAssembler

VertexSha der

Hull Shader

Tessellator Evaluate each surface point Get patch ID and uv coordinates DomainShader Patch data is stored in local storage Outputs surface position GeometryShader StreamOutput Rasterizer

PixelShader

OutputMerger Tessellation Pre Direct3D 11

GPU tessellation already available Supported on Xbox 360 Supported on ATI RadeonTM HD 2000 Series and beyond Even on the integrated chipsets! Subset of Direct3D 11 tessellation features Available publicly on AMD Developer website in August 2008 Preview and Prepare for Direct3D 11 Support across most APIs gives you best bang for the buck for this feature Support on Windows XP as well as Vista PC versions can use Xbox 360 native features Reach more players Developing artwork takes time Integrating tessellation early gives you and your artists time to design and polish Xbox 360 / DirectX 9 Pipeline

InputAssembler

VertexShader sources e R /

Rasterizer mory e e

M PixelShader

OutputMerger Xbox 360 / DirectX 9 Tessellation Pipe line

InputAssembler Tessellation unit: -Generates uvsand topology Tessellator connectivity for input primitives -Prior to vertex shader -Parallel evaluation of new vertices

sources VertexShader e - Fast (uvu,v) generation R / - All data stays in vertex cache

ory Rasterizer - Up to 15x amplification on Xbox m m 360 and pre Direct3D 11 HW Me PixelShader

OutputMerger Xbox 360 / DirectX 9 Tessellation Pipe line

InputAssembler Vertex Shader acts as an evaluation Tessellator shader Can use data recirculation for emulating Hull and Domain shader

sources VertexShader

e functionality: R /

• Use R2VB or renderable vertex

ory Rasterizer texture in Direct3D 9 m m • Stream out in Direct3D 10 / 10. 1 Me PixelShader

OutputMerger Supported Primitive Typ es Triangles and Tri-Tri-patchespatches

Quads and Quad Patches

Lines and Line Patches Continuous Tessellation Mode Floating point tessellation level perper--drawdraw call Eliminates ppppgopping as vertices are added through tessellation

Ll10Level 1.0 Ll20Level 2.0

LevelLevel == 1.71.01.32.01.1 Adaptive Tessellation Mode Tessellation level is specified per edge

Edge tessellation factor = 7.x

Edge tessellation factor = 5.x Edge tessellation factor = 5.x Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Interpgpolating Subdivision Planar subdivision == amplification Generate more triangles from original mesh Main purposes Reduce memory footprint Improve visual quality with displacement mapping Addinggg More Triangles Benefits of Interpolative Tessellation Use the same art assets as for regular rendering Same meshes can be used for rendering with and without tessellation Subdivision surfaces require separate assets Additional asset: displacement map Use for better surface effects on all HW (even without tessellation support) Use inverse displacement mapping shadersshaders,, such as parallax occlusion mapping Easy method for LOD management Tessellated Characters Rendering Tessellate and displace Get up close to a character and see a lot of dildetails LevelLevel--ofof--detaildetail management 1K polygons

430,000 Start byyg rendering polygons lowlow--resolutionresolution mesh That’s the control cage Tessellate and displace for finer details Example D3D9 Evaluation Shader Example D3D9 Evaluation Shader August 21, 2008 Liggghting with Disp lacement Can continue lighting using TS maps even if displ aci ng Imppgortant to generate dis placement and normal maps using the same tangent space / SW Then normal encoded in TS normal map matches the normal from displacement Combiningpg Normal Maps and Displacement Maps As we displace, we change the actual displayed normal Liggpght Using Displacement Ma ps When using displacement maps which do not match normal maps (ex: detail maps), rotate tangent frame by displacement normal Comppyute normal directly from displacement mapping This can also let us light directly from displacement map Convenient for water, terrain, etc. Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Cinematic Character Pipeline Use subdivision surfaces •Much more control over model building for animation and texturing Rough pipeline: •Create skeletal framework for creature rigging and animation

•Attach muscles Gollum, “The Lord of the Rings”, © New Line •Build up into a complete form •Layer with skin •Animate •Shade

46 Introduction to Subdivision Surfaces “A method of representing a smooth surface via the specification of a coarser piecewise linear pol ygon mesh” Combine Smoothing with Displacement Bring finer scale details

Mo del concept cour tesy o f Valve Approximatin g CatmullCatmull--ClarkClark Subdivision Surfaces on GPU CtConvert CC sur face to lower or der representation Typically Bezier Directly evaluate some number Bezier patches on GPU approximating the original surface Support the same subdivision surfaces as in Maya Very important for art pipelines Bicubic Bezier Patch Support

Used with quad tessellation mode Bezier Control Points Requires 4x4 = 16 control points Does not fit in vertex input structure in D3D9 / D3D10, fine on D3D10.1 Fetch data from texture instead Use indices retrieval mode Tessellation unit (Xbox360 / D3D9) uses Cartesian coordinates between 0 and 0.5 (0..1 in D3D11) Patch evaluation requires parametric coordinates in [0.. 1] Need to reconstruct those coordinates in VS code Do not use input Cartesian coordinates for patch evaluation! This will cause visual errors Simple to do in a few lines of HLSL code Tessellated World: Vertex Data Xbox 360 – fetch vertex data as necessary manually Be mindful not to become fetch bound! Direct3D 9 and Direct3D 10: only 16 float4 vertex inputs One of these will be used for barycentric / parametric coordinates This can be limiting for higher order surface algorithms We need to access per--vertexvertex data for each superprimitive vertex – 5 float4 per-vertex components max Quad – 3 float4 per-vertex components Another reason to use Direct3D 10.1 ––accessaccess 32 float 4 vertex inputs Alleviated in Direct3D 11 Fetching Vertex Data Fetch from vertex data textures EnEncodecode VBVB as a vertexvertex texturetexture Use superprimitive indices by evaluation VS This approach can save memory Store vertex ID in VB channel (D3D9) or use system- value (D3D10+) Just use the superpr iiiimitive idiindices to figure out new position Can be used for implicit surfaces such as quads Use for water, terrain, walls, etc. Bicubic Bezier Patch Support

Once parametric coordinates u,v are calculated patch evaluation can begin 3 3 P(u,v) B (u)B (v)P i0 j0 i j ij

Bernstein polynomials: 3 2 2 3 B0 (u) (1 u) B1(u) 3u(1 u) B2 (u) 3u (1 u) B3 (u) u 3 2 2 3 B0 (v) (1 v) B1(v) 3v(1 v) B2 (v) 3v (1 v) B3 (v) v Final evaluation 3 3 2 2 3 P(u,v) (1 u) (1 v) P00 3v(1 v) P01 3v (1 v)P02 v P03 2 3 2 2 3 3u(1 u) (1 v) P10 3v(1 v) P11 3v (1 v)P12 v P13 2 3 2 2 3 3u (1 u) (1 v) P20 3v(1 v) P21 3v (1 v)P22 v P23 3 3 2 2 3 u (1 v) P30 3v(1 v) P31 3v (1 v)P32 v P33 Approximatin g CatmullCatmull--ClarkClark Subd Surfaces on GPU

T. L . N i e t a l , “ Smooth surfaces from 4-sided facets”, SMI 2008

C. Loop, S. Schaeffer “Approximating Catmull-Clark subdivision surfaces with bicubic patches”, MSR Tech Report 2007 CatmullCatmull--ClarkClark subdivision

Masks

Example MMkask for a corner ver tex

V(8), F(6) V(26), F(24) V(98), F(96) V(386), F(384) V(1,538), F(1,536) Loop--ShaeffeShaeffer Method

“Approximating CatmullCatmull--ClarkClark Subdivision Surfaces with Bicubic Patches” Microsoft Research Technical Report, MSRMSR--TRTR--20072007--44.44. 2007

1 4 4 1 1 n2 4 4

1 4 1

Vertex Mask

n 2 Geometry Patches Tangent Patches 1 2

Face Mask

1 4 2n 2

2 1 3x3 2x3 3x2

Edge Mask Ni et al Method

•T. L. Ni et al, “Smooth surfaces from 4-sided facets”, SMI 2008

• “Convert ing a CC mesh to a C1 surface of low d”degree”

•Degree 4 Bezier Triangular Patches for Irregular patch

•C1 across boundaries and around extra ordinary points Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Control Cage PrePre--PassPass

Transform and animate low res mesh Use any animation technique We impl ement ed bo th s kinn ing an d morp hing in our examples Example: apply sparse morph targets technique Different poses of the same mesh Morph data is stored in morph textures PrePass and Vertex Compression To prepare for Direct3D 11, on Direct3D 10 or Direct3D 10. 1 stream out animated vertex buffer Render tessellated pass using this transformed bbffuffer Use vertex compression / decompression in shdhader to re duce fthfetch bdbandw idth Pack transformed vertex positions into one 128 bit value for prepass shader In tessellation pass, unpack this position data and evaluate each surface point Lets us load each vertex with one fetch – huge bandwidth savinggp for the tessellated pass Animation PrePre--PassPass Performance Control Cage Prepass + position data compression gives as much as 30% frame rate speedup Versus performing animation in tessellation pass More details: See upcoming SIGGRAPH 2008 “Advances in Real-Time Rendering in 3D Graphics and Games” course notes chapter “March of the Froblins: Simulation and Rendering Massive Crowds of Intelligent and Detailed Creatures on GPU” Example: The Froblins Demo Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Other Uses for Tessellation Terrain Water Hair Environment objects Grass Adaptive Tessellation Uses Control min / max tessellation levels per object Clamps per-edge tessellation factors to this range Similar to XDK, render with non-non-indexedindexed primitives (D3D9) Necessary in order to compute and store per- edge factors Using NonNon--IndexedIndexed Primitives Upon analysis, performance is not affected strongly 1. All expensive vertex operations should be done in pre- pass (transforms / animation, etc) 2. We also render the low-resolution control cage * less vertices to replicate 3. Far away viewpoints (mid-level) have ~identical frame rates as low resolution model rendering (see terrain) However, be mindful for extreme zoomzoom--outsouts (if transform bound) Makes sense to turn off tessellation for those viewpoints Tessellation Pipeline Pre Direct3D 11

InputAssembler Vertex Shader acts as an evaluation Tessellator shader Can use data recirculation for emulating Hull and Domain shader VertexShader

esources functionality: R /

• Use R2VB or renderable vertex Rasterizer texture in Direct3D9 mory e e • Use stream out in Direct3D10 and

M 10.1 PixelShader

OutputMerger D3D9 Adaptive Tessellation Flow Example

Transformed Superprim Pixel Vertex Superprim Mesh Shader Shader Mesh

Sampler R2VB

Superprim Vertex Pixel Tessellation Mesh Shader Shader Factors

Stream 1 Tessellator Vertex Pixel Superprim Shader Shader Mesh Stream 0 Rendering Tessellated Terrain

Rendering terrain has a lot of challenges Very large models, continuous spans across space Rendered simultaneously very close an d far away Necessitates viewview--dependentdependent LOD DICE: Battlefield 2 Tessellation pipeline gives that control and flexibility Compute tessellation factors in a pre-pass Supply them to the tessellation pass for adaptive tessellation

69 Rendering Tessellated Terrain Tessellation pipeline handles this well Tessellate flat mesh and displace on the fly Use GPU-based noise or ppprecomputed hei ght map for displacement and shading Adaptively subdivide to get detail where needed Can per form colliillision ddttietection ditldirectly on the height map Adaptive Tessellation Rendering Example: D3D9

Pass 1: Animate / Transform control -Render control meshes vertices as points cage vertices - VS tftransforms th thtidtte vertices and outputs them to a 2D buffer -An R2VB or VTX render target (D3D9) Updated vertex buffer - Or a dynamic stream out buffer (D3D10+) -In D3D9 need to provide vertex ID in VB explicitly stored - In D3D10+ vertexID is provided (bonus) Vertex Prepass Code Sample (D3D9) Adapgptive Tessellation Rendering

Pass 1: Animate / Transform control -Render control mesh vertices cage vertices as points -Bind a buffer with transformed vertices as a sampler Pass 2: Compute Updated -VS uses vertex ID as vertex tessellation factors vertices index to compute tessellation sampler factors for its edge -Output tessellation per-edge fttfactor to an R2VB (D3D9) or Tessellation stream out (D3D10+) buffer factors buffer Avoiding Cracks with Per--EdEdge Tessellation Factors Adjacent edges must have precisionprecision-- identical tessellation levels Otherwise cracks will appear when displacing NdNeed extra care diduring tlltitessellation ftfactors computation Ensure identical edge direction (using vertex ID) when evaluating the surface Avoiding Cracks with PerPer--EdgeEdge Tessellation Factors Examppgple of cracks when computing tessellation factors for edges without aligning edge direction: Adjacent edges must have precisionprecision-- identi ca l tesse lla tion leve ls Otherwise cracks will appear when displacing Need extra care during tessellation factors computation Ensure identical edge direction (using vertex ID) Comppguting Tessellation Factors

Compute current edge’s endend--points’points’ indices Comppguting Tessellation Factors

••FetchFetch the edge’s endpoints from transformed vertices texture, ••ComputeCompute tessellation factor with your algorithm •Output to PS / render target Adaptive Tessellation Rendering: D3D9 Example

Pass 1: Animate / Transform control cage vertices

Pass 2: Compute tessellation factors -Vertex buffers bound: -Input or transformed control cage as one stream Pass 3: Tessellate -Tessellation factors as another and render stream -Hardware / driver automatically use tessellation factors to generate domain locations and propagate them to VS Rendering Terrain with Displacement MapMap--BasedBased Lighting and Procedural Snow placement based on slope Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Tanggpent Space and Displacement Tangent space must be the same throughout your entire pipeline This includes your art pipeline, exporter, game engine and rendering Crucial for lighting without artifacts Allows using TS normal maps when displacing Tanggpent Space and Displacement Find out what your art tools are doing for TS – when generating displacement maps Maya, 3DSMax, Mudbox, GPUMeshMapper, etc. Disppplacement Map Pointers Make sure that generation method matches evaluation method Rendering with Catmull-Catmull-ClarkClark surfaces: Generate displacement map using the right DCC tool from a smoothed subd surface Rendering with interpolative tessellation Use AMD GPUMes hMapper ttlool Generates high quality displacement map using polllhhhlygonal low / high res mesh pairs Terrain disppyglacements are easy: heights Displacement and Seam Cracks Watertight surfaces need particular care when displacing Regardless of the surface type Easy to generate viiblisible hlholes along uvuv-- seams once displaced Especially for characters Displacement and Seam Cracks: Example Displacement and Seam Cracks: Causes UV borders are rarely oneone--toto--oneone in parameterization Frequently laid not laid out with the same length and orientation Displacement and Seam Cracks: Causes Displacement and Seam Cracks: Causes Different floating point values across edges during generation When using brute force map generation algorithms Watertigpght Displacements During generation of displacement maps, post-post- process to correct the uv borders Identify the border triangle edges For each border edge, compute the texel location for the vertices Fetch, average and update the texels for matching vertices This provides crack-free displacement using nearest neighbor filtering Similar methods can be used to generate higher order filtering and alleviate displacement seams GPUMeshMapper Generates normal, displacement and ambocc maps Robust and high quality generation Map compositing interface for working with multiple pieces of model Directly preview tessellation on your low resolution model with the generated maps! Seamless displacement mapping – improved UV seams Multicore and GPU support for faster map generation Outline The benefits of tessellation Tessellation pipelines: Xbox 360 through Direct3D 11 Rendering with tessellation Interpolative subdivision for object and character rendering Higher order surfaces on GPU Animated tessellated characters Terrain rendering with adaptive tessellation Tools and art pointers Conclusions Cinematic Rendering Relies on Tessellation for Quality and Control Currently film and games differ in geometry management • Cinema tic ren der ing re lies on ex treme de ta ils • Previously, games couldn’t afford this luxury

We are changing this now! Both must manage details for stable performance

Geri’s Game, © Pixar Use Tessellation To Improve Performance and Visuals Bring tessellation techniques from film to realreal--timetime Fast displacement mapping and high qyquality animation Use Tessellation To Improve Performance and Visuals Results in significant visual improvements Better lighting Better silhouettes Better details Better animation Better performance Acknowledgments Bay Raitt,Raitt, Valve Software Josh Barczak and AMD Game Computing Applications Group Nicolas Thibieroz, AMD ISV Engineering Budi Purnomo, Peter Lohrmann and AMD Graphics Tools Group Questions? Additional Materials http://game.amd.com LLkook for samp les, more ifinforma tion and the Froblins demo in the upcoming weeks: http://ati.amd.com/developer http://ati.amd.com/developer/techreports.h tml for more details about the Froblins demo GPUMeshMapper available from: http://developer.amd.com/gpu/MeshMapper/Pages/ default.aspx DISCLAIMER The in formati on presen te d in this documen t is for in forma tiona l purposes only and may contain technical inaccuracies, omissions and typographical errors. AMD MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE CONTENTS HEREOF AND ASSUMES NO RESPONSIBILITY FOR ANY INACCURACIES, ERRORS OR OMISSIONS THAT MAY APPEAR IN THIS INFORMATION. AMD SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL AMD BE LIABLE TO ANY PERSON FOR ANY DIRECT,,, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES ARISING FROM THE USE OF ANY INFORMATION CONTAINED HEREIN, EVEN IF AMD IS EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ATTRIBUTION © 2008 Advanced Micro Devices, Inc. All rights reserved. AMD, the AMD Arrow logo, ATI, the ATI logo, Radeon and combinations thereof are trademarks of Advanced Micro Devices, Inc. Other names are for ifinforma tiona l purposes on ly an d may be tdtrademar ks of thitheir respec tive owners. www. xnagamefest. com

© 2008 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.