What is the best/most common approach to level creation? Do you design the entire scene/level in a 3d app of your choice and import the fbx in unity?
Do you create assets in the 3d app and put it all together in Unity?
Are there dedicated level creation tools such as Hammer or UnrealEd that work with Unity?
I’m having my share of problems using Unity as a level creation editor, so i wanted an insight on how the community handles these things.
Personally I build everything in a 3D package, UV map it, texture it, animate if required, then export in Unity. There my mate takes over and adds the code that object requires and makes it a package.
I like to whitebox everything in Maya and then export each asset separately for re-assembly in Unity. This requires a strict policy of “sticking to the grid” so each piece is assembled, carefully named and the pivot point is set so that the pieces can be “lego-ed” together. I start by exporting the white box meshes which are later deleted. Full modular construction like this can actually be quite fun.
This workflow comes directly from AAA like Hammer and Unreal3, Unreal3 in particular as this allows you to build each asset or modular piece for reuse (instancing) which provides unbelievable performance gains (or you can add more stuff :)). Not sure what the performance gains are in Unity when using identical or instanced geometry. I think I read something about this in one of the tutorials but I can’t remember!
The other nice thing about this workflow is you can update a single piece and every instance of it is automatically updated in your level. This allows you to build up your scene in layers starting with a simple whitebox or bounding box construction with accurate scale (some people use Sketchup for this!) then add details as you go. Each member of your team can check out pieces and build them out as needed. You’ll need a good source/assets control to handle this but pleeaaaasseee don’t get me started on that.
“You’ll need a good source/assets control to handle this but pleeaaaasseee don’t get me started on that.”
I want to hear you get started on that.
Yes, this sounds similar to what I do. My full flow is to work out in sketch form what the level requires, from that I get a rough asset list. The level is then built complete, in very rough but accurate scale in Silo, Modo or Maya. I tend to use Silo for everything that needs to be done quickly, Modo for more slow, accurate work, and am gradually forgetting about Maya for anything other than animation.
Once the low res level is built, that goes to the Unity guy who can use it as a proxy whilst he’s coding. I then break that up into smaller chunks (each level is designed in ways so that we can break it up into many parts) and build each one to the final required quality. After UV mapping and texturing, the final asset is passed onto the Unity guy. This way the proxy level gradually becomes the final level.
I’m going to start blogging our pipeline soon, I’ll post a link when it goes up. If I get done today what I need to the first post may go up tonight, but I doubt it.
Every piece built is made to snap to whatever we decide the base units are. Since you’re all familiar with Unity I’ll use Unreal3 as a comparison as it ever so smartly using 8’s as it’s base ( good processor math, no?) AND MOST IMPORTANTLY the Unreal editor allows you to quickly change between grid snap settings of 4, 8, 16, 32, 64, etc. For this reason everything we do will be based on as large an increment of 8’s as possible. I try to keep main building pieces so they snap together in 32’s or 64’s and smaller detailed pieces down to 8’s. Unity being strictly metric we can work in 10’s and 50’s.
So we learn that 16 Unreal Units (UUs) = ~1foot. First up is the generic wall section – in Unreal3 this is usually a 128x128 which is ~8x8 feet (forgive my use of feet!) or 256x128 which is obviously ~16x8 feet. In Unity my wall sections tend to be 3mX3m because it makes things easy and the ~9’ ceiling is quite popular where I live.
Each piece is built and textured in whatever program we like (I use Maya) and export with the pivot point centered and placed at the base. This allows us to load every “lego” piece into Unity (or Unreal), zero out the transform, set the grid to snap at whatever increment of 1 meter we like and play legos with our pieces. If you were married to the grid in your 3D app everything should snap together quickly AND allow you to create some unique and wonderfully modular creations as you go. You’ll be importing less geometry too.
It’s important to always work with grid snap on in your 3D app and always use grid snap in Unity for this system to work! If you get one piece out of grid alignment the system breaks.
I should add that it also makes sense to build a set of smartly tiling textures that can be applied to larger pieces (like 9mx3m) and you just tile your UVs in Unity. Less geo again.
I like the idea of the Unity asset server but don’t want to fork over the money. I’m used to systems like Perforce and AlienBrain but use SVN daily – none of these systems play well with Unity (meta data?). In fact, no asset/source control seems to play well with Unity which is unfortunate. I understand this is something they hope to improve in the future. Either this or bundle the asset server with each pro license! If this is incorrect please let me know – I’ll try ANYTHING at this point.
@jbuck - You have an interesting idea here, tho with this approach I see some problems (and have experienced some problems).
If you use instanced geometry assembled in Unity (sort of like building with legos as you said) - while you can build more complex levels quick this is true - then your game in a way locked in to being light mapped in UNITY - and edited in unity. cause to export the individual components in to a modeling program like MAYA you would need to rebuild them - as the version of .fbx that Unity uses I hear does not support instanced Geometry. (tho the new .fbx format may)
The process I am thinking about is to make the full level in one program and export a .fbx (so people who are not in maya can open the file in blender and reexport a .fbx). With this method you have a full level in one app - can combined objects in a smart way to reduce draw calls and have a file you can open in MAYA or 3DS and light map and change and reexport with out worrying about replacing things and get more on target results.
I see your method working great if unity could export one .fbx of your full level (as in the unreal editor that can export a .fbx of the leve) - with out this export ability some tasks becomes increasingly difficult as a level grows in size.