H1 Blender level guide - Beginner
This guide assumes you have already prepared Blender.
End Result -> The end product of this tutorial for you to examine and compare.
Spartan Model -> Spartan model that should be to scale with the ingame player.
Warthog Model -> Warthog model that should be to scale with the ingame player.
Everything starts with an idea. Sometimes, however, we realize that we've made a terrible mistake just like this page I'm currently writing. Hello you, and welcome to the Halo CE level modeling guide. In this guide we will be showing you how to go about with creating your very own level geometry for Halo CE in the 3D modeling software app known as Blender. This guide will include a completed version of our work as an example for you to contrast and compare but be sure to follow along.
If there are any images that you find difficult to read then try opening the image in a new tab to view it in full resolution.
For the sake of organizing your asset files you should consider keeping all your source files in the same level directory used to create the level (.blend, .tif, .psd, .jms, etc..).
Tool.exe will search for subdirectories in the level directory that contain the raw asset data for compilation and eventually package the resulting assets from the raw data into a map cache file that can run in Halo CE. Any assets that you compile will end up in the tags directory plus the local path to the raw assets in the data folder. For example the file below...
(HEK Install Path)\data\levels\test\dreamer\models\test.JMS
has the compiled assets outputted to...
(HEK Install Path)\tags\levels\test\dreamer\
When creating a level the scenario tag will take the name of the folder containing the sub directories and raw assets while the structure BSP tag will take the name of the JMS file itself. Compiled scenario tags can then reference other tags for use in the level.
The name of the level folder containing our sub directories MUST BE UNIQUE from any other level folder in the data/tags directory as will be explained later during the packaging section.
Let's first start by creating our very own level directory in the data folder. We'll call this level tutorial for simplicities sake but you can call it whatever you would like.
In the root of your HEK install find a folder named "data". If it does not exist then create it.
In the "data" directory find a folder named "levels". If it does not exist then create it.
In the "levels" directory find a folder named "test". If it does not exist then create it.
For our last step we will now create our first level in the "test" directory.
Your final path in Windows explorer should be something like this.
(HEK Install Path)\data\levels\test\(My Level Name)
Once this is done we will need to create 3 new sub directories in our level directory for the raw assets. The folders you will need are as follows...
Using the previous example the directory structure would look like this
(HEK Install Path)\data\levels\test\(My Level Name)\bitmaps
The name here is just for organizing your images. The folder containing your raw image assets does not need to be named bitmaps but it will probably help. Like you probably already guessed this is where you will place your .tif files to compile bitmaps tags from. Keep in mind that when we talk about bitmaps in Halo we are not talking about images with a .BMP extension. We are talking about a tag type called bitmaps that stores image data for use in Halo specifically.
Using the previous example the directory structure would look like this
(HEK Install Path)\data\levels\test\(My Level Name)\models
This folder name is something Tool.exe specifically looks for when compiling object meshes. Be sure that the folder is named exactly this. As you have probably already guessed this is where you will compile your example level from.
Using the previous example the directory structure would look like this
(HEK Install Path)\data\levels\test\(My Level Name)\scenery
The name here is just for organizing objects used for the level. The folder containing your scenery does not need to be named this but it should help. As you have probably guessed this is where the raw assets for any level specific objects can be placed. This folder should probably contain multiple folders with their own sub directories for model and bitmap assets.
As stated before compiled assets will end up in a path that mirrors the path of the raw asset but replacing the data directory with the tags directory. A packaged map file will take the name of the scenario tag and placed in your game's map folder.
In order to create a Halo level you first have to create a reference frame for all our geometry to be linked to. The reference frame is the origin for all objects in our scene.
Be aware that once you have started to edit the level using the Halo level editing tool known as Sapien you cannot move the origin of the reference frame. Changing the origin will cause all placed objects to move.
Any objects that are not a child of the reference frame are excluded from export. This helps the designer keep reference models for scale but not have to fumble around with deleting objects before export to prevent issues. This can also be used to remove objects from the reference frame to debug which object in particular may be causing an issue.
Keep in mind that in order for the exporter to write a JMS file successfully there must be a reference frame and at least one valid object in your scene linked to that reference frame. Not having any reference frames will return an error labeled...
No nodes in scene. Add an armature or object mesh named frame.
Having a reference frame but no valid geometry will also return
No objects in scene
In order to create a reference frame we must first add an object to our scene. The object can be anything that contains location and rotation data. In our example we will use a simple box mesh to represent the origin of our level. The origin of the mesh object will be what is used here so make sure it's center to your geometry.
consider placing the frame outside of the level you are creating as to not interfere with object selection or obscure geometry but this is up to your own preference.
To create a reference frame do the following:
We can now move the reference frame to it's new location. Your translation coordinates should read
The Reference Frame does not have to have a specific Material applied to it. The application of Materials in Blender will be discussed in a later section.
The following steps and example images will demonstrate the creation of a box that will serve as the tutorial level and will be utilized for all the subsequent tutorials. When creating or starting out a level try and keep the level centered at the origin. This can make the creation process much easier, such as when mirroring level geometry (such as team bases and other symmetric elements of the level).
The level must be a sealed. The level must be a contiguous structure that forms a sealed volume, the following rules are referred to as the Sealed World Rules:
There must not be any open edges, the component parts or geometry of the level must match (edges and verts). There are some exceptions to the rule which will be covered in later tutorials and examples in later sections, but basically, anything that is solid (has to have collision with the player and vehicles) cannot have any open edges.
The normals of the faces used to create the level geometry must face towards the playable area of the level or section of the level. The normals of the faces or polygons determine not just the face that will be rendered or seen by the player but also the surface to be used for collision and physics.
Additional information on the Reference Frame and Sealed World Rules and other technical rules or guidelines can be found under the Technical Rules discussion topic under the General Overview section under Multiplayer Level Design.
Bring up the properties panel and set it to the item tab.
Set the location of the box to X:
The dimensions for the Box can be manually set. The dimensions for the box that will be used are X:
Set the name of the object to "level".
While having the box selected change the context mode from object mode to edit mode
- The following steps will make the box satisfy the Sealed World Rules and will link it to the frame, in effect making it a simple Halo level in terms of geometry.
Flip all the normals for the box inwards, the interior of the box will be the playable area of the level.
Set context back to object mode if you haven't already.
Set the parent of the box to the Reference Frame (frame).
The last object you selected is considered the active object and will be the parent of all other objects you have selected when doing Set to parent object.
Before discussing and demonstrating materials and the application of materials to surfaces in the level, it is HIGHLY recommended that the Materials Overview section under the General Reference section be reviewed. The information contained in the Material Naming Conventions and Rules as well as the names of Special Materials and special Shader Symbols of this section will be referenced in the following examples.
The following section will show you how to create new materials and use them across multiple objects properly. We will also show how to assign a texture to a material so that it displays on surfaces that have that material assigned. This is not necessary for exporting or the compiling of raw assets but it should help you visualize the look of your level in your scene. The only data exported to the .JMS is the name of our material and the path to the texture it has assigned if one exists. The name of the material is the only important bit here. The name of the material will be the filename tool.exe searches for when looking for a shader tag to assign to a surface.
Images assigned to materials can be used to examine generated UVs from your scene along with just checking out the aesthetics of your assets. Special materials like +sky or +portal do not have any use for assigned images. Consider instead using the diffuse color in the material nodes to display a solid color for all surfaces that have that material assigned in your scene.
Every face for the game level must have a material assigned to it (except for the Reference Frame as previously mentioned).
Add a material named "+sky" to your box (level) object.
Add a material named "example_tutorial_ground" to your box (level) object.
This is where we will assign a texture to our "example_tutorial_ground" material. Your material will need to have "Use Nodes" enabled in order to make use of textures.
Assign an image texture node to your material.
Once the image texture node has been assigned you should now see file directory options instead of a diffuse color option. We will be clicking on the button labeled "Open" and browsing to our HEK install directory.
Navigate to the following directory
(HEK Install Path)\data\levels\test\tutorial\bitmaps
Select an image texture to use for your material. In this instance we shall use example_tutorial_ground.tif.
Go ahead and click the button labeled "Open Image" to set the selected image to be used by your material. This completes the texture assigning process.
Material names in Blender must be unique. Blender does not allow for any duplicate material names in your scene. If you have an existing material named "test" and create a new material in another object named "test" then that material will be renamed to test.001. If you need the same material name then reselect it from the material dropdown.
Be sure to also not use a digit at the end of your material name unless you are specifically working with shader permutations. A shader with a digit at the end will have that digit culled on import.
Be sure to keep your material names lowercase as all tags paths in Halo should not make use of uppercase letters.
We will now be going over how to apply your newly created materials to faces in your scene.
Select the box (level) object.
Change context mode from object mode to edit mode.
Make sure you are in face selection so that you can properly select the object faces.
Select all faces of the cube except for the bottom area.
Select the material named "+sky" from the materials list in the object.
Click the assign button.
Select the bottom face of the cube that we didn't assign +sky to.
Assign the material named "example_tutorial_ground".
You've completed this section. There are two ways you can see what materials you have applied to your object surfaces. Read the section here to see your options.
Materials that have "Use Nodes" enabled and either define a texture or use base color for a diffuse will be displayed in the
render preview shading. Materials that have "Use Nodes" disabled can use
solid shading and set the diffuse colors to differentiate materials but keep in mind that you will not be able to assign textures. You can switch between both to assign a diffuse and assign a texture when switching between solid and render. Most images in this guide will be using solid shading for rendering.
Now that we have assigned our textures we can begin to modify the UV coordinates for our mesh to properly display our textures. Since we only have one material that makes use of the texture in the scene at the moment we will only need to modify the UV mapping coordinates for the surfaces that have "example_tutorial_ground" assigned to them.
Follow the instructions below to begin.
Lets start by setting up our second window for UV mapping.
Go ahead and select UV Editor from the dropdown to switch the viewport to that editor type.
Now that you set up your scene there is one more detail you should be aware of. You may notice that if your viewport shading settings are set to this.
You will not have to switch to rendered viewport shading to see your textures but you have to deal with image alpha. If you do not want to see the alpha you can disable it in the newly created UV window. Move your cursor over your UV editing window and bring up the UV properties window.
This will let you set some specific settings for your materials. Make sure to have a surface that has the "example_tutorial_ground" material selected in the viewport on the left so that we set the settings for the proper material.
Change the setting labeled "Alpha" from "Straight" to "None".
Now that we can properly view our textures lets set up our UVs for the level. Have only the surfaces with the "example_tutorial_ground" material selected and do a quick unwrap.
Using the info you learned from here, run a smart UV unwrap. Just use the default settings for the menu that pops up like you see in the example.
The result from that should be something that looks like this.
A key difference between work in Blender VS 3DS Max is that Blender does not have a smoothing groups feature. For our modeling work in Blender we must instead make use of sharp/smooth edges with an edge split modifier to properly set up our normals. Please be aware that options like auto smooth or shade smooth/flat will not have any effect on the resulting JMS.
The purpose of assigning sharp edges is to make our polygon count seem higher than it actually is or just design more aesthetically pleasing geometry. Geometry with properly set edges can have drastic effects on a piece of geometry. See the following examples.
As you can see we have two cylinder objects that have the same number of faces but two different looks. The object on the left could be considered a pipe or a paint can while the object on the right could be a hex nut. Making proper use of sharp edges can get you the look you need for your objects.
Normals if it isn't clear is the direction the face or vertex is pointing in and directly affects the look of lighting and specular on our object. Lets go over how to set up some sharp edges for our level.
Firstly lets set shading to smooth so that we can see the effects of our sharp edges properly.
- Make sure you have the box (level) object selected. Now set shading to smooth
The result should look something like this.
Now that we finished our work we can begin to mark the edges as sharp.
Do not worry about sharp edges for materials that are considered special materials such as +portal and +sky.
Follow the instructions here for setting up the sharp edges on your geometry.
Now to see the results of our assigned sharp edges we will need an edge split modifier for our object. The next section will go over what you need.
Lets go over how to assign a modifier if you don't know how real quick.
Review the information found here.
You will want to use these settings for your newly added edge split modifier.
We are unchecking "Edge Angle" so that we don't split edges automatically based on degrees and only split based on what we have personally marked as sharp. Due to the level being a cube with only a flat plane as the ground for our level geo this option makes very little difference at the moment. This will be more important as we start to sculpt our geo in later sections to have hills and pits.
The modifier can also be permanently applied from this area. Simply click on the dropdown area and hit apply like so.
It's probably a good idea to make frequent backups as you make progress just in case. Follow the instructions below to save a scene.
Go to File dropdown in the top left and click it.
Click on the menu item labeled "Save As".
A window named "Blender File Dialog" should come up. Navigate to
(HEK Install Path)\data\levels\test\(Level Name)\modelsand set the name of the blend file to the name of your level. You'll remember that we created this directory in the creation of a level directory section
Click on the button labeled "Save As".
You've now saved your level. The file as is will be used for future sections in this tutorial.
Once you've gotten to this point your level is ready to export. We will go over some more in-depth features in the next section to help you design a more interesting map. If you do drop off at this point then keep in mind that any following sections will show the tutorial level in a different state than it was during the last section.
Thanks to the following individuals for their research or contributions to this topic:
- General_101 (Writing this guide)