Edit this text to create a Heading This subtitle is 20 points Bullets are blue They have 110% line spacing, 2 points before & after Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this text to create a Heading This subtitle is 20 points Creating Vast Game Worlds Bullets are blue Experiences from Avalanche Studios They have 110% line spacing, 2 points before & after Longer bullets in the Emil formPersson of a paragraph are harder to read if there is Senior insufficient line spacing. This is the Graphics Programmer maximum recommended number of lines per slide @_Humus_ (seven). Sub bullets look like this Edit this Just howtext big to is create Just Cause a Heading 2? Unit meters This is subtitle is 20 points [-16384 Bullets are.. 16384] blue 32km x 32km They have 110% line spacing, 2 points before & after 1024 km Longer bullets in the form of a paragraph are harder to 2 400ifmi read there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). 2 Sub bullets look like this Edit this text to create a Heading Issues This “jitter The subtitle bug” is 20 points Vertexare snapping Bullets blue Data Disc space Memory Jerky animations They have 110% line spacing, 2 points before & after Z-fighting Performance Longer bullets in the form of a paragraph are harder to View distance Shadows read if there is insufficient line spacing. This is the Occlusion Range recommended number maximum of lines per slide Glitches (seven). Sub bullets look like this Edit this text Breathing lifeto into create the world a Heading This subtitle is 20 points Bullets are blue They have 110% line spacing, 2 points before & after Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this text Breathing lifeto into create the world a Heading This subtitle is 20 points Landmarks Bullets are Distant lights blue They have World simulation 110% line spacing, 2 points before & after Dynamic Longer bullets weather in the system form of a paragraph are harder to read if there is insufficient line spacing. This is the Day-night cycle maximum recommended Diverse game and climatenumber zones of lines per slide (seven). City, arctic, jungle, desert, ocean, mountains etc. Sub bullets look like this Verticality Edit thislights Distant text to create a Heading This subtitle Static light sources is 20 points Point-sprites Bullets are blue Fades to light source close up They have 110% line spacing, 2 points before & after Huge visual impact Longer bullets in the form of a paragraph are harder to Cheap read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit thislights Distant text to create a Heading This subtitle is 20 points Bullets are blue They have 110% line spacing, 2 points before & after Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this point Floating text tomath create a Heading This subtitle floats abstract is real 20 points numbers Worksare as intended Bullets blue in 99% of the cases Breaks spectacularly for 0.9% They have 110% line spacing, 2 points before & after Breaks subtly for 0.1% “Tricks With thein Floating-Point Format” 2011. [6] are harder to Longer bullets the form of aDawson, paragraph Find bug:is insufficient line spacing. This is the read if the there // Convert float in [0, 1] to 24bit fixed point and add stencil bits maximum recommended number* of lines per<<slide uint32 fixed_zs = (uint32(16777215.0f depth + 0.5f) 8) | stencil; (seven). Logarithmic distribution Reset FP timers on opportunity Sub bullets look/ counters like this Fixed point Edit this point Floating text tomath create a Heading This subtitle Worst precision is 20 in points ±[8k, 16k) range Range Increment That’sare 75%blue of the map … Bullets [8, 16) 1/1M Millimeter resolution [8k, 16k) 1/1k They have 110% line spacing, 2 points before & after [8M, 16M) 1 Floating point arithmetic Longer bullets in the form of a paragraph are harder to [8G, 16G) 1k Error accumulating at every op read if there is insufficient line spacing. This is the More math ⇒ bigger error maximum number of lines per slide add/subrecommended worse than mul/div (seven). Shorten computation chains Faster AND more precise! Sub bullets look like this Minimize magnitude ratio in add/sub Edit this text Transform chains to create a Heading world_pos This subtitle is float4 Don’t: 20 points = mul(In.Position, World); Out.Position = mul(world_pos, ViewProj); Bullets are blue float4 world_pos = mul(In.Position, World); They have 110% Do: line spacing, 2 points before & after Out.Position = mul(In.Position, WorldViewProj); Longer bullets in the form of a paragraph are harder to local_pos mul(In.Position, read if there is float4 insufficient line=spacing. This is LocalWorld); the Alternatively: Out.Position = mul(local_pos, LocalViewProj); maximum recommended number of lines per slide [W] • [V] • [P] = (seven). [R • T ] • [T • Rv] • [P] [Rw • (Tw • Tv) ] • [Rv • P] Sub bullets lookw likew this v = Edit this Never invert text atomatrix! create a Heading This subtitle Never invert is a matrix! 20 points Really! Bullets are blue Don’t: float4x4 view = ViewMatrix(pos, angles); They have 110% line spacing, 2 points before & after float4x4 proj = ProjectionMatrix(fov, ratio, near, far); float4x4 view_proj = view * proj; Longer bullets in the form of a paragraph are harder to float4x4 view_proj_inv = InvertMatrix(view_proj); read Do: if there is insufficient line spacing. This is the maximum recommended float4x4 view, view_inv, proj, number proj_inv; of lines per slide ViewMatrixAndInverse(&view, &view_inv, pos, angles); (seven). ProjectionMatrixAndInverse(&proj, &proj_inv, fov, ratio, near, far); view_proj view * proj; float4x4 Sub bullets look=like this float4x4 view_proj_inv = proj_inv * view_inv; Edit this How to compute text to create an inverse a Heading directly This subtitle Reverse transforms is 20 points in reverse order Rotate(angle)×Translate(pos) ⇒ Translate(-pos)×Rotate(-angle) Bullets are blue Derive analytically from regular2matrix They have 110% line spacing, points before & after Gauss-Jordan elimination [1] Longer bullets in the form of a paragraph are harder to 1 1 0 0 0 x 0 0 0 1 0 0 0 read if there is insufficient line spacing. Thisx is0the0 0 1 0 1of lines 0 0 per 0 slide 0 0 0 y 0 recommended 0 0 1 0 0 number y maximum 0 0 1 0 0 0 0 z1 0 0 z0 1 0 0 1 0 (seven). ⇒ 0 bullets z1 0look 0 like 0 this 0 1 0 Sub 1 0 0 0 1 0 0 1 z0 z1 Edit this Depth buffer text precision to create a Heading This Cause Just subtitle2ishas 20 50,000m points view distance That’sare all the way across the diagonal of the map! Bullets blue Reversed depth buffer (near = 1, far = 0) They have 110% line spacing, 2 points before & after Helps even for fixed point depth buffers! Longer in the of a Flipbullets with projection matrix,form not viewport! paragraph are harder to D24FS8 on consoles, D24S8line on PC read if there is insufficient spacing. This is the Dynamic near plane maximum recommended number of lines per slide Normally 0.5, close up 0.1 (seven). Sub bullets look like this Edit this PS3 depth text resolve to create a Heading This has HW subtitle no native is 20 points depth texture format D16 can aliased as an L16 Bullets arebeblue D24S8 and D24FS8 aliased as RGBA8 They have 110% line spacing, 2 points before & after Shader needs to decode Longer bullets in the Lossy texture sampling form of a paragraph are harder to of compiler flags, output precision, half-precisionThis etc. read ifBeware there is insufficient line spacing. is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this PS3 depth text resolve to create a Heading #pragma optionNV(fastprecision off) This subtitle is 20 points sampler2D DepthBuffer : register(s0); Bullets are blue void main(float2 TexCoord : TEXCOORD0, out float4 Depth : COLOR) { They have 110% line spacing, 2 points before & after half4 dc = h4tex2D(DepthBuffer, TexCoord); Longer bullets in the form of a paragraph are harder to // Round to compensate for poor sampler precision. read if there is insufficient line spacing. This is the // Also bias the exponent before rounding. dc = floor(dc * 255.0h + half4(0.5h, 0.5h, 0.5h, 0.5h - 127.0h)); maximum recommended number of lines per slide float m = dc.r * (1.0f / 256.0f) + dc.g * (1.0f / 65536.0f); (seven). float e = exp2( float(dc.a) ); Sub bullets look like this Depth = m * e + e; } Edit this text to create a Heading Shadows This 3 cascade subtitle atlas is 20 points Cascades scaled with Bullets are blue Xbox360 Memory ↔ GPU time tradeoff elevation → 16bit conversion They have 110% line spacing, 2 32bit points before & after Visually tweaked ranges Memory export shader Longer bullets in the form of a paragraph are harder to Shadow stabilization Tiled-to-tiled read if there is insufficient line spacing. This is the Sub-pixel jitter compensation maximum recommended number of lines per slide Discrete resizing (seven). Size culling Sub bullets look like this Edit this optimization Memory text to create a Heading This subtitle Temporal texture is 20 aliasing points Shadow-map, Bullets are bluevelocity buffer, post-effects temporaries etc. Ping-ponging with EDRAM They have 110% line spacing, 2 points before & after Channel textures Longer bullets in the form of a paragraph are harder to Luminance in a DXT1 channel read if there is insufficient line spacing. This is the 1.33bpp maximum recommended number of lines per slide Vertex (seven).packing Sub bullets look like this Edit this Vertex compression text to create a Heading This subtitle Example “fat”isvertex 20 points struct Vertex Bullets are blue { 12 bytes 2 points before & after Theyfloat3 havePosition; 110% line//spacing, float2 TexCoord0; // 8 bytes float2 TexCoord1; 8 bytes Longer bullets in the // form of a paragraph are harder float3 Tangent; // 12 bytes readfloat3 if there is insufficient line spacing. This is the Bitangent; // 12 bytes float3 Normal; // 12 bytes maximum recommended number of lines per slide float4 Color; // 16 bytes }; // Total: 80 bytes, 7 attributes (seven). Sub bullets look like this to Edit this Vertex compression text to create a Heading This subtitle Standard solutions is 20 points applied: struct Vertex Bullets are blue { 12 bytes 2 points before & after Theyfloat3 havePosition; 110% line//spacing, float4 TexCoord; // 16 bytes ubyte4 Tangent; 4 bytes, 1 unused Longer bullets in the // form of a paragraph are harder ubyte4 Bitangent; // 4 bytes, 1 unused readubyte4 if there is insufficient line spacing. Normal; // 4 bytes, 1 unused This is the ubyte4 Color; // 4 bytes maximum recommended number of lines per slide }; // Total: 44 bytes, 6 attributes (seven). Sub bullets look like this to Edit this Vertex compression text to create a Heading This subtitle Turn floats into is 20 halfs? points Usually notblue the best solution Bullets are Use shorts with scale & bias They have 110% line spacing, 2 points before & after Unnormalized slightly more accurate (no division by 32767) Longer bullets in the form of a paragraph are harder to struct Vertex { read if there is insufficient line spacing. This is the short4 Position; // 8 bytes, 2 unused short4 TexCoord; // 8 bytes maximum recommended number of lines per slide ubyte4 Tangent; // 4 bytes (seven). ubyte4 Bitangent; // 4 bytes ubyte4 Normal; // 4 bytes Sub bullets look like this ubyte4 Color; // 4 bytes }; // Total: 32 bytes, 6 attributes Edit this text to compression Tangent-space create a Heading This Cause Just subtitle2is–20 RG32F points– 8bytes float3 tangent = frac( In.Tangents.x * float3(1,256,65536)) * 2 – 1; Bullets are blue float3 normal = frac(abs(In.Tangents.y) * float3(1,256,65536)) * 2 – 1; float3 bitangent = cross(tangent, normal); They have 110% line spacing, 2 points before & after bitangent = (In.Tangents.y > 0.0f)? bitangent : -bitangent; Longer bullets in the form of a paragraph are harder to struct read ifVertex there is insufficient line spacing. This is the { short4 Position; // 8 bytes, 2 unused maximum recommended number of lines per slide short4 TexCoord; // 8 bytes (seven). float2 Tangents; // 8 bytes ubyte4 Color; // 4 bytes look like this }; Sub bullets // Total: 28 bytes, 4 attributes Edit this text to in Tangent-space create 4 bytes a Heading Longitude This subtitle / latitude is 20 points R,G ⇒are Tangent Trigonometry heavy Bullets blue Fast in vertex shader B,A ⇒ Bitangent They have 110% line spacing, 2 points before & after float4 angles = In.Tangents * PI2 - PI; Longer bullets in the form of a paragraph are harder to float4 sc0, sc1; sincos(angles.x, sc0.x, sc0.y); read if there is insufficient line spacing. This is the sincos(angles.y, sc0.z, sc0.w); sincos(angles.z, sc1.x, sc1.y); maximum recommended number of lines per slide sincos(angles.w, sc1.z, sc1.w); float3 tangent = float3(sc0.y * abs(sc0.z), sc0.x * abs(sc0.z), sc0.w); (seven). float3 bitangent = float3(sc1.y * abs(sc1.z), sc1.x * abs(sc1.z), sc1.w); normal Sub bullets look like this bitangent); float3 = cross(tangent, normal = (angles.w > 0.0f)? normal : -normal; Edit this text to in Tangent-space create 4 bytes a Heading Quaternion This subtitle is 20 points Orthonormal basis Bullets are blue They have 110% linefloat3 spacing, pointsb,before & after void UnpackQuat(float4 q, out t, out2float3 out float3 n) { t =Longer bullets in the form of a paragraph are harder to float3(1,0,0) + float3(-2,2,2)*q.y*q.yxw + float3(-2,-2,2)*q.z*q.zwx; b =read float3(0,1,0) +isfloat3(2,-2,2)*q.z*q.wzy + float3(2,-2,-2)*q.x*q.yxw; if there insufficient line spacing. This is the n = float3(0,0,1) + float3(2,2,-2)*q.x*q.zwx + float3(-2,2,-2)*q.y*q.wzy; maximum recommended number of lines per slide (seven). float4 quat = In.TangentSpace * 2.0f - 1.0f; } UnpackQuat(rotated_quat, tangent, bitangent, normal); Sub bullets look like this Edit this text to in Tangent-space create 4 bytes a Heading This subtitle Rotate quaternion is 20 points instead of vectors! // Decode tangent-vectors Bullets are blue ... // Rotate decoded tangent-vectors They have 110% line spacing, 2 points before & after Out.Tangent = mul(tangent, (float3x3) World); Out.Bitangent = mul(bitangent, (float3x3) World); are harder to Longer bullets in the form of a paragraph Out.Normal = mul(normal, (float3x3) World); read if there is insufficient line spacing. This is the maximum recommended number of lines per slide // Rotate quaternion, decode final tangent-vectors float4 quat = In.TangentSpace * 2.0f - 1.0f; (seven). float4 rotated_quat = MulQuat(quat, WorldQuat); UnpackQuat(rotated_quat, Sub bullets look like this Out.Tangent, Out.Bitangent, Out.Normal); Edit this text to compression Tangent-space create a Heading This subtitle ”Final” vertexis 20 points struct Vertex Bullets are blue { short4 Position; 8 bytes, 2 2 unused They have 110% line// spacing, points before & after short4 TexCoord; // 8 bytes ubyte4 Tangents; 4 bytes Longer bullets in the//form of a paragraph are harder ubyte4 Color; // 4 bytes read if there is insufficient line4spacing. }; // Total: 24 bytes, attributes This is the recommended number of lines per slide maximum Other possibilities (seven). R5G6B5 color in Position.w Sub bullets look like this Position as R11G11B10 to Edit thistrimming Particle text to create a Heading Plenty of alpha area This subtitle is =200 points Find optimal enclosing polygon Bullets are blue Achieved > 2x performance! They have 110% line spacing, 2 points before & after Advances in Real-Time Rendering Longer bullets in the form of a paragraph are harder to in Games read if there is insufficient line spacing. This is the Graphics Gems for Games: Findings From Avalanche Studios maximum recommended number of lines per slide 515AB, Wednesday 4:20 pm (seven). “Particle Persson, 2009. [4] Sub Trimmer.” bullets look like this Edit this Vertex shader text toculling create a Heading This subtitle is 20 points Bullets are blue They have 110% line spacing, 2 points before & after Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this Vertex shader text toculling create a Heading This subtitlewant Sometimes is 20topoints cull at vertex level Especially useful within a single draw-call Bullets are blue Foliage, particles, clouds, light sprites, etc. They have 110% line spacing, 2 points before & after Example: 100 foliage billboards, many completely faded out… Longer in thefarform of a paragraph are harder to Throwbullets things behind plane! read if there is insufficient line spacing. This is the Out.Position = ...; float alpha = ...; maximum recommended number of lines per slide (seven). if (alpha <= 0.0f) Out.Position.z = -Out.Position.w; // z/w = -1, behind far plane Sub bullets look like this Edit this Draw calls text to create a Heading This subtitle “Batch, batch, is batch”. 20 points Wloka, 2003. [2] 300 draw Bullets are calls blue/ frame What’s reasonable these days?2 points before & after They have 110% line spacing, 2-10x faster / thread Longer bullets in the form of a paragraph are harder to We’re achieving 16,000 @ 60Hz, i7-2600K, single draw thread read if there is insufficient line spacing. This is the Not so much DrawIndexed() per se maximum recommended number of lines per slide ID3D11DeviceContext_DrawIndexed: Culling mov eax, dword ptr [esp+4] (seven). Sorting Sub bullets look like this Updating transforms lea mov mov jmp ecx, [eax+639Ch] eax, dword ptr [eax+1E8h] dword ptr [esp+4], ecx eax Edit this text Reducing draw to calls create a Heading This subtitle is 20 points Bullets are blue They have 110% line spacing, 2 points before & after Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this text Reducing draw to calls create a Heading This subtitle is 20 points Merge-Instancing Multiple Bullets aremeshes blue and multiple transforms in one draw-call Shader-based vertex data traversal They have 110% line spacing, 2 points before & after Longer in the Rendering form of ainparagraph are harder to Advancesbullets in Real-Time Games read if there This is the Graphics Gemsis forinsufficient Games: Findingsline From spacing. Avalanche Studios 515AB, Wednesday 4:20 pm maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this State sorting text to create a Heading This subtitle 64-bit sort-id is 20 points “Orderare yourblue graphics draw calls around!” Ericson, 2008. [3] Bullets Render-passes prearranged They have 110% line spacing, 2 points before & after E.g. ModelsOpaque, ModelsTransparent, PostEffects, GUI etc. Longer bullets in the form of a paragraph are harder to Material types prearranged read ifE.g. there insufficient Terrain,is Character, Particles, line Clouds,spacing. Foliage etc. This is the recommended number of lines per slide maximum Dynamic bit layout (seven). Typically encodes state Sub bullets look like this Edit this text to create a Heading Culling This subtitle BFBC – Brute is Force 20 points Box Culling Artist are placed occluder boxes Bullets blue Culled individually, not union They have 110% line spacing, 2 points before & after Educate content creators Longer SIMD bullets optimizedin the form of a paragraph are harder to PPU & SPU is work in tandem line spacing. This is the read if there insufficient maximum recommended number of lines per slide “Culling the Battlefield.” Collin, 2011. [3] (seven). Sub bullets look like this Edit this text to create a Heading Streaming Pre-optimized data disc This subtitle is 20 on points Gigabyte Bullets aresized bluearchives Related resources placed adjacently Zlib compression They have 110% line spacing, 2 points before & after Longer bullets in the form of a paragraph are harder to Request ordered by priority first, then adjacency read if there is insufficient line spacing. This is the Concurrent load and create maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this Other funtext stuff to create a Heading PS3 This dynamic subtitle resolution is 20 points 720p normally Bullets are blue 640p under heavy load They have 110% line spacing, 2 points before & after Shader performance script Longer bullets Before/after diff in the form of a paragraph are harder to if there is insufficient line spacing. This is the read Tombola compiler maximum number of lines per slide Randomizerecommended compiler seed ~10-15% shorter shaders (seven). Sub bullets look like this Edit this text to create a Heading References [1] [2] http://en.wikipedia.org/wiki/Gauss%E2%80%93Jordan_elimination This subtitle is 20 points http://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf [3] http://realtimecollisiondetection.net/blog/?p=86 Bullets are blue [4] http://www.humus.name/index.php?page=Cool&ID=8 [5] http://publications.dice.se/attachments/CullingTheBattlefield.pdf They have 110% line spacing, 2 points before & after [6] http://www.altdevblogaday.com/2012/01/05/tricks-with-the-floating-point-format/ [7] http://fgiesen.wordpress.com/2010/10/21/finish-your-derivations-please/ Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit This this text to create slide hasaaHeading 16:9 media window This subtitle is 20 points Bullets are blue Thank you! They have 110% line spacing, 2 points before & after Longer bullets in the Emil formPersson of a paragraph are harder to read if there is insufficient line spacing. This is the Avalanche Studios maximum recommended number of lines per slide @_Humus_ (seven). Sub bullets look like this Edit this text to create a Heading This subtitle is 20 points Bullets are blue They have 110% line spacing, 2 points before & after Bonus slides! Longer bullets in the form of a paragraph are harder to read if there is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this Edit this text Random rantsto/ create pet peeves a Heading Shader mad-ness intended) This subtitle is 20(pun points Understand the hardware Bullets are blue (x + a) * b ⇒ x * b + c, where c = a*b They points before & after a / (xhave - b) ⇒110% 1.0f / (cline * x + spacing, d), where c 2 = 1/a, d = -b/a // Constants Longer bullets in the form // ofConstants a paragraph are harder to C = { f / (f-n), n / (n–f) }; C = { f / n, 1.0f – f / n }; read if there is insufficient//line spacing. This is the // SUB-RCP-MUL MAD-RCP float GetLinearDepth(float z) float GetLinearDepth(float z) slide maximum recommended number of lines per { { return C.y / (z C.x); return 1.0f / (z * C.y + C.x); (seven). } } Sub bullets look like this ”Finish your derivation” [7] Edit this text Random rantsto/ create pet peeves a Heading Mergesubtitle linear operations into matrix This is 20 points Understand Bullets are depth blue Non-linear in view direction They have 110% line spacing, 2 points before & after Linear in screen-space! Longer bullets in the form of a paragraph are harder to Premature generalizations read ಠ_ಠif there is insufficient line spacing. This is the maximum Don’t do it!recommended number of lines per slide YAGNI (seven). Sub bullets look like this Edit this text to create a Heading Process Design for performance This subtitle is 20 points ”Premature optimizations is the root of all evil” Bullets are blue "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency They have line 2 points &hasafter by such reasoning,110% he will be wise to lookspacing, carefully at the critical code; but onlybefore after that code been identified" Code reviews Longer bullets in the form of a paragraph are harder to Profile read ifevery thereday is insufficient line spacing. This is the maximum recommended number of lines per slide (seven). Sub bullets look like this