Thursday, September 14, 2017

How to Graybox / Blockout a 3D Video Game Level

from de_crown, by FMPONE and Volcano

UPDATE, 11 NOVEMBER 2021: this blog post is OK, but I would recommend reading the "Blockout" page in my free online work-in-progress level design book instead.

ORIGINAL POST:

While planning a level design class, I googled for a good article about blocking-out or grayboxing a 3D level design prototype. I didn't really find one that actually went into "how" you might actually go about grayboxing a level, so I guess I have to write it.

Grayboxing is a level design practice where you build a rough block-out version of your level using blocks (usually gray boxes) so that you can iterate and test the layout as soon as possible. Almost every 3D game engine has some sort of box primitive tool -- if you know how to use that, then you can graybox.

Before you graybox, you must make sure you've established a general game design direction. You should generally know how this level might fit into your game or workflow. There's no point in grayboxing if you don't even know what the player should be doing, or what this level is supposed to convey. Is the level supposed to be easy or hard? Does it focus on combat or non-combat? Should it feel scary or safe? Level design must always exist in the context of a larger game design, or else you're just wasting your time.

Then, open up your 3D game engine, and let's start laying down some boxes...


For this example, I'll be using Unity, but there's no reason you can't do a similar thing in Unreal or any other 3D toolkit. Whatever you use, try to choose an actual game engine, and not solely a 3D art tool like Maya or SketchUp, because you'll want to be able to walk around in the actual space in-game.
  1. It helps to sketch something. Like, even a 1 minute scribble on a napkin will help you plan your level. You don't have to follow the plan, it's just to help your ideas flow better.
  2. Add some kind of basic floor plane to your scene. In Unity, I like placing a wide but thin cube at (0, 0, 0). It helps me get started with laying down some geometry.
  3. Add a scale reference. You'll want something that's roughly "humanoid sized" to help you figure out how big to make walls / how wide to make hallways / etc. Ideally, you use some sort of actual 3D character, but in Unity I often use simple capsules resting on the floor. By default, these capsules are 2 units tall and 1 unit wide.
  4. Add more blocks. When you have one wall placed down, duplicate that wall object and rotate it to make another wall, very quickly. Keep cloning objects and rearranging them until you have a room. Try to stay fast and loose, and spend only a few minutes on this. Unless you're working with a BSP-based engine like a Quake or Source Engine, or with a specific modular kit like for Skyrim or Fallout 4, then don't worry too much about aligning things to a grid.
  5. Test as soon as possible! Add a player controller object so you can walk around, and test as soon as you have a room ready. If you have NPCs, powerups, items, etc. then place some of those too. As you play, ask yourself whether the spaces feel "right" and whether it will support the gameplay you want. (e.g. is there enough cover for a cover shooter, is there enough strafing space for an arcade shooter?)
  6. Based on the results of your playtest, keep adding to your level and iterate. Don't forget to add more humanoid scale references in your new area, and make sure you regularly fly around the 3D viewport and keep checking different angles / line of sight. Adjust and fiddle as necessary, but also don't fixate too much on one area.
Notice this isn't a full level! As soon as the level feels "substantial", I want to start testing already.
If you want to learn more about "graybox theory" (no one calls it that, I just made it up just now) then I recommend taking a look at level-design.org's resources on "Composition in Level Design".

WHAT NOW?

When you feel like you've figured out a substantial part of your level (or your forehead is bleeding from all the stress) then start art passing.

Sometimes you'll want to just retexture your blocks, and add detail meshes on top -- other times, you'll want to rebuild entire sections with modular meshes while keeping the same general dimensions. Some artists even prefer to export the graybox to a file, and import that base geometry into a 3D tool like Maya or Max to remodel everything. Be careful if you do this; that means if you want to make any design changes in the future, then these changes will probably have to be done in Maya, and you will lose a lot of the benefits of using an actual in-engine level editor tool for blocking out the space.

Communication is also very important if someone else is doing the art pass. Which walls must absolutely stay the same dimensions, and which walls are more cosmetic? Is that gray block supposed to be a tree or a bush or a car or a dumpster? You have to make sure to document your intent. No one can read your mind.

A quick paint over of my own graybox. I'm not a good painter, but you get the idea!!
Paint overs help a lot here! Try taking a screenshot of your graybox, and then paint over that screenshot in Photoshop to create a mockup of how the level might look. (Or if you have no idea how to paint, then have your environment artist do it.) These visual guides often help to synchronize communication and expectations in a design team. The paintings don't have to be great or polished, they just have to work.

(If neither you nor your team can paint, then the next best thing is assembling a moodboard of reference material. Which real-world locations should we model this level after? What time of day, what kind of mood? Google Images can help you a lot here.)

As you art pass and playtest and iterate more, expect your layout to change. You may have to throw away some work at some point. That's OK, that's part of the process -- but the whole point of the graybox / blockout process was to help you get something down in the game, without worrying about how it looks.

Good luck and have fun!