{"id":1833,"date":"2010-12-16T18:44:28","date_gmt":"2010-12-17T00:44:28","guid":{"rendered":"http:\/\/www.realtimerendering.com\/blog\/?p=1833"},"modified":"2010-12-16T19:00:33","modified_gmt":"2010-12-17T01:00:33","slug":"digital-foundry-interview-with-halo-reach-developers","status":"publish","type":"post","link":"https:\/\/www.realtimerendering.com\/blog\/digital-foundry-interview-with-halo-reach-developers\/","title":{"rendered":"Digital Foundry interview with Halo: Reach developers"},"content":{"rendered":"<p><em><a href=\"http:\/\/www.bungie.net\/projects\/reach\/default.aspx\">Halo: Reach<\/a><\/em> was one of the big game releases of 2010, so I was pleased to see <a href=\"http:\/\/www.eurogamer.net\/articles\/digitalfoundry-halo-reach-tech-interview\">a detailed technical interview<\/a> with some of the developers on <a href=\"http:\/\/www.eurogamer.net\/\">Eurogamer<\/a>&#8216;s <a href=\"http:\/\/www.eurogamer.net\/digitalfoundry\/\">Digital Foundry website<\/a>. I recommend you read the whole thing, but I&#8217;ll summarize some of the notable rendering tidbits (the interview also covered multiplayer, AI, and animation):<\/p>\n<ul>\n<li>The previous two games (<em>Halo 3<\/em> and <em>Halo 3: ODST<\/em>) used a &#8220;semi-deferred&#8221; approach, not for deferred lighting or shading but for decals. It sounds like they rendered a cut-down g-buffer (probably just diffuse color) in the first geometry pass (skipping small decoration objects like grass and pebbles), then blended decals into this buffer, and finally rendered the geometry a second time to do the lighting. <em>Halo: Reach<\/em> changed to a deferred lighting approach. Some lights were deferred and some weren&#8217;t, objects without decals or deferred lighting were only rendered once (this &#8220;hybrid deferred lighting&#8221; sounds similar to what Naughty Dog used for the <em>Uncharted<\/em> series).<\/li>\n<li><em>Halo 3<\/em> used spherical harmonics in lightmaps to store directional lighting information (detailed in <a href=\"http:\/\/www.bungie.net\/images\/Inside\/publications\/presentations\/lighting_material.zip\">a GDC 2008 talk<\/a>, as well as a SIGGRAPH 2008 course &#8211; see <a href=\"http:\/\/developer.amd.com\/gpu_assets\/S2008-Chen-Lighting_and_Material_of_Halo3.pdf\">slides<\/a> and <a href=\"http:\/\/developer.amd.com\/documentation\/presentations\/legacy\/Chapter01-Chen-Lighting_and_Material_of_Halo3.pdf\">course notes<\/a>). For <em>Halo: Reach<\/em>, Bungie developed an improved light map representation that gave them &#8220;the same support for area light sources, improved contrast, fewer artifacts, a smaller memory footprint and much better performance&#8221;. This sounds really interesting; I hope they will describe this further in a conference presentation or article.<\/li>\n<li>They developed a particle system which performs scene collisions on the GPU, using the depth and normal buffers as an approximate scene description. it can do tens of thousands of collisions \/ bounces per frame in 0.3 milliseconds (their previous CPU-based colliding particle system had a budget of 7 collisions per frame!). This system will be <a href=\"http:\/\/schedule.gdconf.com\/session\/12127\">presented at GDC 2011<\/a> (the presentation will also discuss optimizations to their atmospheric effects system).\u00a0 This is a great idea &#8211; techniques like SSAO use depth\/normal buffers as approximate scene descriptions for rendering, but this is the first time I have heard of this being done for simulation.<\/li>\n<li><em>Halo 3<\/em> used two 8-bit-per-channel frame buffers with different exposure values for HDR effects (primarily bloom). Bungie described this scheme in a presentation called &#8220;HDR the Bungie Way&#8221; at two Gamefest conferences: <a href=\"http:\/\/download.microsoft.com\/download\/7\/6\/0\/760ba04e-6952-4c14-a51e-fa54e02f3198\/Graphics.zip\">USA in 2006<\/a> and <a href=\"http:\/\/www.microsoft.com\/downloads\/en\/details.aspx?FamilyId=995B221D-6BBD-4731-AC82-D9524237D486&amp;displaylang=en&amp;pf=true\">Europe in 2007<\/a> &#8211; the 2006 (giant) zip file also contains an audio recording, but the 2007 one has more updated slides (including screenshots). The <a href=\"http:\/\/www.bungie.net\/images\/Inside\/publications\/presentations\/lighting_material.zip\">GDC 2008 talk mentioned above<\/a> also discusses this scheme briefly towards the end. In contrast, <em>Halo: Reach<\/em> uses a single 7e3 buffer; this yields higher performance and frees up more EDRAM for shadow buffers but has less dynamic range (the primary result of this is loss of color in some bloom regions).<\/li>\n<li>Instead of MSAA, <em>Halo: Reach<\/em> uses a simple temporal anti-aliasing method. The camera is offset by a half-pixel in alternate frames, and the last two frames are selectively blended (the blending is turned off on pixels that have moved significantly since the last frame).<\/li>\n<li>They developed a new LOD system (to be <a href=\"http:\/\/schedule.gdconf.com\/session\/12125\">presented at GDC 2011<\/a>) which automatically generates low-cost models to be used far from the camera. Combined with improved occlusion culling and GPU occlusion queries, this enabled a significant increase in draw distance.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Halo: Reach was one of the big game releases of 2010, so I was pleased to see a detailed technical interview with some of the developers on Eurogamer&#8216;s Digital Foundry website. I recommend you read the whole thing, but I&#8217;ll summarize some of the notable rendering tidbits (the interview also covered multiplayer, AI, and animation): [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[430,431],"class_list":["post-1833","post","type-post","status-publish","format-standard","hentry","category-resources","tag-bungie","tag-halo-reach"],"_links":{"self":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts\/1833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/comments?post=1833"}],"version-history":[{"count":14,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts\/1833\/revisions"}],"predecessor-version":[{"id":1847,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/posts\/1833\/revisions\/1847"}],"wp:attachment":[{"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/media?parent=1833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/categories?post=1833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.realtimerendering.com\/blog\/wp-json\/wp\/v2\/tags?post=1833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}