{"id":53830,"date":"2022-02-17T06:00:14","date_gmt":"2022-02-17T11:00:14","guid":{"rendered":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=53830"},"modified":"2022-02-16T22:21:00","modified_gmt":"2022-02-17T03:21:00","slug":"lets-make-a-spaceship-part-1-just-like-the-old-days","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=53830","title":{"rendered":"Let&#8217;s Make a Spaceship Part 1: Just Like the Old Days"},"content":{"rendered":"<p>Long-time readers have heard this story <a href=\"?p=2940\">before<\/a>. I decided to spend &#8220;a couple of hours&#8221; making something. Those hours turned into days. Pretty soon I was stealing hours that I was supposed to be spending on the blog. So to cover up my crime, I decided to write about the project.\u00a0<\/p>\n<p>I&#8217;ve said before that I was a 3D artist <a href=\"?p=35194\">back in the 90s<\/a>. The truth is that I wasn&#8217;t great at it. I&#8217;m like 85% engineer and 15% artist,<span class='snote' title='1'>You can really see this in my novels.<\/span> so a lot of my work was very plain and literalist. It was technically solid and I was really good at shaving off extra polygons, but you shouldn&#8217;t come to me if you&#8217;re looking for something that will invoke a mood or a specific art style. I think I served my employer much better when I left behind the art world and switched to programming full-time.<\/p>\n<p>A few weeks ago I came across <a href=\"https:\/\/www.youtube.com\/watch?v=en7deA6dE7Y\">this video<\/a>, where ex-Mythbuster Adam Savage talks about making physical models for the Star Wars prequel trilogy:<\/p>\n<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\/en7deA6dE7Y\" frameborder=\"0\" allowfullscreen class=\"embed\"><\/iframe><br\/><small><a href='http:\/\/www.youtube.com\/watch?v=en7deA6dE7Y'>Link (YouTube)<\/a><\/small><\/td><\/tr><\/table><\/p>\n<p>At the five minute mark he talks about the process of adding <a href=\"https:\/\/en.wikipedia.org\/wiki\/Greeble\">greebles<\/a> to the surface of a space station. He talked about coming up with &#8220;a story&#8221; for the thing you&#8217;re building. Like, a surface panel falls off, so that means the area under it gets these streaks of rust.\u00a0<\/p>\n<p>This is exactly the sort of work I struggled with. I&#8217;d make (say) a building or whatever, and it would be &#8220;too perfect&#8221;. Too uniform. Too simple. I&#8217;d try to add some detail (maybe some air conditioning blocks or whatever) to make it interesting, but it never felt right. I&#8217;d add detail in one spot, and then the rest of it would look more bare. So I&#8217;d add more. And more. And pretty soon I&#8217;d have this odd lumpy thing with a noisy outline that didn&#8217;t look or feel genuine. It was both too busy and yet <b>still<\/b> somehow lacking in detail???<\/p>\n<p>I thought Savage&#8217;s &#8220;tell a story&#8221; approach was an interesting one, and I wondered if it would help me.\u00a0<\/p>\n<p>So! I&#8217;m going to make a spaceship and see what I get.<\/p>\n<p><!--more--><\/p>\n<p>I didn&#8217;t realize I was going to write about this, so I didn&#8217;t save my first few spaceships. I just sort of took the default cube, smashed it into some other shape, zoomed out, realized my work sucked, and hit delete to start over. I was mostly getting used to Blender and getting a feel for what I wanted.<\/p>\n<p>This is the only one of the early models that had the dignity of being saved to the hard drive before being abandoned:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship9.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>After a few abortive attempts like this, I realize I need a different approach.\u00a0I want to practice adding detail to a model. But there&#8217;s no point in doing that until I have a reasonable base to work from.<\/p>\n<p>Now, obviously I should be working from reference images. I was worried that if I started with someone else&#8217;s images, I&#8217;d just end up copying their design. That&#8217;s an understandable concern, given my usual approach of brute-force imitation. But attempting to work blind is silly. Coming up with my own spaceship design is harder than coming up with decorative details to put on the surface. This is like building a house so I can practice painting the mailbox. I&#8217;m doing this the hard way for no reason.<\/p>\n<p>So I need a reference photograph. I type random words from the collection of &#8220;space ship design outer space future mothership concept art&#8221;. I&#8217;m still not crazy about the results I get, but then I throw the term &#8220;Homeword&#8221; in the mix and I start seeing stuff I like. Eventually I assemble images of these handsome ladies:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship8.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>I&#8217;m paying particular attention to the upper-left and center-bottom images. I didn&#8217;t bother to confirm, but I&#8217;m willing to bet all of these are from <i>Homeworld<\/i>.<\/p>\n<h3>Do YOU Remember Homeworld?<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/homeworld1.jpg' width=100% alt='At the default zoom levels, Homeworld was a game where blue number icons would fight red number icons. You needed to zoom in if you wanted to really appreciate the spectacle.' title='At the default zoom levels, Homeworld was a game where blue number icons would fight red number icons. You needed to zoom in if you wanted to really appreciate the spectacle.'\/><\/div><div class='mouseover-alt'>At the default zoom levels, Homeworld was a game where blue number icons would fight red number icons. You needed to zoom in if you wanted to really appreciate the spectacle.<\/div><\/p>\n<p>It was a real-time strategy game from 1999. The gameplay was nothing special. This was the heyday of the RTS genre. Legendary franchises like <i>Age of Empires, Warcraft, Total Annihilation, Starcraft<\/i>, and <i>Command and Conquer<\/i> were all active and popular in this time period.\u00a0<\/p>\n<p>Homeworld really couldn&#8217;t hold a candle to those titles in terms of depth and mechanics. It&#8217;s pretty hard for things like &#8220;terrain&#8221;, line-of-sight, fog of war, and high ground to have any meaning in a game that takes place in the void. The full 3D battlefield was good for making it complicated to order units around and keep track of where everything was, but none of that complexity translated into gameplay depth.\u00a0<\/p>\n<p>You started off every mission mining asteroids and using the captured resources to build military units. Then you&#8217;d fling your armada at the enemy and turn their fleet into charred metal.<\/p>\n<p>At this point you&#8217;re supposed to gather up your fleet, pack everything away inside your mothership, and jump to the next mission.<\/p>\n<p>Except&#8230;<\/p>\n<p>Except the game allowed you to keep your fleet from one mission to the next. So once the battle was over, <b>obviously<\/b> the smart move was to spend twenty minutes mining the remaining asteroids and turning them into more ships. This was boring, yes. But this is obviously the <b>optimal<\/b> thing to do. And if you&#8217;re not the sort of person that&#8217;s compelled to optimize, then I don&#8217;t know what you&#8217;re doing in the RTS genre in 1999.<\/p>\n<p>But then about halfway through the game I learned that it auto-balances. The more ships you bring with you, the bigger the enemy fleet gets.\u00a0<\/p>\n<p>This was a double trap for me. I&#8217;m compelled to optimize my forces, even if that means playing in a boring way. At the same time, optimizing is meaningless. I can&#8217;t just leave all these resources behind, because that feels wrong. But it doesn&#8217;t make any sense to gather them up because they don&#8217;t give me any advantage. I can either pointlessly waste my time doing something boring for no benefit, or I can end every mission plagued by the anxiety that I&#8217;m being lazy and sloppy by leaving all these free resources behind. I&#8217;m paralyzed.\u00a0<\/p>\n<p>And so I never finished the game.<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/homeworld2.jpg' width=100% alt='In space, no-one can hear your screen. Which is good, a lot of those old CRTs used to make an awful buzzing sound.' title='In space, no-one can hear your screen. Which is good, a lot of those old CRTs used to make an awful buzzing sound.'\/><\/div><div class='mouseover-alt'>In space, no-one can hear your screen. Which is good, a lot of those old CRTs used to make an awful buzzing sound.<\/div><\/p>\n<p>Having said that, I still list this game as a &#8220;classic&#8221; and &#8220;<a href=\"?p=24453\">one of my favorites<\/a>&#8220;. <i>Why?\u00a0<\/i><\/p>\n<p><i>Why would I call a game a favorite when I couldn&#8217;t even be bothered to finish it?<\/i><\/p>\n<p><b>Because the aesthetics of playing this game are so good that the experience is burned into my memory.<\/b> I would call the sensation of playing this game &#8220;euphoric&#8221;. I remember sitting there at my 15 inch 800&#215;600 monitor, looking out over my gargantuan fleet of ships as they drifted in the void of glittering stars and radiant nebulae, listening to the angelic choir lament for a world they had never seen, and I didn&#8217;t even want to touch the keyboard. I just wanted to stay in that moment, enjoying that paradoxical sense of scale where my fleet felt simultaneously immense and yet impossibly small. These ships were larger and grander than anything humans had dreamed of building in the real world. The Mothership makes the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Nimitz-class_aircraft_carrier\">Nimitz class carrier<\/a> look like a rowboat. And yet she is nothing in the void. A joke. A fragment of a speck of floating metal.\u00a0<\/p>\n<p>This game filled me with a sense of awe. It made me want to write poetry. It even had moments where the experience was so overwhelming, I very nearly was willing to put up with the lame-ass gameplay.<\/p>\n<p>What I&#8217;m saying is, I tried to finish this game more than once. I&#8217;d get sucked in by the sensory experience, and then I was slowly driven away by the mechanics.<\/p>\n<h3>Where Was I?<\/h3>\n<p>I seem to have lost my train of thought. What were we doing? Oh, right. Making a spaceship:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship8.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>Like all of the art in Homeworld, this stuff is so good I&#8217;m ashamed to look at it. Using these as reference is an act of outrageous hubris. If I manage to hone my skills and become ten times the artist I was, then by the end I might eventually be able to craft something that looks like a rough draft of a knockoff of one of these ships.<\/p>\n<p>Anyway, let&#8217;s get started!<\/p>\n<p>Once again, I didn&#8217;t keep my first attempts because I thought I was working on a one-day project and I didn&#8217;t expect to write about it. So I have no record of the early stuff. But here is the first one I made that I thought was good enough to work with:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship1.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>It&#8217;s not much obviously, but I think this is at least good enough that I can have some fun adding detail to it.<\/p>\n<p>Great. We&#8217;re finally ready to start the project.\u00a0<\/p>\n<p>Now, Adam Savage was talking about working on really fine details like single windows and individual surface panels. That would be massive overkill for this project, and also much too daunting as a starting point. So I&#8217;m going to try to devise the ship in sections, and as I go I&#8217;ll try to come up with an explanation or purpose behind each section.<\/p>\n<p>Actually, let&#8217;s stop and add a texture map first. The model doesn&#8217;t need a texture map yet, but I find I lose track of scale without one. If I add some windows then maybe they can help guide me. So I hit Google Image Search, find some random space-panel textures, and then hand-draw some windows:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship2.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>You can see some dodgy mapping around the top and some seams on the side. It&#8217;s fine. We&#8217;re going to be throwing away this mapping &#8211; and maybe even the texture map itself &#8211; later down the line. These windows are our version of <a href=\"https:\/\/knowyourmeme.com\/memes\/banana-for-scale\">Banana for Scale<\/a>. The eye tends to assume that space-windows operate on roughly the scale as their terrestrial counterparts. <\/p>\n<p>Now it&#8217;s time to add detail \/ features to this thing. Unlike the projects I worked on in my 20s, I&#8217;m not going to add random bumps in an effort to make it &#8220;interesting&#8221;. Instead, we&#8217;re going to design the ship a section at a time, and each section will have a purpose.<\/p>\n<p>I suppose the first thing we need is a place for crew members to live.<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship3.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>What comes next? Oh, that&#8217;s right&#8230;<\/p>\n<p>BUT WHAT DO THEY EAT?<\/p>\n<p>We need a place to store cargo. Now, in a real-ish life I imagine you&#8217;d keep all your cargo inside the ship, and you wouldn&#8217;t waste time with windows, since your supplies don&#8217;t need to be able to stargaze. But if we followed this logic then the cargo area of a ship would just look like a smooth, featureless hull. And when you think about it some more, that ought to hold true for most of the ship.<\/p>\n<p>But I want to convey the idea that &#8220;stuff is stored here&#8221;, so let&#8217;s imagine these space engineers decided to store stuff in containers strapped to the hull:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship4.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>Now we probably need some sort of housing for the magic widget that generates &#8220;modulated hyperspace waves&#8221;<span class='snote' title='2'>Also known as &#8220;blue particle effects&#8221;.<\/span> and supplies the excuse that explains why our ship gets to go faster than light speed. I&#8217;ve decided that such a device needs to be round and have a hole in the middle, just because that will break up the ship outline a bit so it doesn&#8217;t feel like a flying wall.<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship5.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>I switch over to flat-color view to check my topology and it makes me laugh:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship6.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>You can tell I&#8217;m an old-timer that hasn&#8217;t done this sort of thing since the 90s. This is SO low poly.<span class='snote' title='3'>Actually, the little rounded cargo modules\u00a0aren&#8217;t too bad. That&#8217;s roughly the level of rounding \/ polygon density you might expect these days.<\/span><\/p>\n<p>I felt like I was really going crazy with the polygon counts. When I built that hyperdonut in the middle of the ship, I thought I was being positively <b>decadent<\/b> by starting with a 16-sided cylinder.<span class='snote' title='4'>Back in the day, 6-siders were the norm, but you might go up to 8 if the curved surface was going to be really big.<\/span> But now I can see how jagged it is. I think 32 sides &#8211; double what I started with! &#8211; is probably as low as you&#8217;d want to go. And you could easily justify doubling that again if this model was going to be viewed from anywhere closer than the view above.<\/p>\n<p>I spent so many years fussing over individual surfaces and looking for ways to save a triangle or three. These days that sort of optimization just isn&#8217;t worth it. But old habits die hard. Asking me to ignore polygon counts is like asking an aerospace engineer to not worry about weight. Like, <i>that&#8217;s the entire job, man!<\/i><\/p>\n<h3>What Did We Learn Today?<\/h3>\n<p>I walk away from the model for a day or so, and then come back to it and appraise it with fresh eyes. Several things stand out to me:<\/p>\n<p>The straight edges on the top and bottom are very dull. That needs to be broken up somehow. We could go for a more organic shape, with the spine curving slightly. Or we could take those jagged shapes from the front and back and add more of them in the middle, sticking up from that otherwise boring spine. One way or another, the edges need some variations in height. Maybe something like this:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship7.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>Pardon the freehand mouse-drawing. Hopefully you get the idea. Anyway, here&#8217;s the model with lighting enabled:<\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/modship10.jpg' width=100% alt='' title=''\/><\/div><div class='mouseover-alt'><\/div><\/p>\n<p>Also, this two-tone look is too plain. Looking at my reference images, I notice that three colors seems to be the magic number. A really common style is white + black + primary color. I think I need a stripe of color somewhere on this thing.<\/p>\n<p>And finally, I&#8217;m not really happy with the scale. On one hand, I&#8217;m glad I held a consistent scale and didn&#8217;t &#8220;drift&#8221; as I added new material. Back in the day, I made that mistake a lot. On the other hand, this feels smaller than what I was going for. This doesn&#8217;t feel like it&#8217;s in the weight class of a &#8220;flagship&#8221; or an &#8220;aircraft carrier&#8221;. This feels more like something yacht-sized. Actually, it&#8217;s almost giving me &#8220;space bus&#8221; vibes.\u00a0<\/p>\n<p>You could fix this by shrinking the windows. Heck, I could probably fix it just by changing the texture mapping and not messing with the model itself at all. Either way, it needs to feel bigger.<\/p>\n<p>Now, I&#8217;m tempted to throw the whole thing out and start over with what I&#8217;ve learned, but let&#8217;s delay that step. I&#8217;ll probably learn several more things in the next couple of hours, and I might as well learn them <b>before<\/b> we start the next model.<\/p>\n<h3>Before You Go<\/h3>\n<p>Now, I imagine quite a few of you are in a hurry to jump down to the comments and tell me that <i>Homeworld 3<\/i> was <a href=\"https:\/\/www.youtube.com\/watch?v=pacXW5eZb9w\">revealed recently<\/a>.\u00a0<\/p>\n<p>For the moment, I just want to make it clear that I didn&#8217;t know <i>Homeworld 3<\/i> was coming at this point in the project. We&#8217;ll come back to this later in the series.\u00a0<\/p>\n<p>Anyway, that was a pretty productive &#8220;day&#8221; of 3D modeling. On one hand, I&#8217;m rusty as hell and I&#8217;ve forgotten half my skills. On the other hand, the tools these days are <b>so good<\/b>! My memory lapses are slowing me down, but these tools are making me more productive. I think it&#8217;s basically a wash.<\/p>\n<p>I realize this spaceship doesn&#8217;t look like much. Try not to get too hung up on it. The project is actually going to take a turn and go off in another direction pretty soon.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Long-time readers have heard this story before. I decided to spend &#8220;a couple of hours&#8221; making something. Those hours turned into days. Pretty soon I was stealing hours that I was supposed to be spending on the blog. So to cover up my crime, I decided to write about the project.\u00a0 I&#8217;ve said before that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-53830","post","type-post","status-publish","format-standard","hentry","category-projects"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/53830","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=53830"}],"version-history":[{"count":12,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/53830\/revisions"}],"predecessor-version":[{"id":53866,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/53830\/revisions\/53866"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=53830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=53830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=53830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}