{"id":20567,"date":"2013-08-07T21:42:13","date_gmt":"2013-08-08T02:42:13","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=20567"},"modified":"2013-08-08T03:05:12","modified_gmt":"2013-08-08T08:05:12","slug":"quakecon-keynote-2013-annotated-part-3","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=20567","title":{"rendered":"Quakecon Keynote 2013 Annotated: Part 3"},"content":{"rendered":"<p><table class='nomargin' cellspacing='0' width='100%' cellpadding='0' align='center' border='0'><tr><td><iframe loading=\"lazy\" width=\"1024\" height=\"576\" src=\"https:\/\/www.youtube.com\/embed\/Uooh0Y9fC_M\" frameborder=\"0\" allowfullscreen class=\"embed\"><\/iframe><br\/><small><a href='http:\/\/www.youtube.com\/watch?v=Uooh0Y9fC_M'>Link (YouTube)<\/a><\/small><\/td><\/tr><\/table><\/p>\n<p>As before: In the process of going through this I&#8217;m bound to commit minor omissions, errors, misunderstandings, grammatical errors, or war crimes. <\/p>\n<p>Times are approximate.<\/p>\n<p><strong>28:30 &#8220;You can put multiple Titans into a PC and render absolutely incredible amounts of FLOPS and Vertexes and Textels&#8221;.<\/strong><\/p>\n<p>He&#8217;s talking about the huge horsepower of top-end PC&#8217;s. You can put multiple <a href=\"http:\/\/www.nvidia.com\/titan-graphics-card\/ultimate-gaming\">Titan graphics cards<\/a> into a single PC so they can share the load and work even faster. (This is insanely expensive, but also insanely fast. I think one Titan will set you back about a thousand bucks, as of this writing.) <\/p>\n<p><a href=\"http:\/\/en.wikipedia.org\/wiki\/Flops\">FLOPS<\/a> are <strong>FL<\/strong>oating-point <strong>O<\/strong>perations <strong>P<\/strong>er <strong>S<\/strong>econd. When we&#8217;re talking about how fast a processor can crunch numbers, we often measure performance in FLOPS.<\/p>\n<p>A <a href=\"http:\/\/en.wikipedia.org\/wiki\/Texel_(graphics)\">texel<\/a> is a &#8220;texture pixel&#8221;, and in this context it&#8217;s basically a measure of how fast the graphics card can fill up the screen with all the stuff it&#8217;s trying to render.<\/p>\n<p><!--more--><strong>32:30 &#8220;We still have DXT compressed textures that turn a lot of things into garbage.&#8221;<\/strong><\/p>\n<p>In this section he&#8217;s talking about the weird performance myopia that some people exhibit where they&#8217;ll polish some small detail while ignoring glaring technical flaws of other areas. It&#8217;s kind of like someone carefully waxing and buffing their car to get all the fingerprints off it when it&#8217;s got huge dents and rust holes. <\/p>\n<p>DXT is a way of compressing textures. It saves you graphics memory, but it sometimes degrades image quality. <a href=\"http:\/\/www.gamasutra.com\/view\/feature\/2467\/making_quality_game_textures.php\">This article<\/a> has some side-by-side shots.<\/p>\n<p><strong>33:00 &#8220;Everybody bakes 8-bit normals.&#8221;<\/strong><\/p>\n<p>&#8220;Bake&#8221; in this context is the process of making some static (unchanging) data to be used in the game.  For example, if you have &#8220;baked in&#8221; shadows, then the shadows are calculated during level design, and they can&#8217;t move around once the game is running. Half-Life 2 has baked shadows. Doom 3 doesn&#8217;t have baked shadows, which means they can move around, change, etc.<\/p>\n<p>&#8220;Normal maps&#8221; are &#8220;bump maps&#8221;. (It&#8217;s a bit more complicated than that. But it&#8217;s not worth getting into.) Most textures are color data.  Like, if you put a picture of bricks on a polygon then it looks like a brick wall.  The problem with using plain texture maps is that they don&#8217;t react to light the way their surface might suggest.  If you shine a light down the face of a brick wall, you won&#8217;t see the light hitting the tops of bricks and the undersides being dark.  The illusion of a brick wall is broken and it suddenly looks like a wall with brick-patterned wallpaper. Which is pretty much what it is.<\/p>\n<p>But if you use a bump map, you can get those bricks to be lit the way the eye expects, and it can feel like the wall is actually bumpy. It takes another whole texture to pull this off, but that&#8217;s pretty cheap compared to the visual gain. Here&#8217;s a couple of screenshots I took in Doom3 BFG edition:<\/p>\n<p><table width='600'  cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><a href='images\/bump_map_full.jpg'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/bump_map_small.jpg' class='insetimage' width='600' alt='Left is without bump maps. Right is normal view. Note the keyboard and face. Click for LOLHUGE! view.' title='Left is without bump maps. Right is normal view. Note the keyboard and face. Click for LOLHUGE! view.'\/><\/a><\/td><\/tr><tr><td class='insetcaption'>Left is without bump maps. Right is normal view. Note the keyboard and face. Click for LOLHUGE! view.<\/td><\/tr><\/table><\/p>\n<p>&#8220;Baking normal maps&#8221; is a process where you let your artist go crazy and make some million-polygon model. Like, they can model the individual creases in the monster&#8217;s skin, the little rivets on the armor, everything.  Then you run a program to smooth out all those little bumps and turn the million polygon model into a thousand polygon model. But! You take all those bumps you sanded off and save them on a bump map. Again, refer to the keyboard in the screenshot above. The bump map makes it LOOK like there are individual keys sticking up.  You&#8217;d have to get your eyes level with the keyboard to see that the key don&#8217;t actually protrude from the surface. It&#8217;s just a lighting trick. <\/p>\n<p><strong>37:00 &#8220;Separate memory buses are the way things have been since the beginning.&#8221;<\/strong><\/p>\n<p>There&#8217;s your base computer. Then you&#8217;ve got a graphics card plugged into it. Each one has its own bank of memory and they can&#8217;t share. On the consoles, this is not the case. On the next-gen consoles (and also the Xbox 360 from the current generation) there is just one big pool of memory for the programmer to use as they like.<\/p>\n<p>This becomes important because while the computer is fast, and the graphics card is fast, the way they communicate is kind of slow. So if your game is drawing to a texture, then you have to send the texture to the graphics card, then do some operations on it, then maybe pull it back over to the computer and do something with the results. Moving the texture back and forth like this is messy and expensive, time-wise. It&#8217;s not that consoles are faster at doing this, it&#8217;s that they don&#8217;t need to do it at all! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Link (YouTube) As before: In the process of going through this I&#8217;m bound to commit minor omissions, errors, misunderstandings, grammatical errors, or war crimes. Times are approximate. 28:30 &#8220;You can put multiple Titans into a PC and render absolutely incredible amounts of FLOPS and Vertexes and Textels&#8221;. He&#8217;s talking about the huge horsepower of top-end [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66],"tags":[248,247],"class_list":["post-20567","post","type-post","status-publish","format-standard","hentry","category-programming","tag-carmack","tag-quakecon"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/20567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20567"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/20567\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20567"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20567"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}