setstats
View Cart

CS:GO SDK Hammer Source "Abandoned House" Workflow (Part 1/5) - BSP Block In Tutorial

Category: Source: CS:GO SDK, Source: L4D2, Source: L4D1
January 19, 2017
Full Text Tutorial and Notes:

In this 1st part of 5 you will see the entire BSP block-in process of an abandoned house environment. This process can be applied to any game environment you create with Hammer Source.

If you want to see all 5 parts and start from the beginning click here for all "Abandoned House Workflow" tutorials.

I will be using CS:GO SDK version of Hammer Source, but any Hammer Source version will work with this tutorial including Team Fortress 2, Half-Life 2 and Left4Dead series.

BSP block-in is the first and most important development process that starts you off to create your game environments.

Let's begin.

Preproduction/Planning

Every time I start any level design or game environment project I go through "Preproduction Blueprint". It is something that I developed over the years to help me figure out exactly what I want to create before opening a level editor.

You can find out more about "Preproduction Blueprint" here.

The game environment idea is an abandoned house in the South (Oklahoma/Texas area).

I went through all 11 steps from "Preproduction Blueprint". I collected reference, I defined project purpose, features and created a top-down layout.

These two image references are what I'll be using to create the abandoned house.

Here is a top-down layout:

Once I had the preproduction completed, I'm ready to jump into the level editor.

First Thing You Should Do Inside the Editor

First thing I always do is establish a ground plane and insert a character reference for scale:

Next, I pick a part of the house to start with in order to establish correct architecture dimensions. This is one of the most important beginning steps you have to do.

Correct scale and dimensions are everything. Environment's proportion must feel and look "right" to the player. Getting these first initial measurements correct will drive the rest of the construction. If they are "off" or disproportionate then the rest of the environment will be as well.

The part of the environment you start with is up to you.

I begin with the first floor wall and window:

I make the wall height 128 units tall and 16 units deep. I estimate the size for width and window frame by looking over image reference and the player character scale inside the level editor.

The unit measurements you need to know to start with are outlined in this tutorial. These will help to maintain correct scale and proportions of your map.

Once I think this section looks "right" I proceed to expand and add more walls for second floor:

Compile and Test

With just a few brushes blocked in I need to see how the scale looks from player's point of view. I don't want to get too far into construction just to find out the house scale is too big or too small.

You want to catch any scale mistakes early, otherwise incorrect size will "domino" effect to the rest of the environment.

I surround the entire map with a hollowed out BSP brush and apply sky texture. This sky brush is used to allow for a quick compile so I can spawn inside the map:

You could use Cordon Tools to test sections of the map but I prefer big sky brush:

I insert a light_env and a env_cubemap:

I use the light_env values for color, brightness and direction from this page that Valve provided:

I plug in the values into light_env from de_inferno example:

Then compile and spawn in-game to see what I have so far. You can also see that I have expanded a bit more with BSP brushes to the side of the house:

If anything needed to be changed, I would correct it and test in-game again until everything looked "right".

Focus on the Layout First

Once I am happy with scale and dimensions of the house I continue to block in the rest of the layout.

I constantly look over the image reference and top-down drawing I did during preproduction to re-create the same layout in the editor.

I only focus on the walls (first and second floor), windows and doorways while being very mindful of the size and scale of the layout.

The size and positioning of windows and doors are taken directly from the image reference of the house:

I continue to duplicate brushes to finish the layout block-in.

Everything I create during this layout block-in is constantly being referenced to the player model in the map, top-down layout and image reference.

Use Developer Textures

I always use developer textures during BSP block-in process as it allows me to focus on the layout of the environment and not worry about which textures I should use. Texturing comes in the next part of the workflow, but right now it is all about the layout.

Open up Texture Browser and filter for "dev". Use any of the available developer textures:

Importance of Reference

I am constantly paying attention to image reference. First I am using image reference to help me with the layout of the house. Then I will use it to help me with texturing, detail, landscape, foliage and lighting.

I never create anything without proper image reference.

Window and Doors

I include doorways and windows during the BSP block-in process because it helps to define the structural layout.

At first I thought of using prop_static for windows, but couldn't find anything that resembled anything close what I see in the reference. So I decided to create windows with a set of BSP brushes. I would only need to create one window and then duplicate it to the rest of the house.

I create the frame and include the glass:

I then select all the brushes and tie them to a func_detail entity:

You do not want to have a set of small BSP brushes as brushes. You want to help Hammer Source minimize visleaves and compile times by turning these details into func_detail. Read more about func_detail here.

I would normally do this type of work during Detailing pass, but I needed to figure out the wall cut out size for windows, so it was something I spend time during the layout process.

Once I had one window created and tied to func_detail, I duplicated it to the rest of the house:

For some windows I had to resize and redo the brushwork slightingly to mimic the window size in image reference. I didn't need to break the func_detail window entity to change the brush work. I switched to "Solids" select option to modify brushes within a grouped func_detail.

For the door I used a prop_static:

I tend to focus using only BSP in this early stage of development but sometimes I use props to help me define the layout if needed.

Porch, Overhang and Roof

With the layout (walls, doors, windows) blocked in, I begin with the porch, overhang and roof. I pay close attention to the reference once again.

Porch with Overhang:

Roof:

I compile and test to see how it looks in-game:

Compile Often

Throughout the entire BSP Block-in process, I compile often.

Anytime I introduced a major or secondary shape to the environment, I compile. I want to see how it is going to look from player's point of view and to catch any problems early.

Secondary Shapes and Major Detailing

The rest of the construction consists refining geometry and adding major details. This included the columns, porch and house support, wall siding, side overhang beams and stairs.

Porch, house support and columns:

Wall siding:

Side overhang support beams:

Stairs:

I also added attic window detail to the vertical part of the roof wall and reworked detail on the roof:

I modified the rotation and position for side overhang support beams. This is an old house; much of the structure is not perfect and will be broken down.

Imperfections are very important to the environment and especially to abandoned places.

So rotate, reposition and misalign some geometry to make your game environments more real:

More fine detail will be worked on during part 3 of the workflow, after texturing.

Creating Interior

Last part of this construction process is the interior. I won't be creating a playable interior but the player will still be able to look inside the house (just not enter it).

I want to add some interior geometry. Also if I do decide to have playable interior, it will be easy to expand on it.

I added walls and doorways to define rooms on the first and second floor:

Overview of BSP Block-In Stage

Here is a quick overview of the BSP block-in I've done so far:

  • Establish scale
  • Focus on the layout using walls, floor, ceiling, doorways and windows (primary shapes)
  • Secondary shapes that add to the layout such as the porch, overhang and roof
  • Major detailing (columns, beam supports, wall sidings and refining geometry shapes)

VisGroups

Last, I added the house geometry to various VisGroups.

VisGroups allow you to display or hide visibility of BSP brushes and entities if they are placed into a VisGroup. It is a great way to help you see what you are working on by hiding the rest of the geometry from view. See this tutorial to learn more about VisGroups.

At this point I have a VisGroup for Skybox, Overhang, Roof, Windows, Detail-HousePanels, Porch and Interior.

On to Part 2

In the 2nd part of the "Abandoned House" series I focus on texturing.

5-Part "Abandoned House" Workflow Tutorial Series:

"Abandoned House" Workflow (Part 1/5) - BSP Block In Hammer Source Tutorial

"Abandoned House" Workflow (Part 2/5) - Texturing in Hammer Source Tutorial

"Abandoned House" Workflow (Part 3/5) - Detailing in Hammer Source Tutorial

"Abandoned House" Workflow (Part 4/5) - Terrain/Displacement and Foliage in Hammer Source Tutorial

"Abandoned House" Workflow (Part 5/5) - Beyond the House and Lighting in Hammer Source Tutorial

Updated & Revised - Preproduction Blueprint: How to Plan Your Game Environments and Level Designs

© 2008-2017. All articles on World of Level Design™ are copyrighted.
Not to be reproduced without prior written consent.