{"id":5134,"date":"2009-09-23T06:09:00","date_gmt":"2009-09-23T10:09:00","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=5134"},"modified":"2009-09-28T15:47:57","modified_gmt":"2009-09-28T19:47:57","slug":"fuel-defining-procedural","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=5134","title":{"rendered":"FUEL: Defining Procedural"},"content":{"rendered":"<p><table width='384'  cellpadding='0' cellspacing='0' border='0' align='right'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/fuel1.jpg' class='insetimage' width='384' alt='If it were possible to jump off your vehicle, Fuel would have the makings of a fairly thrilling base jumping game.' title='If it were possible to jump off your vehicle, Fuel would have the makings of a fairly thrilling base jumping game.'\/><\/td><\/tr><tr><td class='insetcaption'>If it were possible to jump off your vehicle, Fuel would have the makings of a fairly thrilling base jumping game.<\/td><\/tr><\/table>Confusion always arises when I throw out the word &#8220;procedural&#8221;, as there seem to be a lot of different (perfectly valid) definitions bouncing around.  In my view, procedural content is about making things using simulation, automation, and approximation. <\/p>\n<p>Some people equate &#8220;procedural&#8221; with &#8220;totally random&#8221;. It&#8217;s true that it <em>can<\/em> be random (within the limits of a computer&#8217;s ability to generate &#8220;randomness&#8221;) but it doesn&#8217;t have to be.  It&#8217;s fairly trivial to make the computer generate the same sequence of random numbers, thus having a &#8220;random&#8221; area appear the same each time you visit. In any case, it&#8217;s true that there will be aspects of the world which were created without direct participation of a human being. The placement of objects will in that sense be &#8220;unpredictable&#8221;.  But this unpredictability &#8211; this loss of direct control &#8211; is one aspect of the tradeoff we&#8217;re making when we aim for procedural content. The more specific you want the content, the more it needs to be built by a human being.  Do you have a rigid expectation of where each and every tree should stand? No? Then let&#8217;s not waste an artist&#8217;s time by making them place the things manually. <\/p>\n<p>On one end of the spectrum is the hand-made world:  An artist (or a team of them) will use shaping tools to sculpt the topography of the land.  Then they paint it in some meaningful way.  Grass over here, dirt in this valley, exposed rock on steep surfaces, etc.  Then they populate the land with trees, shrubs, rock, grass, and whatever else the game calls for.  You can do something like this in an hour or so if you&#8217;ve got good tools and you&#8217;re only filling in something modest in size. On the other end of the spectrum is the purely random world: Have your world-o-matic moosh a bunch of random noise together to make generic rolling hills, and then randomly sprinkle vegetation around.  <\/p>\n<p><table width='384'  cellpadding='0' cellspacing='0' border='0' align='right'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/fuel2.jpg' class='insetimage' width='384' alt='Remember this building.  We&#8217;ll be seeing a lot more of it in a later post. Also: Is anyone thirsty? Me? I could drink.' title='Remember this building.  We&#8217;ll be seeing a lot more of it in a later post. Also: Is anyone thirsty? Me? I could drink.'\/><\/td><\/tr><tr><td class='insetcaption'>Remember this building.  We&#8217;ll be seeing a lot more of it in a later post. Also: Is anyone thirsty? Me? I could drink.<\/td><\/tr><\/table>The hand-made way is agonizingly time intensive, but will produce compelling scenery.  The later is cheap and fast, but produces a big bland soup of scenery where seeing one spot means you&#8217;ve basically seen it all.  One is stupid expensive, and the other is pointlessly dull. But the thing about the hand-made approach is that the artist spends a lot of time doing very repetitive non-creative stuff.  They&#8217;re doing tasks which don&#8217;t actually require a human brain.  The goal of any good procedural system should be to make sure that the artist is directly involved with the artistic decisions and is never bothered with any of the routine grunt-work.  <\/p>\n<p>Placing each and every tree is time consuming and needless.  Instead, you observe that trees do not grow randomly in the real world, but behave according to observable rules.  There are rules about where trees grow, how they&#8217;re spaced out, and how big they get in different places. Trees don&#8217;t generally grow on steep hills, and if they do they don&#8217;t get very big.  Dense trees tend to choke out undergrowth.  Undergrowth prefers soil to rocky terrain.  Grass gets tall anywhere you don&#8217;t have tress or undergrowth. Some trees grow denser than others and have different preferences for elevation and moisture. Etc etc etc.  A programmer can bang out a few rules like this and add them to the editor.  Now instead of the artist saying &#8220;I want a tree here, and another here, and here, and here, and I hate my job, and here, and a couple here, and I wonder if McDonald&#8217;s is hiring, and now onto the shrubs&#8230;&#8221;  The artist can just say, &#8220;Given the rules for trees, I want a forest over this region.&#8221;  Boom.  Forest done. Now instead of planting trees and bushes, the artist is placing forests and grasslands. <\/p>\n<p><table width='384'  cellpadding='0' cellspacing='0' border='0' align='right'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/fuel3.jpg' class='insetimage' width='384' alt='fuel3.jpg' title='fuel3.jpg'\/><\/td><\/tr><\/table>Now, artists usually jump in here and insist that you can&#8217;t cut them out of the process like this because the resulting data will be sterile and random.  But note that what&#8217;s really going on is that some of the artistic work has been offloaded onto the programmer who had to implement these rules.  This is probably why it&#8217;s taken so long for people to get a handle on procedural stuff:  It requires a very particular sort of programmer to do this sort of work.  You either need an artist who is very good at explaining what she does in concrete terms (as opposed to saying, &#8220;I keep adding trees until it looks good&#8221;) or a programmer who has an artistic flair. I&#8217;m a good example of the latter, which is why I was able to pull of the <a href=\"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=2940\">Procedural City<\/a>.  (With apologies for the excessive ego for the previous statement, but I really do think this is an area of particular capability for me.  Too bad I don&#8217;t get to use it more often.)<\/p>\n<p>This is where people who love to haggle over definitions will jump in and say that this is no longer art.  They argue that once you distill a process down to rules and numbers, you&#8217;re no longer expressing or communicating, you&#8217;re just imitating. But I see art in making the code that makes the world just as I see art in using the tools that make the world.  I see the compiler as simply a very strange paintbrush. But fine. We don&#8217;t <strong>have<\/strong> to call this art and there&#8217;s no reason to derail ourselves by going for another trip around the &#8220;how do you define art&#8221; mulberry bush. Art or not, the goal is to create a space that feels plausible and aesthetically pleasing. <\/p>\n<p>I think Fuel pulls this off.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If it were possible to jump off your vehicle, Fuel would have the makings of a fairly thrilling base jumping game.Confusion always arises when I throw out the word &#8220;procedural&#8221;, as there seem to be a lot of different (perfectly valid) definitions bouncing around. In my view, procedural content is about making things using simulation, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[],"class_list":["post-5134","post","type-post","status-publish","format-standard","hentry","category-game-design"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/5134","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=5134"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/5134\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}