Tales of the Rampant Coyote

Adventures in Indie Gaming!

Game Dev Quote of the Week: Chris Roberts on 3D

Posted by Rampant Coyote on December 27, 2013

WingCommander1RTBThis week: The father of Wing Commander offers an (old, somewhat dusty) opinion on the virtues of 3D graphics:

“One thing I discovered is that 3D is more intimidating from the outside than from the inside. Once you figure out what’s going on, it’s really pretty simple. It seems harder than it is and once you build the 3D system, it’s easier to work within than top-down or side-view. From that point on you define the world, its criteria and its physics, and you can do anything in it. You can say, ‘let’s put the camera over there’ and it works. To move an object in space you just give it a velocity vector.”

— Chris Roberts, Wing Commander I & II: The Ultimate Strategy Guide, 1992

I personally take a little bit of issue with this quote, but he was talking about a different era, and a different kind of 2D. I believe that in many ways, true 3D is easier to work with than many forms of 2D games – particularly the “fake” 3D of isometric projection or other (common) projections other than strictly top-down or side-view. The real obvious reason (to me) is the difficulties of handling occlusion and attachment of graphical elements, and how much each animation must be repeated do deal with each character’s turn angle. The more you use 2D to “fake” 3D, the more complicated it gets.

To take advantage of modern graphics processing, 2D animations do make for more complicated texture atlasing, an additional technical complication not unlike the challenge of getting all the graphics to fit inside the tiny memories of older machines. Particularly now with the popularity of mobile devices, this is a complicated wrinkle. Many mobiles have a 1024 x 1024 pixel maximum on their texture sizes, but a single 128 x 64 character with twelve animations, averaging 4 frames per animation, with eight different “facings” in an isometric game, will use up half a texture all by itself. As each additional texture will slow down the game, that can be a challenge to manage.

Chris Roberts was talking about a pretty straightforward version of a 3D game – with objects in space, sphere-based collision detection, and very sparse environments. You didn’t have to worry about a character staying in touch with the floor or being constantly bounded by walls and more interesting obstacles. But the point still (mostly) stands… once you get your head around 3D – and especially once you get a good 3D engine to take the initial pain of development off your plate – it’s really not that hard to work with.

I’m a big fan of 3D graphics with 2D cameras. Or a mixture of 2D and 3D graphics. In my mind, you get the best of both worlds this way. From the perspective of animation and grouping / attaching objects to each other, it’s very simple – you do it once, and you are done for all angles and perspectives. Objects simply exist in space – you don’t have to go through all kinds of gyrations and special code making sure objects appear in front of each other when they are supposed to. Yet with the constrained camera view, you can greatly simplify the environment, you don’t have to worry about things like level-of-detail and extreme overdraw / depth complexity issues. Limiting the camera really helps. Plus, you can use some 2D “tricks” and simplifications within a scene that are a little easier to deal with than their fully 3D counterparts.

But the bottom line – why I wanted to include this quote – is that developers shouldn’t be afraid of 3D.

Filed Under: Quote of the Week - Comments: 8 Comments to Read

  • WhineAboutGames said,

    3D bad.

    Hate 3D.

  • Anon said,

    Good points but “real 3D” has its share of problems and deficiencies, too:

    – 3D topographics are great for realism (especially perspective and scale) but many 3D games are essentially 2D games that use 3D for eye candy, not offering real advantages to the player like, for example, FEZ does.

    – Highly detailed 3D models are a pain to create and often demand an additional team member (or more). There definitely is an entry hurdle and it is easier to fill up a screen with more or less static high-quality 2D tiles (see the countless beautiful RPG Maker products with custom tilesets).
    Some indies circumvent this by using ultra small textures (see FEZ), extremely simplyfied models (Minecraft, The Real Texas) or 2D sprites instead of full 3D models (FEZ, Fa’el – Beyond The Gate) to keep things manageable.

    – Animations in 2D games look inherently unrealistic and cartoonish. In a 3D game this leads to problems when you have highly-detailed human characters: It doesn’t fit.
    For a really realistic non-cartoonish 3D game you practically need motion capturing… (I’m exaggerating here of course but you get my point)

    – It’s way more difficult to (massively) change the landscape in a 3D game compared to what is possible in a (tile-mapped) 2D world, isometric or not.
    Many 3D engines seem to establish a landscape and “simply” insert objects into it (whether characters or structures) – and then modify them if necessary (movement, alteration, deletion). Only a few engines seem to be able to thoroughly destroy parts of the surroundings, like the first Red Faction game, for example. This could be a result of (the lack of) public acceptance and economical reasons, too.

    Everything has advantages and disadvantages and people shouldn’t be generally afraid of 3D engines but a 3D engine is a tool and should be used accordingly: Either because your project definitely needs one or because you can wield it well.
    Sometimes, though, a 2D with a pseudo-3D perspective is what you need or can do efficiently, as a single developer perhaps – perhaps even using a kit like RPG Maker – to implement what you want.
    If you are learning programming a 2D system may be a good start to not overcomplicate things, too.

  • Cuthalion said,

    Good thoughts, Rampant, Anon, and Chris Roberts. I went with a 2d isometric perspective and have indeed been encountering the issues you write about. It requires a lot of weird gymnastics to fake the 3d that way. The advantage is that we can use our art team’s abilities (2d, not 3d) and code it from scratch. But then, maybe I should have just grabbed an engine in the first place?

  • Rampant Coyote said,

    Maybe. I came to that conclusion after I spent so much time making the engine for Void War. 🙂

    There are pros and cons to both. They are tools, and which one you use can depend upon your skills (again, if you have 2D artists, that kinda drives design) and the kind of game you want to make. That’s fine. But especially if you plan on using an off-the-shelf engine, like GameMaker or Unity3D, the decision shouldn’t be made out of fear.

    As far as the limitations – like deformable environments and tile-based worlds… One word: Minecraft. Although I could also add “Baldur’s Gate”, which was a 2D game that probably suffered from the same difficulties to edit anything after-the-fact, due the luxurious and HUGE hand-drawn worlds.

    But I always get too wordy, so I’ll keep going. 3D can use tile-based pieces (or block-based pieces, for that matter) and do whatever the game needs it to do. But there are always problems with scene complexity to have to worry about.

    Back in the early days (and, to a degree, it’s still the case), levels using CSG (the old-school FPS games, in particular) had to build environments that deliberately constrained view distance in order to preserve framerate in first-person perspective. Allow a player to break through a wall, any wall, and the scene would fall apart and performance would fall to crap in no time.

    But all game development is about accepting compromises. If building or deforming worlds is important, you can build an entire world around that if you want. But it WILL mean that you either have to tightly constrain the amount of changes or editing that are allowed, or accept that your environments will not be as cool and awesome as your competitor’s who does not allow that. You can make it look like the latest Modern Warfare, or play like Minecraft, but you can’t do both.

    If you discard the first person perspective and constrain the camera to some kind of top-down-ish view, then there’s always more options.

    So again – yeah, they are both tools, with pros and cons to either one. I could agree that 3D is inherently more complicated than 2D, as it can be treated as a literal superset of 2D. But I don’t think it’s anything like an order of magnitude more difficult.

  • Anon said,

    > As far as the limitations – like deformable environments and tile-based worlds… One word: Minecraft.

    Minecraft is the exemption from the rule – it’s practically a voxel game with textures! 😉
    It’s main goals were creation and destruction of the landscape. I wish other, more story-oriented games would feature at least a tiny bit of that tech… (examples please?)

    Baldur’s Gate on the other hand is a good counter example as it has an indestructible landscape by design: It uses completely pre-rendered backgrounds (AFAIK mostly 3D models manually combined together) and only puts a few objects but no structures on top of that while the game runs. In this regard it’s a big step back compared to Ultima VII – even if it’s a beautiful step back. And it works well because of it’s beauty and the priority on story and character interaction including combat.

    > You can make it look like the latest Modern Warfare, or play like Minecraft, but you can’t do both.

    Exactly. Either get a “3D tunnel” with the best graphics like in nearly a first person shooters or get the abstract looking low-res game with the most freedom.
    Even games that don’t use a tunnel but offer more grounds like the Far Cry or Deus Ex series offer other gameplay elements but also no real destruction.
    I’ll never understand a game that offers me a rocket launcher but no craters in structures and the landscape…

    It ultimately depends on what you want or have to create.

    > I could agree that 3D is inherently more complicated than 2D, as it can be treated as a literal superset of 2D. But I don’t think it’s anything like an order of magnitude more difficult.

    I agree to that because you compare the *usage* of 2D and 3D engines (that’s why many teams now use Unity and the like) — and not programming a 2D engine vs. programming a complete 3D engine. The latter *is* magnitudes more difficult, at least if you do it right 😉

  • Rampant Coyote said,

    *Both* have gotten a magnitude or so more difficult than when I first started, if you want a feature-rich engine that takes advantage of modern hardware. Some parts are easier – I haven’t had to write any Assembly code since about 2000 or so (that was on the Sega Dreamcast). But a fully-featured engine nowadays – that’s a major chore.

    I used to recommend people write their own game engines – as it’s very useful to make something that works *exactly* right for your needs. But since the early 2000s I’ve quit advocating that… partly because it’s gotten so complex, and partly because the commercially available engines are just so nicely done and affordable for indies.

  • Felix said,

    Perhaps I’m misreading, but it sounds like you consider 2D a special case of 3D, to be obtained by wrestling with OpenGL’s orthographic camera. But back then 2D graphics were done by blitting. That was the “natural” way to do graphics on a computer, while 3D required a painstakingly coded software renderer. Are we so blinded by the everything-3D-mania that we’ve forgotten the fundamentally bidimensional nature of a computer screen?

  • Rampant Coyote said,

    Back when I first started doing 3D programming (with texture mapping), we had software rasterizing and blitted results to the screen… 🙂 It made it a lot harder to do stuff like “dirty rectangle” updates where we only updated a part of the screen for speed purposes.

    Nowadays, the actual calls down at the API layer are virtually identical (IMO) between a 2D and a 3D engine. What’s different is how they are used. But you’ve still got the same kinds of things to worry about.

    Collision detection? 2D *can* offer pixel-level collision detection, but that could assume a fixed screen size. Once you start stretching and scaling, you are back down to the same kind of polygonal / bounding box / sphere-based collision detection used in a 3D game, minus one axis of rotation and translation. Or you are using some other form of context-sensitive trickery that can also be done in 3D.

    Rendering? If you are using a strictly top-down approach with non-directional light, you can get away with just rotating the objects as you would any other polygon in a 3D game. Otherwise, you do it by 2D animation, by alternating between frames of animation. When taking advantage of the processing speed of modern video tech, that basically means treating it like a 3D polygon and moving its UVs around the texture map to a new image.

    So yeah – while the underlying low-level techniques may have changed substantially in 20 years, I do see a lot of similarities between 2D and 3D game programming. At the low level and at the high level, at least. There’s that middle-layer that changes a bit.

    It’s another story for art, of course.

    Am I blinded by that? I dunno, maybe. I’ve worked mostly in 3D for my whole career, with only brief excursions to the 2D side of the fence, and so I tend to view 2D from that perspective.