Level design with static meshes

Greetings fellow devs. I am currently working on a project. I need some advice/help on creating a level technically. I haven’t built maps since Dark Forces II which was in sector/negative space based engine. I’m very familiar with creating static meshes and I am also somewhat familiar with BSPs. I have opted to use static meshes for the entire map. Also I need more than just flat surfaces. I need curves, hills, rounded half pipes and other concave shapes (which is why I want to use static meshes entirely).

I started creating my map in 3ds and came to the conclusion that creating collision meshes for this is going to be very time consuming. I did find the UCX collision tool for 3ds but the problem is that creates box meshes which may be fine for some level details but for the actual map it’s important the collision is very accurate. This issue has sort of put me in a rut in my productivity as I’m just not sure what to do. The task of creating these collision meshes by hand is daunting.

I’ve tried building an entire map in an external program and importing it in section by section, mesh by mesh and you know what? Totally NOT worth the time and effort. It takes much longer to do it that way because it really is a cumbersome task navigating around in the modeling program, UVing/texturing each and every single surface, dealing with collisions and having to reimport large sections in everytime you need to test the map.

I prefer using BSP to build the majority of areas that the player can traverse, including buildings/interiors, and fleshing out the details using staticmeshes. This way, you don’t have to worry about collisions, texturing your surfaces is a breeze and you can test and make changes to your map fairly quickly.

I read on the UE4 documentation that BSP’s slow things down and that you should replace them with static meshes eventually.

You can easily create a collision for your meshes in the UE4: (third way)

Learning a 3d editor is another addition to the learning curve and since I’ve been using 3ds what seems forever I personally find it easier to work in mesh than with brushes.

The only thing that would make life easier is if UE4 supported <Send To> import :wink:

The way it’s usually done is :

  1. block the level out in BSP, test size/scale/distances.
  2. test things like basic lighting, pickups and game mechanics
  3. Add base static meshes and start of the beautification of the level and material passes (this is a iterative process).
  4. Finalize mesh placement and materials, add finalized lighting.
  5. Add particles, atmospherics and detail lighting.

The entire level can be done in BSP or meshes, take a look at some of the demonstration levels/content examples as to how they are done. The shooter game is a good example of this, with both an entire level made of static mesh and also one which is 50/50 mesh/bsp.

For a mesh, you can set the collision to be “use complex as simple” and the entire mesh becomes collidable at the triangle level (I think, I’m new to all this stuff, but I think that’s what I read someplace)… It’s supposedly not efficient (compared to collision meshes), but if you only use it for floors (would make navigation accurate), it might not cause too many issues. If nothing else, you just might have to do more streaming of levels than initially desired?

Indeed. What a bummer. Guess I better get crackin.

This sounds like something im interested in. Thanks, I’ll have to look into this.

I would not recommend using “complex as simple” as a final solution. Unless things have changed since UE3 it’s there for very specific cases and to make your life easier during initial block out so you don’t have to worry about collision when you’re just testing levels and pieces of geometry, and collision can be very performance heavy (although it may ultimately depends on your game).

Generally the workflow with static meshes is to create a few levels within an architectural style and then break those levels down into reusable pieces. E.g. you might have a 200x200 unit floor piece that can be used dozens of times and hopefully in many different ways, and a 20x200 trim piece that can add a little more detail to it or cover seams.

And typically creating collisions should be relatively quick, you want to use as few shapes as possible and keep them as simple as possible.

This. Hourences has some fantastic tutorials showing this technique in detail, but essentially it’s the most efficient way to build levels for the engine. Create and import a limited number of modular meshes and reuse them in an almost infinite number of ways to build your level from within the editor.

Agreed, still don’t see why everyone doesn’t do it this way (bsp for floors and walls). Sure you might end up with a few extra polys but not enough to make any real difference to the overall poly count. They are already uvd fine, can just import your textures and make some materials and bam add it to the bsp. If you use the box bsp it’s already set up to tile your texture a variety of ways. I suppose if you already have assets you use over many projects and are used to doing this way, but I’m starting to think it’s a little odd to be suggesting people new to game design to avoid bsp like the plague like many seem to be suggesting.

Ok, great. That sort of confirms an idea I had in my head as well. Thanks for the response.

If you’re just starting out then, absolutely, the most important thing is that you’re making something and learning in the process. But if you’re trying to learn how to create shippable content, and make things easier on yourself in the long run, then it’s often more important how that content is created then what it is.

Staticmeshes have a number of advantages over BSP, the two biggest being the performance (especially if you’re targeting lower spec platforms) and speed of workflow. Once you have a solid bank of staticmeshes to work with you should be able to work faster and with more consistent results.

And performance doesn’t just come down to collision or poly count. It can get a lot more complicated then that and staticmeshes give you good scalability since they are instanced, can be occluded, loded, culled, etc (at least I assume this is still the case, I haven’t touched on performance yet in UE4).

Regardless I think the workflow advantages alone make it worth learning even if you still choose to use BSP in some instances.

I have to disagree with this point. I see the performance boost as being negligible unless the map is ridiculously massive and everything were built out of BSP which it never should be anyway. As for speed of workflow, it just comes down to preference I guess. For example, I find it faster to cut windows and door frames by simply placing additive and subtractive BSP’s together than to model a wall in another program (maintaining quads) fiddling with the poly’s to make a hole, applying UV/Unwraps to it, then exporting and importing it into UE. Not only that, but if you needed to move that window or doorway a few units to the left let’s say, you’d have to go through much of that process again whereas doing it in BSP, you would simply move it to where you needed it and be able to test it right away.

Sure but that mainly applies towards meshes that should be repeated such as cars, foliage and any other meshes that would benefit from this. If you have the interior of a building as a play area (I mean walls/floors etc, not decorations) it wouldn’t really be instanced elsewhere in the map unless you’ve constructed the hallways/floors and such as modular pieces. I find that the modular method opens you up to a slew of problems with lighting/shadows/alignment and flexibility that could have otherwise been avoided with BSP.

I guess at the end of the day it all boils down to what feels more natural to you but don’t be scared of BSP for your floorplans.

The tool is available to use and you can use it in whatever way you want. If it works and does what you want it to then go for it but I think it’s a bit of a stretch to claim it’s just personal preference.

Arguing performance by saying that in some situations you won’t see any real difference doesn’t prove much. If you just build a cube out of BSP or out of meshes and run it on a modern PC then you probably won’t see much difference. But when you’ve built a fully polished level trying to run on last generation consoles or hardware it’s a different story and having tools available to properly scale content without rebuilding it is pretty handy.

Similarly arguing workflow because in a specific example it’s quicker to do something doesn’t really say much about the overall workflow. TheFoyer specifically said complex shapes are desired and those are almost impossible to create with BSP. So unless you have nothing but straight or angular walls, floors, windows, etc, then you’re going to spend a lot more time trying to create using BSP.

The fact that you’ve experienced a “slew of problems” is not a reflection on the method when entire games are being shipped with levels made only of modular meshes.