{"id":35448,"date":"2016-12-08T06:00:06","date_gmt":"2016-12-08T10:00:06","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=35448"},"modified":"2016-12-08T08:50:07","modified_gmt":"2016-12-08T13:50:07","slug":"crash-dot-com-part-5-its-in-the-can","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=35448","title":{"rendered":"Crash Dot Com Part 5: It&#8217;s in the Can"},"content":{"rendered":"<p>It&#8217;s early in the year 2000, and I am trying to build a virtual shopping mall because of the dot-com boom.<\/p>\n<p>Like I said, our company isn&#8217;t the typical dot-com startup. Our company is small. There are less than a dozen of us. We&#8217;ve been around since the early 90&#8217;s, and while we&#8217;re not taking over the world we have been self-sufficient for several years. <\/p>\n<p>This is one of the reasons I haven&#8217;t run away from this project screaming. The place where I work isn&#8217;t some soulless corporate meatgrinder. I don&#8217;t work for Dilbert&#8217;s pointy-haired boss. I&#8217;m not a cog in the machine. I&#8217;m a valued member of a small team of friends who have built something valuable together. This team-up with the virtual mall guys has thrown the company off-kilter, but right now this feels like something temporary. I&#8217;m not going to quit over one bad project. I&#8217;m thinking that someday this project will end and things can go back to the way they were.<\/p>\n<div class=\"dmnotes\">Hi. Me-from-2016 again to remind you that the above is how I was thinking at the time. I&#8217;m not suggesting my company was perfect. Obviously SOMETHING had gone wrong that we went into business with this other outfit. They didn&#8217;t storm the building and point guns at us to make us join them for the virtual mall project. But I didn&#8217;t really understand the thinking that drove this decision, and at the time I wasn&#8217;t really curious. So let&#8217;s just leave it at that, rather than speculating about events I barely remember that involved information I wasn&#8217;t privy too in an area of business I didn&#8217;t understand. <\/p>\n<p>Anyway, back to <a href=\"https:\/\/www.youtube.com\/watch?v=VZP7RJFDoys\">THE YEAR TWO THOUSAND<\/a>&#8230;<\/div>\n<p><!--more--><\/p>\n<h3>The Can<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/cdc_mall.jpg' width=100% alt='Like this, except without the central column, made entirely of glass, and without any people or objects to create a sense of scale.' title='Like this, except without the central column, made entirely of glass, and without any people or objects to create a sense of scale.'\/><\/div><div class='mouseover-alt'>Like this, except without the central column, made entirely of glass, and without any people or objects to create a sense of scale.<\/div><\/p>\n<p>After the meeting I was second-guessing myself. Maybe I was just being overly negative because I didn&#8217;t see the big picture. Maybe this was workable and I was just nervous because it was something that had never been done before. It&#8217;s pretty hard to stay negative when everyone else in the room is older, more experienced, richer, and sure it&#8217;s all going to work.<\/p>\n<p>But now I&#8217;ve been sent more of the detailed specs and I&#8217;m back to thinking it&#8217;s a dreadful idea. Every aspect of it seems to be fundamentally flawed. This is a shame, since it&#8217;s my job to make it work<span class='snote' title='1'>Well, the environment, anyway.<\/span>.<\/p>\n<p>Usually when a client wants us to build a virtual world for them, they tell us what they want the world to do or what they want the user experience to be like, and leave the design up to our art team. But these guys have handed us a blueprint for exactly how they want the mall to look. <\/p>\n<p>They&#8217;ve paid a fancy architect to design the &#8220;ultimate mall&#8221;. This design was created without anyone involved understanding what modern consumer computers are capable of, much less our graphics engine in particular. The architect built the structure in <a href=\"https:\/\/en.wikipedia.org\/wiki\/Autodesk_3ds_Max\">3D Studio<\/a> and emailed me the high-resolution renders. It&#8217;s really quite pretty, futuristic, and fantastical, and also <i>completely<\/i> inappropriate.<\/p>\n<p>The mall is a cylinder, roughly the proportions of a soup can. Internally we jokingly refer to it as the &#8220;Can of Beans Design&#8221;. It consists of several stacked levels, each with shops along the outer wall. The interior is made entirely of glass. Glass floors. Glass ceilings. Glass support columns. Glass roof. In the very center is an open shaft, allowing visitors to move between levels. The renders give us a spectacular view of sunlight streaming diagonally though the building, creating captivating patterns of shadows as the light is tinted and refracted through the layers of impossible glass.<\/p>\n<p>How wrong is this? Let me count the ways.<\/p>\n<h3>The Most Wrongest Possible<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/cdc_glass.jpg' width=100% alt='Your job is to create THIS effect, using basically the engine that was used to make GTA III.' title='Your job is to create THIS effect, using basically the engine that was used to make GTA III.'\/><\/div><div class='mouseover-alt'>Your job is to create THIS effect, using basically the engine that was used to make GTA III.<\/div><\/p>\n<p><strong>1. Everything that makes this interesting to look at comes from the way light interacts with the glass structure, which is an effect that&#8217;s impossible to achieve in realtime on home computers.<\/strong><\/p>\n<p>This mall is supposed to be targeted at the general public, not hardcore gamers. Most of those folks still don&#8217;t have dedicated graphics hardware. <\/p>\n<p>Our lead programmers are a couple of really smart guys, but they aren&#8217;t top-tier engine programmers like you find at Epic Games or id Software. And even those geniuses couldn&#8217;t pull this off. In four years John Carmack will devise <a href=\"https:\/\/en.wikipedia.org\/wiki\/Id_Tech_4\">id Tech 4<\/a>, the engine behind Doom 3. That engine will finally give the ability to create <i>one<\/i> of the effects used in this scene. (Real time shadows.) And that effect will only work for simple geometry, for limited indoor scenes, and only work on dedicated gaming hardware. <\/p>\n<p>Even a decade and a half from now, high-end graphics hardware <i>still<\/i> won&#8217;t be powerful enough to pull off the complex effects we see here. And without that complex lighting, this place is dreary. In a 2000-era graphics engine like ours, colored glass does nothing more than tint things on the other side of it. It doesn&#8217;t cast shadows, refract light, or tint the light passing through it. It certainly doesn&#8217;t create dazzling reflections or volumetric rays of sunshine.<\/p>\n<p>Without surface reflections, glass has no surface detail. Without surface detail, you have no sense of distance or scale. Everywhere you turn you just see a jumble of slightly blue triangles. You can&#8217;t even tell when you&#8217;ve run face-first into a wall. It just feels like you&#8217;ve stopped moving for no reason.<\/p>\n<p><strong>2. Enormous structures are breathtaking in real life, but tedious when explored via a 15-inch CRT.<\/strong><\/p>\n<p>If you&#8217;ve ever messed around with a game level editor, or if you&#8217;ve ever messed with some of the enormous open maps in Garry&#8217;s Mod, then you&#8217;ve probably encountered this. Large spaces make you feel like an insect crawling across a room. You feel so slow. You start holding down the W key harder in the hopes you can somehow close this impossible distance. <\/p>\n<p>This can of beans is humongous. Someday in the future we&#8217;ll be able to make games that have big structures like this that will appear impressive instead of boring. They&#8217;ll accomplish this by filling the space with detail that gives the user a sense of scale. Trees. Benches. Signage. Planters. Walkways. Railings. Fountains. Archways. Low walls. Grass. Trash cans. The submitted design contains none of these elements. Moreover, today&#8217;s computers aren&#8217;t nearly fast enough to render enough fine detail to fill this space in. In the end, it feels like navigating an empty warehouse.<\/p>\n<p><strong>3. The size of the building does not interact well with our draw distance. <\/strong><\/p>\n<p>When you&#8217;re outside the building, the shops on the far side of the structure will pop into view as you approach. Since the building is basically one giant window, you get a really nice view of this happening. And since the building fills your entire screen, the pop-in is brutal to the point of being confusing.<\/p>\n<p>Moreover, the towering multi-floor design creates a worst-case scenario for polygon count. Our software&#8217;s view distance is based on a 2D overhead view, which means distant things are removed from the horizon, but not directly above you. When you&#8217;re on the first floor, all of the contents of the other dozen or so floors will also be in memory, since they&#8217;re directly overhead. If the building had a more flat design, then some of this stuff could be hidden behind the draw distance. And when it popped in, it wouldn&#8217;t be as abrupt because the new objects would be small things in the distance instead of large things looming directly over you.<\/p>\n<p><strong>4. The central shaft requires vertical movement.<\/strong><\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/cdc_wrong.jpg' width=100% alt='Don&apos;t blame me. I built it to spec.' title='Don&apos;t blame me. I built it to spec.'\/><\/div><div class='mouseover-alt'>Don&apos;t blame me. I built it to spec.<\/div><\/p>\n<p>The designer just put an open circular shaft in the middle of the structure and left it to us to figure out how people should change floors. Users can fly up and down at will, so I guess that&#8217;s how you get around?<\/p>\n<p>If anyone had thought to ask me beforehand, I would have told them that vertical movement should be avoided at all costs. Barring that, vertical movement should be mediated by familiar things like ramps or staircases. Using an elevator is a terrible idea in a shared space for numerous reasons, from animation problems to griefing. Above all, <i>under no circumstances should you ask anyone to FLY<\/i>. <\/p>\n<p>This is supposedly a product for internet newbies. This is supposed to introduce non-gaming folk to the concept of moving around with the arrow keys and turning your head with the mouse<span class='snote' title='2'>At this point we didn&#8217;t have WASD movement or proper mouselook. A year later I added those things when I became a full member of the coding team, but here in 2000 we&#8217;re still using a control scheme devised in 1994.<\/span>. That alone is going to be too much of a hassle for a lot of people, and adding flight is just asking for trouble.<\/p>\n<p><strong>5. The round floorplan will make construction a nightmare.<\/strong><\/p>\n<p>Round surfaces require more polygons than flat ones, which will exacerbate all of the performance issues caused by all the other stuff that&#8217;s wrong with this design. But on top of that, this sort of design will create endless headaches for the people who have to build and maintain it.<\/p>\n<p>Even cutting-edge games have trouble with curved surfaces, and we are not a cutting edge game nor are our intended users equipped with cutting-edge hardware. Our client and server are built around a system of placing objects with 1-centimeter accuracy and snapping their rotation to the closest tenth of a degree<span class='snote' title='3'>Both numbers are actually stored as integers, so an object rotated 180 degrees would store its angle as 1800.<\/span>. It&#8217;s easy enough to build straight walls that run directly North\/South or East\/West, parallel to the world axis. And if you&#8217;re careful you can reliably build 45&deg; off the world axis. But building out from a central hub at arbitrary angles will lead to <a href=\"https:\/\/en.wikipedia.org\/wiki\/Z-fighting\">z-fighting<\/a>, collision irregularities, and infuriating seams between wall panels. <\/p>\n<p>Sure, we could solve this by overhauling our client, the server, how the two of them communicate, all of the various files they use for storing world data, and the building interface itself. That&#8217;s a project that would take weeks, and the shakeout period would be even longer. It could be done, but why spend all that precious time just so we can adopt this design, when there are countless other designs that wouldn&#8217;t incur such a massive cost? Moreover, there&#8217;s no time in the schedule for this kind of ambitious work. What will end up happening is that the client will remain as it is, and instead the art team will be doomed to spend hours trying to hide countless 1-pixel seams and get objects to line up properly.<\/p>\n<h3>Art First<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/cdc_art.jpg' width=100% alt='Sure, it doesn&apos;t work. But it looks SO GOOD!' title='Sure, it doesn&apos;t work. But it looks SO GOOD!'\/><\/div><div class='mouseover-alt'>Sure, it doesn&apos;t work. But it looks SO GOOD!<\/div><\/p>\n<p>I can sort of understand how we got here. I&#8217;m pretty sure John Business is in the retail business, because in the meeting he knew a lot about the expectations and preferences of real-world shoppers. More than once he used the phrase &#8220;full of light and air&#8221; to describe how shopping spaces need to feel. And yeah, I guess that does seem to embody the design philosophy of the typical upscale mall. This glass cylinder seems to be an attempt to take that idea to its logical extreme. Someone heard that virtual reality frees you from the limits of the physical world, and so they decided to make a shopper&#8217;s paradise. But what they needed to realize is that while virtual worlds remove the limits of the physical world with regards to support columns, floor space, and building materials, they impose a bunch of new limits that are just as restrictive as the old ones. These limits need to be understood before you can build anything worthwhile. <\/p>\n<p>The worst part of this is: Once you walk across the vast open space to the mall, navigate the dizzying circular design and fly up to the shop you&#8217;re interested in, squeeze through the realistically-spaced (thus incredibly narrow by &#8220;VR&#8221; standards) aisles to find your goods, and click on the cash register to pay, it pops up a webpage to handle the financial end of the transaction. We came all this way, and we end up with just another Amazon.com style shopping website. <\/p>\n<p>Which means all of that expensively-produced virtual stuff is just a really inconvenient way of searching for products. What we have here is the worst of all worlds. We&#8217;ve combined the hassles and inconvenience of physical shopping with the uncertainty, learning curve, and security concerns<span class='snote' title='4'>Back then, many people were very nervous about typing their credit card information into a computer.<\/span> of shopping online, and on top of that we&#8217;ve added the hardware requirements and navigation challenges of a first-person videogame. <\/p>\n<p>To be fair, there are some neat ideas here. It&#8217;s kind of cool to be able to pick up a camera, turn it over in your hands, open up the panel in the back, and otherwise get a sense of how the genuine article might feel in your hands. But those models are brutally time-consuming (and thus expensive) to produce. It makes sense to do this for cameras and other expensive gadgets, but the vast majority of things in a mall don&#8217;t fit that description. This means the vast majority of things in the store will be displayed to the consumer via static images, which is something webpages are already doing for a lot less hassle, expense, and complexity. We&#8217;re building this immense structure and all of these interior spaces, when there will be perhaps a dozen items in the entire complex that could possibly benefit from being showcased in this place.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s early in the year 2000, and I am trying to build a virtual shopping mall because of the dot-com boom. Like I said, our company isn&#8217;t the typical dot-com startup. Our company is small. There are less than a dozen of us. We&#8217;ve been around since the early 90&#8217;s, and while we&#8217;re not taking [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-35448","post","type-post","status-publish","format-standard","hentry","category-personal"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/35448","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=35448"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/35448\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=35448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=35448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=35448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}