View Cart
Category Tutorial TopicsLevel DesignUnreal Engine 4UDKCryEngine 3 SDKGame Modeling: MayaCounter-Strike: Global OffensiveLeft4Dead 1 and 2Time Management and ProductivityGame Environment Art+DesignGetting StartedBrowse Full Tutorial List

Hammer Source Based Modeling in 'Propper'

Category: Source: L4D2, Source: L4D1
February 18, 2010

Following tutorial was written & contributed by Andrew Searle 'Oilcake'

From Wiki:

Propper is an edited version of vbsp that outputs a model instead of a bsp.

Many mappers need to make props for their maps, but don't want to learn a separate modeling program. This tool allows them to make models in Hammer in a one-step process. It's also useful to modelers who work with mappers. No other method of .vmf export keeps texture mapping intact, or auto-generates a physics mesh.

So, let's have a look at Propper. I've successfully used it already to compile the CN Tower skybox model for Escape From Parkdale. Once I had it running, that was particularly easy because I used only one texture (tools_black). Well, two really, but NoDraw is ignored, so it doesn't really count. We'll start in the first part of this tutorial with the same type of situation (which should work out fine...) and then move on to multi-textured & physics models (which may not!) in further sections. The other main issue I can see coming up is that Propper 0.22 doesn't yet support L4D/L4D2, so textures used from those games that aren't used in prior Valve games (ie. CS:S, which is what I'll use here) will almost certainly be an issue. We'll talk more about that later on, as well. For now, let's get you making basic models with Propper!

Other than giving a massive thanks to cfaust (the author of this wonderful little piece of work!), the first thing we need to do is go here to download Propper.

I would suggest that everyone following this should read that entire page before continuing. For that matter, the main Steam Forums thread is about 6 pages worth of posts, and worth a good read, too.

There are a lot of answers to be found in all that reading, but it can be quite problematic to get everything working still. This tutorial will be similar to the official one on the Wiki, but I hope to go into further depth to clear up any fuzzy areas... Anyway, now that everyone has read all that (haha!), we can go ahead and download!

Here's what you'll see when you open the .zip:

The HTML file is just a copy of the Wiki page. In each bin folder (ep1 and orange box) you'll find 2 files: propper.exe and propper.fgd... I installed both versions:

EP1 Files go here:

C:\Program Files\Steam\steamapps\steamid\sourcesdk\bin\ep1\bin

Orange Box files go here:

C:\Program Files\Steam\steamapps\steamid\sourcesdk\bin\orangebox\bin

Fire up Hammer. I'm using CS:S. You may want to stick to the EP1 version of Propper for the time being, as there have been reports of glitches with Orange Box. Version 0.22 may have cleared those up, but I haven't tried yet.

Go to Tools/Options...

Under Game Data Files, you should NOT yet see what I have highlighted there. Click the Add button to the right. Select propper.fgd. If you can't see propper.fgd in the list, then you didn't put your original files in the (ahem) proper place back at the beginning. Hit OK or Apply at the bottom. Restart Hammer.

Now, create some geometry that will become your model. For the first example, I've made a quick building for a skybox, done in tool/black only. Make sure you use NoDraw for any brush faces that won't be visible! Here's the building I made:

There are three included entities that we can add next, depending on what we want to achieve. They are info_prop_options, info_prop_physics & propper_skins. The author, cfoust, has this to say: "The first, info_prop_options, is strongly recommended (though the model will compile without it)." I'm gonna go ahead and say definitely use it.

There it is! Now let's go through all the options. A lot of this will affect where files end up and whether Propper will run properly at all, so pay attention!

Name is unused by Propper, so ignore this.

Origin (X Y Z):
I like to set this to 0 0 0. It seems to make everything happy. It may mean your info_prop_options is entirely or partially inside your model. I'm sure you can find it... Note: After playing with this a bit, I think it's best to start out with ) 0 0 0 settings. You can change these later and see how it affects your final product.

Model Name:
Path is relative to <YourMod>/models. I have mine set to props/bldg01_skybox, therefore my finished model files (named bldg01_skybox) will be saved to this folder:

C:\Program Files\Steam\steamapps\steamid\counter-strike source\cstrike\models\props.

Whatever folder you decide to save to in your models folder, I'd suggest that you make sure that the folder exists prior to running Propper. It really seems to want everything to be in place before it runs, especially for the first time. More on that later...

Material Path:
Path is relative to <YourMod>/materials. This is where the model's textures will end up. You MUST make sure this folder exists prior to running Propper. I have mine set to models/props/bldgs_skybox, so my finished model textures will be saved here: C:\Program Files\Steam\steamapps\1iopn\counter-strike source\cstrike\materials\models\props\bldgs_skybox. Again, make sure this folder (whatever it is) exists before compiling!

From gulliwog's post on page 4 of the Steam forum thread: "Firstly, the first time I ran propper I got this error; cant open counter-strike source/cstrike/materials/models/props/generated_prop/<filename>.vmt becase it did not exist, so I had to create the path and empty .vmt.". This happened to me, too. Only the first time you run the program, oddly, but chances are the first time you run Propper, you'll have to hand-make this .vmt... Hopefully this is clear to people. Easiest way is to have VTFEdit ( ) installed.

Open it, click new, and save as whichever file it says was missing, in the proper location. In this example, I would have had to hand-make this file:

C:\Program Files\Steam\steamapps\1iopn\counter-strike source\cstrike\materials\models\props\bldgs_skybox\toolsblack.vmt.

Just a blank .vmt will do as a placeholder, it seems.

Used to scale the model up or down by this factor. Normally, you would leave this set to 1. Because we're making a skybox model here, I'm going to set it to 0.1, so it will end up 1/10 the size. You can have fun messing around with this, making things anything from tiny to huge.

Surface Property:
Use this to set the physical properties of the model. It will affect impact sounds, decal debris and weight for physics props. I haven't done a lot of testing with this yet, but pick whatever seems best for your model. I left mine as the default (no_decal) for the skybox model.

Concave Collisions:
From the Wiki: "Used to make a concave collision model. If you choose no, the model will be 'shrink-wrapped'." If you read the Steam forums, you'll see that there are still some bugs here, I think. If you have problems with physics models, you can always fake a collision mesh in Hammer with clips.

Produce Collisions?:
Set this to Yes to make the prop solid. Because we're making a skybox building here, and nobody will ever run into it, I've set mine to No.

Smoothing Mode:
"Determines how vertex normals are computed for lighting." Haven't messed much with this yet. Just left it at the default, auto-smooth.

Source Folder:
"Determines Where you want to keep your .qc and .smd files. The final directory will be <sourcefolder>/<modelname>. Make sure this folder exists before running!" This one screwed me up a bunch at first. Default is C:\propsource. I used that, because Propper seemed to like it. I'm assuming you can put this wherever you want... I think this also uses the Model Name setting, as well, because when I leave mine set to C:\propsource, it actually saves them to C:\propsource\props... In any case, it works this way. Go nuts and try out other locations! I, so far, have been too lazy. Either way, this folder MUST be created before compiling with Propper.

Smoothing Threshold:
"If auto-smooth is enabled, Edges flatter than this angle will appear smooth. Pick from 0 to 180." Default is 45. I haven't messed with this much yet. I imagine it does things. Play with it.

Snap To Hammer Grid:
"Causes every vertex to be snapped to the nearest grid point." This can cause issues if you have it set to yes, and have been playing with vertices a lot. Especially with smaller brushes. Best bet for weird shaped models is stick with No.

Welding Threshold:
More vertex-related stuff I haven't messed with much. Play with this as you go. Whatever happens, I'd suggest making some really simple models first before getting into highly complex things. When I say my first model was the CN Tower one, I'm lying. It was a box. Hint: Make a box first. Haha.

Model Origin:
From the Wiki, yet again: "The model's origin point defines how it is lit and is how the prop is positioned in a map. Auto-center puts the model's origin at the center of its bounding box and is recommended for physics props. For static props, put the origin somewhere that lets you align the prop easily."

There were some issues with model placement and origin on the Steam forums (that link above). I think the best idea is to place your model around the center of the grid in Hammer, such that wherever 0 0 0 is will be the origin of your model, then select Use Map Center. Hope this makes sense.

As long as you have this set to Use Map Center and your model properly positioned, it should work. Not sure on progress on the bugs using the other options (Auto-center & Use this entity's origin), but use at your own risk. Doesn't mean you shouldn't try! Just means I haven't yet...

Automatically Compile:
"By default, propper will run studiomdl to compile the prop. You can disable this.". But don't, unless you're an expert who doesn't need this tutorial anyway!

Fix Up Materials:
"By default, propper will make a copy of any material used in the prop and make it valid for use on a model. You can disable this.". But don't, for the same reason as above.

Don't Warp Displacement Textures:
"In Hammer, when you move a displacement point, the texture moves with it. If you pick yes, the texture stay in place.". Default is No. Unless you can think of a really good reason to change this, don't.

That's it for the info_prop_options entity!

Before we move on, let's talk about info_prop_physics & proper_skins.

From the Wiki:
"If you place this entity in your map, Propper will produce a physics prop."

I'm not going to get into physics props or multiple skins in this part of the tutorial, mostly because I haven't tried anything yet. Part 2 will deal with multi-textured, multi-skinned and physics models.

Now that we have our model ready to go and our info_prop_options all set up, it's time to find out how to compile!

Propper is run through Hammer by building a new Configuration in the Run Map dialog (F9).

Before we do this, let's make sure our file is ready for compile. The ONLY things that should be visible at compile time are the brushes that will make up the final model and the info_prop_options.

Here, I'll refer you to the author's Tips section near the bottom of the Wiki page. Read this as many times as it takes to understand everything. Two that are particularly relevant here:

"You can use visgroups to hide brushes; They will be ignored by Propper."

Do this if you have more than the model brushes present in your file. In the example above, you can see that I have a skybox surrounding the model (which is particularly useful when working in tools/black!). When compiling, that needs to be turned off. It's probably good to mention this here, too:

"If you make any brushes func_detail, they will be non-solid in the finished prop. Using any other entity seems to cause problems, however."

So, world brushes will be solid in the final model, func_details won't. And don't use any entities other than the 3 listed above. For now, you should have only the one. Last point for now? Optimize your model geometry as you would anything else...

Optimization FTW.

Well, seems we're ready! Press F9 or Run Map from the Hammer File menu. If you're not already in Expert settings, click Expert at the bottom left of the window. Click Edit, just to the right of the Configurations drop-down menu.

You will NOT see the Propper choice like in this graphic yet!

Click New at the top right. Name it Propper. Click OK.

Now, enter the settings you see here:

Under Command, enter propper.exe

Under Parameters, add –game $gamedir $path\$file

Make sure the box is checked under Compile/run commands there at the left.

Press Go!

If everything was set up correctly you just made your first model! Congratulations!!! If not, you're going to need to read all this again, and figure out where you went wrong. That would suck. Hopefully it worked for you.

So, based on the instructions above, and my example, here's where all my model files ended up:

In the C:\propsource\props, there are 2 files:

bldg01_skybox.qc & bldg01_skybox_ref.smd (These files, will of course, be named whatever you called yours...)

In the C:\Program Files\Steam\steamapps\steamid\counter-strike source\cstrike\models\props folder, you'll find:

bldg01_skybox.dx80, bldg01_skybox.dx90, bldg01_skybox.mdl, bldg01_skybox.sw, bldg01_skybox.vvd and

In the C:\Program Files\Steam\steamapps\steamid\counter-strike source\cstrike\materials\models\props\bldgs_skybox folder, you'll find toolsblack.vmt...

Now, in Hammer, you can select the Entity Tool, place a prop_static, choose your model (search for the name in your model browser) and there it is...

And in-game:

MMmaster did a little research and posted this on the forums. It explains why you would want to use models as opposed to using world brushes.
"Geometry of static meshes is cashed on your video card and multiple instances of the same mesh don't stress the hardware as would do the same geometry via BSP. Today's graphics accelerators can process (transform) static meshes very fast not to mention that cashing means lower GFX memory consumption. BSP is generally not optimal for detailed modeling and it's also error prone while static meshes don't have any of these weaknesses."
Static meshes are cached into video memory, and so can be displayed many times with little extra overhead. Static meshes are a list of vertices stored once in the video memory (as opposed to "once per frame"), so drawing many copies of one static mesh is a relatively simple operation. When the static mesh is to be displayed on the screen, the engine only has to tell the video card where (and at which size, rotation, and with which textures) to do it.

"Anything that needs to be repeated over and over, be lit dynamically or be highly detailed is generally better off as a model."

Following tutorial was written & contributed by Andrew Searle 'Oilcake'

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

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