Home Unreal Engine

How are you organizing level design for ease of iteration?

godlike master sticky
Offline / Send Message
Alex_J godlike master sticky
Say that you are building some 3rd person game environments, something like this:

Which would be composed from a modular kit like this:

Say you pain stainkingly snap together these many walls, roofs, doors, etc to create a few buildings. Then later you want to pick up all those buildings, move them 10 meters left, or swap one out for another style... it is possible, you can group static meshes together, but it's really messy in the unreal outliner, and if you want to make edits to the buildings themselves, it really seems a lot easier to do that sort of thing in a 3d program.

So to me it seems that level blockout and replacing the blockout with actual art assets is a lot easier to do in 3d program just because you get much better organizational tools + better selection and editing tools. But the trade-off is that you don't get as immediate feedback about how it actually looks in game. It can be pretty fast, not a big deal to just export, wait half a second, import to game engine... but it's not ideal compared to working right in the game engine.

I also don't find any examples of enviro artist doing their work in 3d program like I am saying, so I am curious to hear anybodies thoughts / experiences? Are there good reasons to just put up with the game engines quirks and do blockout and level design in there? Any tricks to help prevent feeling "locked in" to your level design simply because iterating on it is a PITA?




Replies

  • poopipe
    Offline / Send Message
    poopipe godlike master sticky
    Ive built a couple of things over the years to dump content out from max and maya to unreal and I've come to the conclusion that it's very useful in very specific circumstances but it's generally best to work in editor for larger scale compositions.
    eg. When I'm blocking out  I'll build a whole house or floor of a building in max and just dump the fbx to unreal to run around it - editing brushes is far too slow and clunky for me.  I woudn't want to do a whole level like that though as it means going back to the DCC and changing the model to leave a bigger gap between two houses

    One tool it's definitely worth building is one that will dump instanced/referenced object transforms in max/maya to csv and load them into an actor as ISM/HISMs that reference existing static meshes in your unreal project. 
    I've found that really useful for more intricate compositions of modular pieces eg.buildings 
  • Alex_J
    Offline / Send Message
    Alex_J godlike master sticky
    Reasons working in the editor is preferred is because of just what you see is what you get? Like, immediate feedback, you have a clear sense of scale and what it looks like for player, you can immediate actually play it... is that right? Anything else?

    Thats the major problem I have doing the work in maya is that its easy to get in the zone, laying things out for a few hours, then you load into engine and like scale is a tiny bit off or something - then it can be a PITA to fix little things like that. Of course these are the types of problem a little more discipline in the workflow can fix too, but ideally we can just be in creative zone completely and little human errors don't have a chance to cause so much trouble.

    The editor tool sounds like could be helpful but unfortunately I don't have the chops for that sort of thing. I am really only a gameplay scripter and can do a tiny amount of things in c++ but mostly stick to blueprint.

  • poopipe
    Offline / Send Message
    poopipe godlike master sticky
    Yep - that's the benefit. Scale and sightlines are the biggest problem when you're working in maya/max - you just can't get a decent representation of what it's like to move around like the player does.  


    The tool is all doable in blueprints and fairly simple python for the maya half  (you're just dumping transforms for selected objects to a text file)
    the only tricky bit is deciding how to connect a maya object name to a static mesh in your project (simplest is to use string comparisions). 

  • Alex_J
    Offline / Send Message
    Alex_J godlike master sticky

    just want to make sure I understand how the tool works. The goal for it is so that you can position objects in Maya, then in Unreal we can match a uasset by name to take that same location, like this:

    In Maya I might position a couple bridges like so:

    In unreal, rather than place these by hand again, we can use the importer tool which is going to say, "given a location, position a static mesh actor there and select which static mesh by searching for a matching string within some directory"

    And so you'd end up with whatever your bridge mesh static mesh asset in unreal is at those same locations?

    And you mentioned instanced static mesh - I should read more about that, my only understanding is that basically an instance is less drain because GPU already loaded it so its ready to go, whereas if it was not an instance we have to find location each time for loading. So like for grass the system uses instances.

    For level geometry, any reason we wouldn't also use instances? They can use collision and you can interact with them using per-istance custom data. The only thing is, in unreal, I am not sure if we can manipulate instances in the same way as an actor. Like grab one, move it around, duplicate it, etc. Just ignore if these are basic 101 questions I haven't properly looked into it yet as I'm not thinking about optimizations for now. It may be something simple like just right click and convert to instances or something.

    And then with nanite it may be different considerations entirely.


  • poopipe
    Offline / Send Message
    poopipe godlike master sticky
    yes - that's what the tool would do. it's something you'd want for a building made of modular pieces rather than for a whole level though I think . To do a whole level  you'd basically need to wipe the whole thing out and recreate it every iteration or find some way to keep track of things you want to replace or move  - in all - massive pain in the arse. 


    ISM meshes are sent to the GPU once (per lod level) and instanced there - this means 10 of them uses 1 'draw call'. normal static meshes are instanced in memory but not on the GPU (so 10 of them is 10 draw calls). 
    HISMS are magic - same sort of idea but they can lod independently and still manage to instance on the GPU

    after 4.26 you can enable automatic instancing and it'll treat static mesh actors like instanced static meshes so you don't need to worry about handling instancing between individual props

    It's still worth doing the ISM thing for actors where you want to use lots of instances of modules because it guarantees they'll instance - the auto instancing isn't necessarily predictable


  • Alex_J
    Offline / Send Message
    Alex_J godlike master sticky
    thanks, yeah it looks like this could make for an easier workflow and is worth pursuing. I was poking around to learn more about ISM / HISM and I happened on this video and it looks like it solves the same problem:

    TLDW checklist:
    1. In Maya, export the selection and make sure Preserve Instances is enabled in FBX options
    2. In Unreal, use File -> Import Into Level
    3. In Import into level options, Hierarchy Type should be Create Level Actors.  Static Meshes panel shows only the static meshes while the Scene panel shows each instance.
    4. The actor that is added to the level -> delete its group, select all instances, then
    5. Actor -> Merge Actors -> Batch (this creates an actor in content browser you can reuse, with the ISM setup how you had them in maya)


    update: also linking video from same author that looks like its building similar tool as poopipe mentioned, just in case is needed later or helpful to anybody:

    It has a bit of manual outliner cleanup to do afterwards but I think the core part of the problem is handled: we can work with instances in Maya and bring that directly into unreal and maintain them as instances, while also getting the static meshes imported individually to the content browser.



  • poopipe
    Offline / Send Message
    poopipe godlike master sticky
    ohh - very nice. 
    I guess that came from the datasmith stuff. 

    problem solved then 
  • sprunghunt
    Offline / Send Message
    sprunghunt polycounter
    Using maya or something else is not necessary. Unreal has plenty of features that make it easy to make levels.

    There are folders in the world outliner you can use to organise objects. 

    There are also groups which lock a collection of meshes together.

    You can also parent objects to each other if you want. Just like in maya.
  • Alex_J
    Offline / Send Message
    Alex_J godlike master sticky

    thanks for reply, today I am starting to become a believer :)
    I decided to get some professional help so bought a course from Thiago Klafke and it's full of great tips for blocking out in Unreal. It's given me what I was trying to get - just a dead simple, intuitive way to quickly block things out, get a feel for the level, and have plenty of flexibility so there is not disincentive to make changes / experiments.  Basically, felt like I needed a standardized process so that I can just work, and not spend more time trying to figure out the best workflow.

    Mostly his methods center around using standardized kit and grid snapping - I don't think anything revolutionary, all stuff I understood somewhat but seeing somebody who has done it for 20 years of course is a lot more powerful than coming up with it all on my own.

    I still think there are going to be some portions that make sense to just model as they will be highly irregular (destroyed buildings, paths, rivers, etc), but I'm going to try to get as much as possible blocked out without leaving unreal first.

  • sprunghunt
    Offline / Send Message
    sprunghunt polycounter
    Alex_J said:

    thanks for reply, today I am starting to become a believer :)
    I decided to get some professional help so bought a course from Thiago Klafke and it's full of great tips for blocking out in Unreal. It's given me what I was trying to get - just a dead simple, intuitive way to quickly block things out, get a feel for the level, and have plenty of flexibility so there is not disincentive to make changes / experiments.  Basically, felt like I needed a standardized process so that I can just work, and not spend more time trying to figure out the best workflow.

    Mostly his methods center around using standardized kit and grid snapping - I don't think anything revolutionary, all stuff I understood somewhat but seeing somebody who has done it for 20 years of course is a lot more powerful than coming up with it all on my own.

    I still think there are going to be some portions that make sense to just model as they will be highly irregular (destroyed buildings, paths, rivers, etc), but I'm going to try to get as much as possible blocked out without leaving unreal first.


    Even destroyed buildings can be modular. Here's some examples from art station:

    For a destroyed building I'd think about getting off the grid and not snapping things together. To give it that natural irregular feel.

    Paths and rivers should be done using the terrain spline tools
    https://docs.unrealengine.com/4.27/en-US/BuildingWorlds/Landscape/Editing/Splines/



  • poopipe
    Offline / Send Message
    poopipe godlike master sticky
    I dunno ... 

    The reason I came up with tools for turning modular compositions (ie buildings) into single actors are :
    1 : you can store hundreds of instances in a single actor and not clutter the outliner
    2 : it's a lot less runtime overhead than having hundreds of separate actors in the scene 
    3 : you can duplicate a whole building easily and update all the duplicates at once by editing the source actor. 

    throw a load of those onto a landscape, rearrange them as you please and its a pretty flexible way to work. 


    In theory, level instancing in world partition is a better way to do the above - however, since world partition doesn't work properly yet I'd avoid it like the plague for at least the next 6 months .
  • sprunghunt
    Offline / Send Message
    sprunghunt polycounter
    poopipe said:
    I dunno ... 

    The reason I came up with tools for turning modular compositions (ie buildings) into single actors are :
    1 : you can store hundreds of instances in a single actor and not clutter the outliner
    2 : it's a lot less runtime overhead than having hundreds of separate actors in the scene 
    3 : you can duplicate a whole building easily and update all the duplicates at once by editing the source actor. 

    throw a load of those onto a landscape, rearrange them as you please and its a pretty flexible way to work. 


    In theory, level instancing in world partition is a better way to do the above - however, since world partition doesn't work properly yet I'd avoid it like the plague for at least the next 6 months .
    This is fine if you're making that kind of game. And for portfolio work. 

    But Modules should be the size that suits the gameplay space you want. So if you're making a lot of repeated buildings it's ok to have a module that's the size of a building. If you want lots of unique buildings then you need smaller modules. 

    And this is especially true if you want to work in a team with a level designer. If you don't expect the designer to change the shape of the buildings then they can be one actor. But if your level is supposed to have unique building shapes that are tuned for gameplay reasons then you need to allow for someone, who probably doesn't know maya, to edit the buildings somehow. 
  • Alex_J
    Offline / Send Message
    Alex_J godlike master sticky
    It seems that the conversion of a building that is composed of many instances to a blueprint actor satisfies a few needs:

    1. it allows us to easily duplicate and transform entire buildings (useful for larger scenes with many buildings)
    2. because a building is composed of instances, we can still select individual parts of the building to move around for tweaking (for instance a building that has been destroyed and had physics sim to layout the rubble - you can still grab individual rubble chunks and move them around if needed)


  • Lamont
    Offline / Send Message
    Lamont polycounter lvl 14
    Alex_J said:
    It seems that the conversion of a building that is composed of many instances to a blueprint actor satisfies a few needs:

    1. it allows us to easily duplicate and transform entire buildings (useful for larger scenes with many buildings)
    2. because a building is composed of instances, we can still select individual parts of the building to move around for tweaking (for instance a building that has been destroyed and had physics sim to layout the rubble - you can still grab individual rubble chunks and move them around if needed)


    Only issue is, without a tool, snapping editing Blueprints is a PITA , and having nested Blueprints might cause issues. I would actually use Level Instances over Blueprints for grouping certain asset types.
  • Alex_J
    Offline / Send Message
    Alex_J godlike master sticky
    thanks I'll take a look into Level Instances, haven't heard about that before

Sign In or Register to comment.