I am trying to build the location for an active harbor (medieval theme) in Unity. My problem is that I am not a 2D or 3D designer, I am programmer forced by his slim pockets to do all work by himself. I am not entirely without artistic skills I can model static objects quite well but I am lacking the vision as a whole for what I am doing.
My problem is at this point how to create the harbor:
Do I model the whole thing in external 3D tool and import it in unity?
Do I model each house separately (or even do modular pieces to create a great variety of buildings) and create the city in unity?
When creating big objects like buildings, what is best to have: 1 material with all the details baked in 1 texture or several materials with seamless textures?
At this point I am thinking to create the harbor base (streets, stairs, green spaces, piers) in one piece. It seems more easy to do this than trying to align the buildings to the terrain.
What I am looking for are advices on best practices on level design, ways of correct approach for this.
PS to avoid useless discussions about my skills here is a prop modeled in an afternoon
1: Do things seperately. Makes rendering and editing quicker.
2: Modular pieces, but that doesn’t mean generic. You can still make things look varied with modular pieces.
3: If you’re going for AAA graphics, more than one material is necessary. But if you’re going for low-res items, a single material with atlassed texture will be fine.
I’ve tried many a time to produce a city in Unity- it’s incredible tough.
You can can do them separately or in modules, really, that is a design choice, though modules take less resources. But even with separate parts, you don’t need to export them separately. You can lay them out, set up your streets/buildings/etc all in Blender (or any other app). When you add the file, it will come in as one big prefab, but all the elements are separate objects. It is much quicker and easier to do all the alignment and tweaking and stuff in a 3D app and then bring them in all in place and ready to go.
It is, and that is good way to go. Though, when they come in to Unity, it will essentially be a prefab with separate parts. You can bring it all in and once, and still tweak in Unity if you want to.
Also if your scene is pretty much fixed and some parts aren’t re-used, once everything is final, you can always optimize by going in and removing geometry that isn’t ever seen by the camera.
There really isn’t any single best practice for building levels, mainly because the needs of game can vary depending on many factors. There are some best practices for target platforms, engine, pipeline and tools.
But I would always suggest to build in a way that gives you the most flexibility down the road with the least amount of pain. Imagine if you have to replace a building, or say change all the streets to dirt from cobblestone at the last minute. Is there a way you can retain the flexibility to do that easily? That is how I approach nearly everything I build.
You didn’t mention if this was for mobile or desktop. There are a lot of little tricks and considerations to squeeze better performance out of mobile. For example this : (which looks very cool BTW… it has that great robustness that is common to structures in seaside communities)
It appears to be separate meshes (hard to tell at that size). Welding/combining meshes really helps, it can be a very noticeable difference on when played on a device. I’m sure the same is true for the desktop, you probably just have quite a bit before it is noticeable.
You seem to be on the right track. I would suggest just building the whole thing all out in Blender. It is much better to tweak an navigate in Blender than Unity. Also that way, if should find you need change the way you are doing it, just pull apart the file in Unity. Much more difficult to go the other direction.
Anyway, looks cool, look forward to seeing the town.
The project targets desktops not mobile. My goal is graphic quality not performance on lower spec computers.
The well is one mesh, 1346 vertexes. I might end up having more than 1 material on it, I haven’t do any texture yet, just auto unwrapped and baked the AO in the texture.
Blender materials can import a little odd when when imported into Unity, I occasionally have to rearrange/reapply them when using multiple textures after import, but never anything major. Generally its a pretty smooth process. Since you are targeting desktops, you won’t have to worry about too much about crazy tweaking for performance.
Yea, you’ll be good just building it all in Blender (or Maya/3DS/etc). That is a pretty a pretty common way to go about it. And if you want to use parts of the imported city for other scenes/levels/etc you can just grab them from the imported prefab.
I don’t have anything to add about best practices, just wanted to point out that you’ve got skill and a really nice style. That well looks really nice.
Interesting question and as already stated the answer can be heavily dictated by target delivery devices etc.
Having been involved in writing 3D applications/games for a good decade I’ve come to realise that I’m extremely biased in my own opinion against modular/multiple pieces (in most circumstances) towards batching up as many meshes and textures into single models. Now ten or even five years ago (and again on mobile) this was and still can be a good practise, however gpu’s even on mobile have come a long way and quite likely this appraoch is actually far more limiting these days.
In fact just last week I had to do some profiling on the iPad 2 as a client had sent some vehicle models of up to 800k polygons and 50 meshes! I was pretty surprised to discover that the iPad was able to deal with it and still get 20-30 fps. Another model had 540k polys and 87 meshes (drawcalls) it managed 50-60 fps. I could spawn 3 of these and still get 25-30 fps.
So i’m coming round to the idea that modelling should be done with a view to giving you the most flexibility, to avoid pre-emptively trying to merge models together or build complex texture atlases and where possible to model using techniques which allow quick and simple scaling of polygon density, as opposed to trying to model something low poly from the outset. Maybe have an eye on being able to do merging and atlasing and perhaps actually do it for a sub-set of models where it makes sense, but otherwise have every separate and modular. Then once the design is finalised in the project, go back and look to streamline it with any obvious and easy merging of meshes and atlas creation.
If necessary this could extend towards producing just modular pieces and arranging them in Unity, then exporting the final positions or even the entire meshes back into a 3d modelling package for final clean up. Though obviously this requires writing some tools to help do so.
Of course the degree with which you can do this depends on how much time you can devote to the modelling. If you are time or cost limited you may simply have to start merging/atlasing models earlier in the process.
As I’m also interested in this topic… If you get the whole harbor as a single model, maybe even a single mesh, and you import it into unity, how do you deal with collision? Do you make a simplified mesh of the whole harbor in your external 3d tool and use it as a collision mesh for the harbor prefab? Does unity performance depend on the complexity of the collision mesh if it’s basically the only collision mesh in the game? Or do you create the simple collision primitives in Unity and move them around in the scene in Unity?
Well it shouldn’t be like that, as in any modeling package you should be able to create ‘instances’ of model, in exactly the same way you do in Unity. Indeed its pretty vital in 3d modelling too in order to keep the data sizes down. I guess the problem may come if the file format such as FBX didn’t support it, or that if you applied lightmapping in your 3D app that it broke instancing.
However I do agree with the main point of your argument, that often its just far easier and possibly superior to do as much as possible in Unity, to leverage the features it provides such as Beast lightmapping etc.
I think you should model the whole thing in Blender not Unity.If you target PC better keep your buildings as separate Objects (but exported together as a single asset), share as many Textures/Materials you can, and make them static.
What i like doing with Buildings is to have 2-3 materials that share 1 Texture. That way UV Mapping is not a nightmare, and your models use several shaders(metal/stone/ceramic/glass etc) and they don’t look dull.